-
Notifications
You must be signed in to change notification settings - Fork 12
Open
Description
📌 ROADMAP ULTRA DÉTAILLÉE – API COMMUNITY
🚀 Architecture : N‐Tier (Entities, DTOs, Services, Controllers)
📦 Technos : NestJS, TypeORM, PostgreSQL, Docker, CI/CD
❌ Pas d’authentification
État d'Avancement Global
- 🟢 Terminé
- ⚪️ Non commencé
- 🟡 En cours
- 🔵 Prêt à démarrer
Version 0.x.x
2. Gestion des Ressources (Resources)
On commence par l’entité Resource car c’est la base fonctionnelle de l’application.
2.1. Base de Données & Relations
📂 Entité Resource
- ⚪️ resource_uuid (UUID, PK)
- ⚪️ resource_title (STRING)
- ⚪️ resource_description (TEXT)
- ⚪️ resource_content (TEXT)
- ⚪️ resource_status (ENUM :
"pending","approved","rejected") - ⚪️ resource_createdAt (DATE)
- ⚪️ resource_updatedAt (DATE)
Relations :
- ⚪️
user_uuid(FK) si la resource est créée par un user (relation plus tard, quand Users arriveront) - ⚪️ Ressource peut avoir plusieurs Tags (many‐to‐many)
2.2. Services & DTOs
📂 DTOs & Validation
- ⚪️
create-resource.dto.ts– (title, content, status...) - ⚪️
update-resource.dto.ts– (optionnel, partial)
📂 Service : ResourceService
- ⚪️
createResource(createDto: CreateResourceDto) - ⚪️
getResourceById(resourceUuid: string) - ⚪️
getResources()(liste, pagination éventuelle) - ⚪️
updateResource(resourceUuid: string, updateDto: UpdateResourceDto) - ⚪️
deleteResource(resourceUuid: string) - ⚪️
assignTagToResource(resourceUuid: string, tagUuid: string)(gérer la table pivot)
📂 Controller : ResourceController
- ⚪️
POST /resources(créer) - ⚪️
GET /resources(lister) - ⚪️
GET /resources/:id(afficher un resource) - ⚪️
PATCH /resources/:id(update) - ⚪️
DELETE /resources/:id(delete) - ⚪️
POST /resources/:id/tags/:tagId(associer un tag) – plus tard
2.3. Tests Ressources
- ⚪️ Tests unitaires du ResourceService (mocks du repo)
- ⚪️ Tests E2E (création →
201, lecture →200, update, delete, etc.)
3. Gestion des Utilisateurs (Users)
Deuxième priorité : pouvoir lier des Resources à un User, attribuer rôles, XP, badges…
3.1. Base de Données & Relations
📂 Entité User
- ⚪️ user_uuid (UUID, PK)
- ⚪️ user_roles (ENUM :
"admin","moderator","member") - ⚪️ user_discord_uuid (STRING)
- ⚪️ user_xp (INT)
- ⚪️ user_level (INT)
- ⚪️ user_status (ENUM :
"active","banned")
Relations :
- ⚪️ Un user peut créer plusieurs
Resource→ leresource.user_uuidpointe suruser_uuid - ⚪️ Un user peut avoir plusieurs badges (relation many‐to‐many)
- ⚪️ Un user peut avoir plusieurs transactions (XPTransactions)
📂 Entité Badge
- ⚪️ badge_uuid (UUID, PK)
- ⚪️ badge_name (STRING)
- ⚪️ badge_description (TEXT)
📂 Entité XpTransaction
- ⚪️ xp_transaction_uuid (UUID, PK)
- ⚪️ transaction_type (ENUM :
"vote","resource","comment") - ⚪️ transaction_value (INT)
- ⚪️ user_uuid (FK)
3.2. Services & DTOs
📂 DTOs & Validation
- ⚪️
create-user.dto.ts - ⚪️
update-user.dto.ts - ⚪️
create-badge.dto.ts
📂 Services
-
UserService
- ⚪️
createUser(dto: CreateUserDto) - ⚪️
getUserById(uuid: string) - ⚪️
getUsers()(optionnel) - ⚪️
updateUser(uuid: string, dto: UpdateUserDto) - ⚪️
deleteUser(uuid: string) - ⚪️
assignBadgeToUser(userUuid, badgeUuid) - ⚪️
getUserBadges(userUuid: string) - ⚪️
getUserXpTransactions(userUuid: string)
- ⚪️
-
BadgeService
- ⚪️
createBadge(dto: CreateBadgeDto) - ⚪️
getBadges()
- ⚪️
-
XpTransactionService
- ⚪️
createXpTransaction(userUuid: string, ... ) - ⚪️
getXpTransactions(userUuid?: string)
- ⚪️
📂 Controllers
-
UserController
- ⚪️
POST /users - ⚪️
GET /users/:id - ⚪️
PATCH /users/:id - ⚪️
DELETE /users/:id - ⚪️
POST /users/:id/badges/:badgeId(attribuer un badge) - ⚪️
GET /users/:id/xp-transactions
- ⚪️
-
BadgeController
- ⚪️
POST /badges - ⚪️
GET /badges - ⚪️ (Optionnel)
DELETE /badges/:id
- ⚪️
-
XpTransactionController
- ⚪️
POST /xp-transactions - ⚪️
GET /xp-transactions(ouGET /xp-transactions/:id)
- ⚪️
3.3. Tests Users
- ⚪️ Tests unitaires du UserService + BadgeService + XpTransactionService
- ⚪️ Tests E2E (CRUD user, assign badge, create xp transaction, etc.)
4. Gestion des Commentaires (Comments)
Les Comments sont liés à Resource et User.
4.1. Base de Données & Relations
📂 Entité Comment
- ⚪️ comment_uuid (UUID, PK)
- ⚪️ comment_content (TEXT)
- ⚪️ comment_status (ENUM :
"visible","hidden") - ⚪️ resource_uuid (FK)
- ⚪️ user_uuid (FK)
Relations :
- ⚪️ Un comment “appartient” à une Resource
- ⚪️ Un comment “appartient” à un User
4.2. Services & DTOs
📂 DTOs & Validation
- ⚪️
create-comment.dto.ts - ⚪️
update-comment.dto.ts(optionnel)
📂 CommentService
- ⚪️
createComment(userUuid, resourceUuid, dto: CreateCommentDto) - ⚪️
getCommentsForResource(resourceUuid: string) - ⚪️
updateComment(commentUuid: string, updateDto) - ⚪️
deleteComment(commentUuid: string)
📂 CommentController
- ⚪️
POST /comments(ou/resources/:id/comments) - ⚪️
GET /resources/:id/comments - ⚪️
PATCH /comments/:id - ⚪️
DELETE /comments/:id
4.3. Tests Comments
- ⚪️ Tests unitaires (CommentService)
- ⚪️ Tests E2E : create comment (201), get resource’s comments (200)...
5. Gestion des Votes (Votes)
Les votes peuvent cibler un Resource ou un Comment, d’après le MCD.
5.1. Base de Données & Relations
📂 Entité Vote
- ⚪️ vote_uuid (UUID, PK)
- ⚪️ vote_type (ENUM :
"upvote","downvote") - ⚪️ user_uuid (FK)
- ⚪️ resource_uuid (FK nullable?)
- ⚪️ comment_uuid (FK nullable?)
Relations :
- ⚪️ Un vote “appartient” à un user
- ⚪️ Soit c’est un vote sur resource, soit sur comment
5.2. Services & DTOs
📂 VoteService
- ⚪️
createVote(userUuid, resourceUuid?, commentUuid?, voteType) - ⚪️
getVotesForResource(resourceUuid) - ⚪️
getVotesForComment(commentUuid) - ⚪️
deleteVote(voteUuid) - ⚪️ (Optionnel)
updateVote(voteUuid, newType)
📂 Controllers
- VoteController
- ⚪️
POST /votes– (body précisevote_type,user_uuid,resource_uuidoucomment_uuid) - ⚪️
GET /resources/:id/votes– lister les votes d’une resource - ⚪️
GET /comments/:id/votes– lister les votes d’un comment - ⚪️
DELETE /votes/:id
- ⚪️
5.3. Tests Votes
- ⚪️ Tests unitaires (VoteService)
- ⚪️ Tests E2E (create vote, delete vote, etc.)
6. Modération (Reports & Actions)
Permet de signaler un user, un resource, ou un comment, puis d’y associer une action modération.
6.1. Base de Données & Relations
📂 Entité Report
- ⚪️ report_uuid (UUID, PK)
- ⚪️ report_category (ENUM :
"spam","offensive","plagiat", etc.) - ⚪️ report_status (ENUM :
"open","resolved") - ⚪️ user_uuid (FK → user qui signale)
- ⚪️ target_type (STRING : “user”, “resource”, “comment”)
- ⚪️ target_uuid (UUID)
📂 Entité ModerationAction
- ⚪️ moderation_uuid (UUID, PK)
- ⚪️ action_type (ENUM :
"delete","ban", etc.) - ⚪️ action_reason (TEXT)
- ⚪️ report_uuid (FK si lié à un report)
6.2. Services & DTOs
-
ReportService
- ⚪️
createReport(userUuid, category, targetType, targetId...) - ⚪️
getReports() - ⚪️
updateReport(reportUuid, newStatus)
- ⚪️
-
ModerationService
- ⚪️
createModerationAction(reportUuid?, actionType, reason, targetType, targetId) - ⚪️
getModerationActions()
- ⚪️
6.3. Controllers
-
ReportController
- ⚪️
POST /reports - ⚪️
GET /reports - ⚪️
PATCH /reports/:id
- ⚪️
-
ModerationController
- ⚪️
POST /moderation-actions - ⚪️
GET /moderation-actions
- ⚪️
6.4. Tests Modération
- ⚪️ Tests unitaires (ReportService, ModerationService)
- ⚪️ Tests E2E (create report, patch status, create mod action)
7. Finalisation & Intégration
7.1. Tests unitaires & E2E
- ⚪️ Écrire des tests pour chaque service (mock repo)
- ⚪️ Écrire des tests E2E (avec
@nestjs/testing+ Supertest) pour tous les endpoints CRUD - ⚪️ Couverture : minimum (create, read, update, delete, + cas d’erreur 404)
7.2. Optimisation Docker
- ⚪️ Réduire l’image (multi-stage build)
- ⚪️ Vérifier
docker-compose.yml(volumes, secrets, etc.) - ⚪️ (Optionnel) Publier l’image sur DockerHub ou autre registry
7.3. CI/CD
- ⚪️ Mettre en place un pipeline GitHub Actions (ou GitLab CI) :
- ⚪️ Lancer
npm install,npm run build,npm run test - ⚪️ (Optionnel) Build Docker pour valider l’image
- ⚪️ Lancer
7.4. Publication & Documentation
- ⚪️ Swagger (via
@nestjs/swagger) ou Postman docs - ⚪️ README détaillé (installation, usage)
- ⚪️ Tag v1.0.0 ou
v0.1.xstable
7.5. Intégration Discord (optionnel)
- ⚪️ Installer
discord.js - ⚪️ Créer un bot (Portail Discord Dev), récupérer token
- ⚪️ Faire des commandes slash (ex.
/create-resource,/vote, etc.) qui appellent l’API
Metadata
Metadata
Assignees
Labels
No labels