chore: initial commit
This commit is contained in:
commit
03f03f7ad2
39 files changed
+7292
No files matched your search
@@ -0,0 +1,105 @@
|
||||
@startuml
|
||||
' Diagramme de classes — Application web Flashcards (Architecture : couche d'accès générique)
|
||||
skinparam classAttributeIconSize 0
|
||||
skinparam classFontStyle bold
|
||||
|
||||
' ===== Domaine =====
|
||||
class Card {
|
||||
- id : string
|
||||
- question : string
|
||||
- response : string
|
||||
- theme : string
|
||||
- tags : string[]
|
||||
- createdAt : Date
|
||||
- updatedAt : Date
|
||||
+ Card(id, question, response, theme, tags)
|
||||
+ validate() : void
|
||||
}
|
||||
|
||||
' ===== Abstraction générique d'accès aux données =====
|
||||
interface CardRepository {
|
||||
+ findAll() : Promise<Card[]>
|
||||
+ findById(id : string) : Promise<Card | null>
|
||||
+ findRandom() : Promise<Card | null>
|
||||
+ findRandomByTheme(theme : string) : Promise<Card | null>
|
||||
+ findThemes() : Promise<string[]>
|
||||
+ create(card : Card) : Promise<Card>
|
||||
+ update(card : Card) : Promise<Card>
|
||||
+ delete(id : string) : Promise<boolean>
|
||||
}
|
||||
|
||||
' ===== Implémentations SGBD =====
|
||||
class MysqlCardRepository {
|
||||
- connection : MysqlConnection
|
||||
+ MysqlCardRepository(connection)
|
||||
}
|
||||
|
||||
class MongoCardRepository {
|
||||
- collection : MongoCollection
|
||||
+ MongoCardRepository(collection)
|
||||
}
|
||||
|
||||
class "MysqlConnection" as ConnMysql {
|
||||
- host : string
|
||||
- port : number
|
||||
- user : string
|
||||
- password : string
|
||||
- database : string
|
||||
+ query(sql : string, params : unknown[]) : Promise<unknown>
|
||||
}
|
||||
|
||||
class "MongoCollection" as ColMongo {
|
||||
+ find(filter : object) : Promise<unknown[]>
|
||||
+ insertOne(doc : object) : Promise<unknown>
|
||||
+ updateOne(filter : object, update : object) : Promise<unknown>
|
||||
+ deleteOne(filter : object) : Promise<unknown>
|
||||
}
|
||||
|
||||
class DatabaseConfig {
|
||||
- driver : string
|
||||
+ getActiveDriver() : string
|
||||
}
|
||||
|
||||
' ===== Service métier (dépend uniquement de l'abstraction) =====
|
||||
class CardService {
|
||||
- repository : CardRepository
|
||||
+ CardService(repository : CardRepository)
|
||||
+ listCards() : Promise<Card[]>
|
||||
+ getCard(id : string) : Promise<Card>
|
||||
+ createCard(payload : NewCardPayload) : Promise<Card>
|
||||
+ updateCard(id : string, payload : UpdateCardPayload) : Promise<Card>
|
||||
+ deleteCard(id : string) : Promise<void>
|
||||
+ playRandom(theme? : string) : Promise<Card>
|
||||
+ listThemes() : Promise<string[]>
|
||||
}
|
||||
|
||||
' ===== Couche exposition (routes / contrôleur) =====
|
||||
class CardController {
|
||||
+ handleList(req, res) : Promise<void>
|
||||
+ handleGetById(req, res) : Promise<void>
|
||||
+ handleCreate(req, res) : Promise<void>
|
||||
+ handleUpdate(req, res) : Promise<void>
|
||||
+ handleDelete(req, res) : Promise<void>
|
||||
+ handlePlayRandom(req, res) : Promise<void>
|
||||
+ handleThemes(req, res) : Promise<void>
|
||||
}
|
||||
|
||||
class Factory {
|
||||
{static} buildCardRepository(config : DatabaseConfig) : CardRepository
|
||||
}
|
||||
|
||||
' ===== Relations =====
|
||||
CardRepository <|.. MysqlCardRepository
|
||||
CardRepository <|.. MongoCardRepository
|
||||
|
||||
MysqlCardRepository *-- ConnMysql : utilise >
|
||||
MongoCardRepository *-- ColMongo : utilise >
|
||||
|
||||
CardService *-- CardRepository : <<injecté>> utilise >
|
||||
CardService ..> Card : < crée/retourne
|
||||
|
||||
CardController --> CardService : utilise
|
||||
Factory ..> CardRepository : <<instance de>> construit
|
||||
Factory ..> CardService : construit
|
||||
|
||||
@enduml
|
||||
Reference in new issue
Block a user