Skip to content

Commit 3b1c6cf

Browse files
committed
feat(api): add candidacy_updateLastActivityDate mutation to update last activity date and ready for jury estimated date
1 parent 4ac13c0 commit 3b1c6cf

File tree

4 files changed

+46
-12
lines changed

4 files changed

+46
-12
lines changed

packages/reva-api/modules/candidacy/candidacy.graphql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,4 +299,8 @@ type Mutation {
299299
candidacyId: UUID!
300300
typeAccompagnement: TypeAccompagnement!
301301
): Candidacy!
302+
candidacy_updateLastActivityDate(
303+
candidacyId: UUID!
304+
readyForJuryEstimatedAt: Timestamp!
305+
): Candidacy!
302306
}

packages/reva-api/modules/candidacy/candidacy.resolvers.ts

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import mercurius from "mercurius";
44

55
import { prismaClient } from "../../prisma/client";
66
import { logCandidacyAuditEvent } from "../candidacy-log/features/logCandidacyAuditEvent";
7+
import { getCandidateById } from "../candidate/features/getCandidateById";
78
import { getOrganismById } from "../organism/features/getOrganism";
89
import { getDepartmentById } from "../referential/features/getDepartmentById";
10+
import { getReorientationReasonById } from "../referential/features/getReorientationReasonById";
911
import {
1012
FunctionalCodeError,
1113
FunctionalError,
@@ -22,10 +24,17 @@ import { addExperienceToCandidacy } from "./features/addExperienceToCandidacy";
2224
import { archiveCandidacy } from "./features/archiveCandidacy";
2325
import { cancelDropOutCandidacy } from "./features/cancelDropOutCandidacy";
2426
import { dropOutCandidacy } from "./features/dropOutCandidacy";
27+
import { getCandidacies } from "./features/getCandicacies";
2528
import { getCandidacy } from "./features/getCandidacy";
2629
import { getCandidacyCcns } from "./features/getCandidacyCcns";
30+
import { getCandidacyConventionCollectiveById } from "./features/getCandidacyConventionCollectiveById";
2731
import { getCandidacyCountByStatus } from "./features/getCandidacyCountByStatus";
32+
import { getCandidacyDropOutByCandidacyId } from "./features/getCandidacyDropOutByCandidacyId";
33+
import { getCandidacyFinancingMethodById } from "./features/getCandidacyFinancingMethodById";
2834
import { getCandidacyGoals } from "./features/getCandidacyGoals";
35+
import { getCandidacyOnCandidacyFinancingMethodsByCandidacyId } from "./features/getCandidacyOnCandidacyFinancingMethodsByCandidacyId";
36+
import { getCandidacyStatusesByCandidacyId } from "./features/getCandidacyStatusesByCandidacyId";
37+
import { getDropOutReasonById } from "./features/getDropOutReasonById";
2938
import { getExperiencesByCandidacyId } from "./features/getExperiencesByCandidacyId";
3039
import { searchOrganismsForCandidacy } from "./features/searchOrganismsForCandidacy";
3140
import { selectOrganismForCandidacy } from "./features/selectOrganismForCandidacy";
@@ -34,28 +43,20 @@ import { submitCandidacy } from "./features/submitCandidacy";
3443
import { takeOverCandidacy } from "./features/takeOverCandidacy";
3544
import { unarchiveCandidacy } from "./features/unarchiveCandidacy";
3645
import { updateAppointmentInformations } from "./features/updateAppointmentInformations";
46+
import { updateCandidacyTypeAccompagnement } from "./features/updateCandidacyTypeAccompagnement";
3747
import { updateCandidacyTypologyAndCcn } from "./features/updateCandidacyTypologyAndCcn";
3848
import { updateContactOfCandidacy } from "./features/updateContactOfCandidacy";
3949
import { updateExperienceOfCandidacy } from "./features/updateExperienceOfCandidacy";
4050
import { updateGoalsOfCandidacy } from "./features/updateGoalsOfCandidacy";
51+
import { updateLastActivityDate } from "./features/updateLastActivityDate";
52+
import { validateDropOutCandidacy } from "./features/validateDropOutCandidacy";
4153
import { logCandidacyEvent } from "./logCandidacyEvent";
4254
import {
4355
sendCandidacyArchivedEmailToCertificateur,
4456
sendCandidacyDropOutEmailToCandidate,
4557
sendCandidacyDropOutEmailToCertificateur,
4658
} from "./mails";
4759
import { resolversSecurityMap } from "./security/security";
48-
import { getCandidacyStatusesByCandidacyId } from "./features/getCandidacyStatusesByCandidacyId";
49-
import { getReorientationReasonById } from "../referential/features/getReorientationReasonById";
50-
import { getCandidacyConventionCollectiveById } from "./features/getCandidacyConventionCollectiveById";
51-
import { getCandidacyDropOutByCandidacyId } from "./features/getCandidacyDropOutByCandidacyId";
52-
import { getDropOutReasonById } from "./features/getDropOutReasonById";
53-
import { getCandidacies } from "./features/getCandicacies";
54-
import { getCandidateById } from "../candidate/features/getCandidateById";
55-
import { updateCandidacyTypeAccompagnement } from "./features/updateCandidacyTypeAccompagnement";
56-
import { validateDropOutCandidacy } from "./features/validateDropOutCandidacy";
57-
import { getCandidacyOnCandidacyFinancingMethodsByCandidacyId } from "./features/getCandidacyOnCandidacyFinancingMethodsByCandidacyId";
58-
import { getCandidacyFinancingMethodById } from "./features/getCandidacyFinancingMethodById";
5960

6061
const unsafeResolvers = {
6162
Candidacy: {
@@ -594,6 +595,13 @@ const unsafeResolvers = {
594595
});
595596
return result;
596597
},
598+
candidacy_updateLastActivityDate: async (
599+
_parent: unknown,
600+
payload: {
601+
candidacyId: string;
602+
readyForJuryEstimatedAt: Date;
603+
},
604+
) => updateLastActivityDate(payload),
597605
},
598606
};
599607

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { isBefore } from "date-fns";
2+
import { prismaClient } from "../../../prisma/client";
3+
4+
export const updateLastActivityDate = async ({
5+
candidacyId,
6+
readyForJuryEstimatedAt,
7+
}: {
8+
candidacyId: string;
9+
readyForJuryEstimatedAt: Date;
10+
}) => {
11+
if (isBefore(readyForJuryEstimatedAt, new Date())) {
12+
throw new Error(
13+
"La date de préparation pour le jury ne peut être dans le passé",
14+
);
15+
}
16+
17+
return prismaClient.candidacy.update({
18+
where: { id: candidacyId },
19+
data: { readyForJuryEstimatedAt, lastActivityDate: new Date() },
20+
});
21+
};

packages/reva-api/modules/candidacy/security/security.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import {
44
isAdminOrCandidacyCompanion,
55
isAdminOrManager,
66
isCandidacyCompanion,
7-
isOwnerOfCandidate,
87
isOwnerOfCandidacy,
8+
isOwnerOfCandidate,
99
isOwnerOrCanManageCandidacy,
1010
} from "../../shared/security/presets";
1111
import { canAccessCandidacy } from "./canAccessCandidacy.security";
@@ -46,4 +46,5 @@ export const resolversSecurityMap = {
4646
isAdminOrCandidacyCompanion,
4747
"Mutation.candidacy_confirmPaymentRequest": isAdminOrCandidacyCompanion,
4848
"Mutation.candidacy_setReadyForJuryEstimatedAt": isOwnerOrCanManageCandidacy,
49+
"Mutation.candidacy_updateLastActivityDate": isOwnerOfCandidacy,
4950
};

0 commit comments

Comments
 (0)