log
Représente une entrée de journal d'activité suivant les modifications d'entités, les actions utilisateur et fournissant une piste d'audit. Les journaux supportent la fonctionnalité d'annulation/rétablissement via un suivi structuré des modifications.
Champs
| Champ | Type | Description |
|---|---|---|
id | uuid | Identifiant unique de l'entrée de journal (généré automatiquement) |
orgId | uuid | Référence à l'organisation |
userId | uuid | Utilisateur qui a effectué la modification |
memberId | uuid | Membre qui a effectué la modification |
memberName | String | Nom du membre (conservé pour les membres supprimés) |
createdAt | Timestamp | Date de création de l'entrée de journal (par défaut : horodatage actuel) |
display | JSON | Type de journal et données à afficher dans l'interface |
changes | JSON | Journal structuré des modifications d'entités pour l'annulation/rétablissement |
canceled | Boolean | Indique si cette entrée de journal a été annulée (par défaut : false) |
cancelLogId | uuid | Référence à l'entrée de journal qui a été annulée (optionnel) |
cancelMemberId | uuid | Membre qui a annulé l'action (optionnel) |
cancelMemberName | String | Nom du membre qui a annulé (optionnel) |
meetingId | uuid | Réunion pendant laquelle ce journal a été créé (optionnel) |
taskId | uuid | Tâche associée à ce journal (optionnel) |
threadId | uuid | Discussion associée à ce journal (optionnel) |
Structure des modifications d’entités
Le champ changes suit les modifications des entités avec la structure suivante :
type EntityChange = {
type: 'Create' | 'Update' | 'Delete'
id: string
data?: Entity // Pour Create/Delete
prevData?: Entity // Pour Update (état précédent)
newData?: Entity // Pour Update (nouvel état)
}
Relations
Relations objet
org— L’organisation à laquelle ce journal appartientuser— L’utilisateur qui a effectué la modificationmember— Le membre qui a effectué la modificationcancelLog— L’entrée de journal qui a été annulée (s’il s’agit d’une annulation)cancelMember— Le membre qui a annulé l’actiontask— La tâche associée (le cas échéant)thread— La discussion associée (le cas échéant)
Exemples de requêtes
Lister les journaux récents
query GetRecentLogs($orgId: uuid!) {
log(
where: { orgId: { _eq: $orgId } }
order_by: { createdAt: desc }
limit: 10
) {
id
createdAt
memberName
display
changes
canceled
task {
title
}
thread {
title
}
}
}
Exemples de mutations
Créer une entrée de journal
mutation CreateLog {
insert_log_one(
object: {
orgId: "your-org-id"
memberId: "member-id"
memberName: "John Doe"
display: { type: "task_created", title: "New Task" }
changes: {
type: "Create"
id: "task-id"
data: { title: "New Task", status: "TODO" }
}
}
) {
id
createdAt
display
}
}
Annuler une entrée de journal (Annulation)
mutation CancelLog {
insert_log_one(
object: {
orgId: "your-org-id"
memberId: "member-id"
memberName: "Jane Doe"
cancelLogId: "original-log-id"
cancelMemberId: "original-member-id"
cancelMemberName: "John Doe"
display: { type: "task_creation_canceled" }
changes: {
type: "Delete"
id: "task-id"
data: { title: "New Task", status: "TODO" }
}
}
) {
id
cancelLog {
id
display
}
}
}
Permissions
L’accès aux journaux est contrôlé selon les règles suivantes :
- Les membres de l’organisation peuvent consulter les journaux de leur organisation
- La création de journaux nécessite l’appartenance à l’organisation avec un rôle approprié
- Le
userIdest automatiquement défini sur l’utilisateur authentifié - Les entrées de journal ne peuvent pas être supprimées après leur création. Seul le champ
canceledpeut être mis à jour - L’annulation est gérée par la création de nouvelles entrées de journal (pas par la modification des originales)
Le champ display contient des informations conviviales sur l’action, tandis
que le champ changes stocke les détails techniques pour
l’annulation/rétablissement. Les noms des membres sont conservés pour
maintenir la lisibilité même si les membres sont supprimés ultérieurement.