Skip to content

Planification api bot Community #195

@UnknOownU

Description

@UnknOownU

📌 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 → le resource.user_uuid pointe sur user_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 (ou GET /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écise vote_type, user_uuid, resource_uuid ou comment_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

7.4. Publication & Documentation

  • ⚪️ Swagger (via @nestjs/swagger) ou Postman docs
  • ⚪️ README détaillé (installation, usage)
  • ⚪️ Tag v1.0.0 ou v0.1.x stable

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions