Data Model¶
classDiagram
class User {
+int id
+string email
+string roles
+string password
+datetime createdAt
+datetime updatedAt
}
class JobOffer {
+int id
+string title
+string company
+string url
+string rawContent
+string location
+string notes
+string interviewPrep
+string sourceUrl
+string recruiterContactEmail
+string jobSummary
+decimal salaryMin
+decimal salaryMax
+string salaryCurrency
+string contractType
+string remotePolicy
+json details
+datetime createdAt
+datetime updatedAt
}
class Application {
+int id
+ApplicationStatus status
+int pipelinePosition
+datetime appliedAt
+datetime createdAt
+datetime updatedAt
+datetime lastActivityAt
+string cvFitAnalysisStatus
+json cvFitAnalysisResult
+datetime cvFitAnalysisRequestedAt
+datetime cvFitAnalysisCompletedAt
}
class ApplicationHistory {
+int id
+ApplicationHistoryActionType actionType
+string description
+bool isSeen
+datetime createdAt
}
class RecruiterEmail {
+int id
+string sender
+string subject
+string body
+string messageId
+datetime receivedAt
+string aiSummary
+string direction
+bool isFavourite
+bool isDeleted
+bool isDraft
+bool isSeen
+json labels
}
class Interview {
+int id
+datetime scheduledAt
+string type
+string notes
+string locationOrLink
+string contactName
+bool reminderSent
+datetime reminderSentAt
}
class ScheduledFollowUp {
+int id
+datetime scheduledAt
+string status
+datetime cancelledAt
+string generatedContent
}
class FollowUpRule {
+int id
+int daysWithoutReply
+string templateType
+bool enabled
+datetime createdAt
}
class AiGenerationLog {
+int id
+string type
+string prompt
+int tokensUsed
+datetime createdAt
}
class ApplicationStatus {
WISHLIST
APPLIED
INTERVIEW
OFFER
REJECTED
ACCEPTED
}
class ApplicationHistoryActionType {
EMAIL_RECEIVED
STATUS_CHANGED
CREATED
IMPORTED_FROM_EXTENSION
RELANCE_SENT
INTERVIEW_SCHEDULED
}
User "1" --> "*" Application : owner
User "1" --> "*" JobOffer : owner
User "1" --> "*" FollowUpRule : owner
User "1" --> "*" RecruiterEmail : owner
User "1" --> "*" AiGenerationLog : owner
JobOffer "1" --> "*" Application
Application "1" --> "*" ApplicationHistory
Application "1" --> "*" RecruiterEmail
Application "1" --> "*" ScheduledFollowUp
Application "1" --> "*" Interview
ApplicationHistory --> Application
RecruiterEmail --> Application
ScheduledFollowUp --> Application
Interview --> Application
Explications des entitées¶
User¶
- Compte candidat
- Owner de toutes les données (multi-tenant simple)
- Utilisé pour auth et filtrage global
JobOffer¶
- Offre d’emploi
- Peut venir de l'extension (import) ou d’un ajout manuel
- Contient :
- données métier (title, company, salary…)
- contenu brut (
rawContent) pour reprocessing - enrichissements (
jobSummary,interviewPrep) - Relation : 1 JobOffer → N Applications
Application¶
- Entité centrale du système
- Représente une candidature utilisateur pour une offre
- Contient :
- état (
status,pipelinePosition) - dates (
appliedAt,lastActivityAt) - données IA (analyse CV)
- Agrège :
- historique
- emails recruteur
- interviews
- relances
- Source principale de vérité métier
ApplicationHistory¶
- Timeline des événements d’une candidature / notifications utilisateurs
- Types :
- création
- changement de statut
- email reçu
- entretien planifié
- relance envoyée
- Contient :
- description optionnelle
- flag
isSeen(notifications) - Sert pour UI, notifications et debug
RecruiterEmail¶
- Email synchronisé depuis la boîte mail
- Source externe de vérité
- Contraintes :
- unique
(messageId + owner) - Contient :
- contenu (
body) - metadata (
sender,subject,receivedAt) - flags UI (
isSeen,isFavourite, etc) - résumé IA (
aiSummary) - Peut déclencher :
- mise à jour activité
- création d’historique
FollowUpRule¶
- Règle utilisateur pour automatiser les relances
- Définit :
- délai sans réponse (
daysWithoutReply) - type de template
- activation
- Sert d’input pour génération de relances
ScheduledFollowUp¶
- Relance planifiée concrète
- Cycle :
- pending → sent → cancelled
- Contient :
- date d’envoi
- contenu généré
- Sert de buffer entre règle et envoi réel
Interview¶
- Entretien lié à une candidature
- Contient :
- date (
scheduledAt) - type (visio, tel, présentiel)
- lieu ou lien
- contact
- notes
- Gère aussi les rappels (
reminderSent)
AiGenerationLog¶
- Log des appels à l’IA
- Contient :
- type d’usage
- prompt
- tokens consommés
- Sert pour :
- monitoring coût
- debug
- analytics
UserMailboxSettings¶
- Configuration mail utilisateur
- Contient :
- IMAP (sync réception)
- SMTP (envoi emails)
- OAuth (tokens, expiration)
- Sert pour :
- synchronisation des emails
- envoi des relances