feat(#205): renommer absences_garde → evenements_agenda
Migration live + BDD.sql from-scratch, module Nest / API /evenements-agenda, FK cartes id_evenement. Front stub path aligné. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -6,11 +6,11 @@ import {
|
||||
} from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { IsNull, Repository } from 'typeorm';
|
||||
import { AbsencesGardeService } from '../absences-garde/absences-garde.service';
|
||||
import { EvenementsAgendaService } from '../evenements-agenda/evenements-agenda.service';
|
||||
import {
|
||||
StatutAbsenceGardeType,
|
||||
TypeAbsenceGardeType,
|
||||
} from 'src/entities/absences_garde.entity';
|
||||
StatutEvenementAgendaType,
|
||||
TypeEvenementAgendaType,
|
||||
} from 'src/entities/evenements_agenda.entity';
|
||||
import { AmChildren } from 'src/entities/am_children.entity';
|
||||
import { ParentsChildren } from 'src/entities/parents_children.entity';
|
||||
import { RoleType } from 'src/entities/users.entity';
|
||||
@@ -49,7 +49,7 @@ export class CardsService {
|
||||
private readonly amChildrenRepo: Repository<AmChildren>,
|
||||
@InjectRepository(ParentsChildren)
|
||||
private readonly parentsChildrenRepo: Repository<ParentsChildren>,
|
||||
private readonly absencesService: AbsencesGardeService,
|
||||
private readonly evenementsService: EvenementsAgendaService,
|
||||
private readonly realtime: CardsRealtimeService,
|
||||
) {}
|
||||
|
||||
@@ -110,11 +110,11 @@ export class CardsService {
|
||||
);
|
||||
const operation = dto.operation ?? CardOperationType.CREATE;
|
||||
|
||||
let absenceId = dto.id_absence;
|
||||
let absenceId = dto.id_evenement;
|
||||
const absenceType = this.mapAbsenceType(dto.type_code);
|
||||
|
||||
if (operation === CardOperationType.CREATE) {
|
||||
const absence = await this.absencesService.creer(userId, role, {
|
||||
const absence = await this.evenementsService.creer(userId, role, {
|
||||
id_placement: dto.id_placement,
|
||||
type: absenceType,
|
||||
date_debut: dto.date_debut,
|
||||
@@ -124,16 +124,16 @@ export class CardsService {
|
||||
absenceId = absence.id;
|
||||
} else {
|
||||
if (!absenceId) {
|
||||
throw new BadRequestException('id_absence requis pour operation=update');
|
||||
throw new BadRequestException('id_evenement requis pour operation=update');
|
||||
}
|
||||
await this.absencesService.maj(userId, role, absenceId, {
|
||||
await this.evenementsService.maj(userId, role, absenceId, {
|
||||
date_debut: dto.date_debut,
|
||||
date_fin: dto.date_fin,
|
||||
motif: dto.motif,
|
||||
// Congé accepté modifié → repasse en attente via cartes respond flow;
|
||||
// pour absence enfant update immédiat déjà fait.
|
||||
...(dto.type_code === 'conge_am'
|
||||
? { statut: StatutAbsenceGardeType.EN_ATTENTE }
|
||||
? { statut: StatutEvenementAgendaType.EN_ATTENTE }
|
||||
: {}),
|
||||
});
|
||||
}
|
||||
@@ -146,7 +146,7 @@ export class CardsService {
|
||||
const card = this.cardsRepo.create({
|
||||
type_code: type.code,
|
||||
id_placement: dto.id_placement,
|
||||
id_absence: absenceId,
|
||||
id_evenement: absenceId,
|
||||
cree_par: userId,
|
||||
operation,
|
||||
statut: statutInitial,
|
||||
@@ -211,15 +211,15 @@ export class CardsService {
|
||||
comment: dto.comment?.trim() || undefined,
|
||||
});
|
||||
|
||||
if (card.id_absence) {
|
||||
if (card.id_evenement) {
|
||||
if (dto.action === CardResponseActionType.ACCEPT || dto.action === CardResponseActionType.ACK) {
|
||||
await this.absencesService.maj(userId, role, card.id_absence, {
|
||||
statut: StatutAbsenceGardeType.ACCEPTE,
|
||||
await this.evenementsService.maj(userId, role, card.id_evenement, {
|
||||
statut: StatutEvenementAgendaType.ACCEPTE,
|
||||
});
|
||||
card.statut = CardInstanceStatutType.TRAITEE;
|
||||
} else if (dto.action === CardResponseActionType.REFUSE) {
|
||||
await this.absencesService.maj(userId, role, card.id_absence, {
|
||||
statut: StatutAbsenceGardeType.REFUSE,
|
||||
await this.evenementsService.maj(userId, role, card.id_evenement, {
|
||||
statut: StatutEvenementAgendaType.REFUSE,
|
||||
motif: dto.comment!.trim(),
|
||||
});
|
||||
card.statut = CardInstanceStatutType.REFUSEE;
|
||||
@@ -264,12 +264,12 @@ export class CardsService {
|
||||
throw new BadRequestException('Dates invalides');
|
||||
}
|
||||
|
||||
if (card.id_absence) {
|
||||
await this.absencesService.maj(userId, role, card.id_absence, {
|
||||
if (card.id_evenement) {
|
||||
await this.evenementsService.maj(userId, role, card.id_evenement, {
|
||||
date_debut: debut,
|
||||
date_fin: fin,
|
||||
motif: dto.motif,
|
||||
statut: StatutAbsenceGardeType.EN_ATTENTE,
|
||||
statut: StatutEvenementAgendaType.EN_ATTENTE,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -298,17 +298,17 @@ export class CardsService {
|
||||
throw new ForbiddenException('Seul le créateur peut supprimer cette carte');
|
||||
}
|
||||
const audienceIds = await this.audienceUserIds(card);
|
||||
if (card.id_absence) {
|
||||
if (card.id_evenement) {
|
||||
const absStatut =
|
||||
card.statut === CardInstanceStatutType.TRAITEE
|
||||
? null
|
||||
: card.id_absence;
|
||||
: card.id_evenement;
|
||||
// Supprime l’absence liée si pas encore acceptée définitivement
|
||||
if (
|
||||
card.statut === CardInstanceStatutType.OUVERTE ||
|
||||
card.statut === CardInstanceStatutType.REFUSEE
|
||||
) {
|
||||
await this.absencesService.supprimer(userId, role, card.id_absence);
|
||||
await this.evenementsService.supprimer(userId, role, card.id_evenement);
|
||||
}
|
||||
void absStatut;
|
||||
}
|
||||
@@ -336,13 +336,13 @@ export class CardsService {
|
||||
return rows.map((r) => r.id_utilisateur);
|
||||
}
|
||||
|
||||
private mapAbsenceType(typeCode: string): TypeAbsenceGardeType {
|
||||
private mapAbsenceType(typeCode: string): TypeEvenementAgendaType {
|
||||
if (typeCode === 'absence_enfant' || typeCode === 'absence_enfant_modif') {
|
||||
return TypeAbsenceGardeType.ABSENCE_ENFANT;
|
||||
return TypeEvenementAgendaType.ABSENCE_ENFANT;
|
||||
}
|
||||
if (typeCode === 'conge_am') return TypeAbsenceGardeType.CONGE_AM;
|
||||
if (typeCode === 'conge_am') return TypeEvenementAgendaType.CONGE_AM;
|
||||
if (typeCode === 'arret_maladie_am') {
|
||||
return TypeAbsenceGardeType.ARRET_MALADIE_AM;
|
||||
return TypeEvenementAgendaType.ARRET_MALADIE_AM;
|
||||
}
|
||||
throw new BadRequestException(`Type non mappé à une absence: ${typeCode}`);
|
||||
}
|
||||
@@ -350,7 +350,7 @@ export class CardsService {
|
||||
private async linkAbsenceCard(absenceId: string, cardId: string): Promise<void> {
|
||||
// Update direct pour éviter droits maj vides
|
||||
await this.cardsRepo.manager.query(
|
||||
`UPDATE absences_garde SET id_card_instance = $1, modifie_le = now() WHERE id = $2`,
|
||||
`UPDATE evenements_agenda SET id_card_instance = $1, modifie_le = now() WHERE id = $2`,
|
||||
[cardId, absenceId],
|
||||
);
|
||||
}
|
||||
@@ -471,7 +471,7 @@ export class CardsService {
|
||||
titre: card.type?.titre ?? card.type_code,
|
||||
couleur: card.type?.couleur ?? null,
|
||||
id_placement: card.id_placement,
|
||||
id_absence: card.id_absence ?? null,
|
||||
id_evenement: card.id_evenement ?? null,
|
||||
operation: card.operation,
|
||||
statut: card.statut,
|
||||
payload: card.payload ?? {},
|
||||
|
||||
Reference in New Issue
Block a user