Skip to content

Commit 79df74e

Browse files
authored
feat(programmation): lors de la cloture, supprime les brouillons restants (#631)
1 parent 07d5f7c commit 79df74e

File tree

4 files changed

+77
-2
lines changed

4 files changed

+77
-2
lines changed

server/controllers/programmingPlanController.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import localPrescriptionRepository from '../repositories/localPrescriptionReposi
2828
import prescriptionRepository from '../repositories/prescriptionRepository';
2929
import prescriptionSubstanceRepository from '../repositories/prescriptionSubstanceRepository';
3030
import programmingPlanRepository from '../repositories/programmingPlanRepository';
31+
import { sampleRepository } from '../repositories/sampleRepository';
3132
import { userRepository } from '../repositories/userRepository';
3233
import { ProtectedSubRouter } from '../routers/routes.type';
3334
import { notificationService } from '../services/notificationService';
@@ -155,6 +156,8 @@ export const programmingPlanRouter = {
155156
closedBy: user.id
156157
});
157158

159+
await sampleRepository.deleteDraftOnProgrammingPlan(programmingPlan.id);
160+
158161
const updatedProgrammingPlan = await programmingPlanRepository.findUnique(
159162
programmingPlan.id
160163
);
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { Knex } from 'knex';
2+
3+
export const up = async (knex: Knex) => {
4+
await knex.schema.alterTable('analysis', (table) => {
5+
table.dropForeign(['sample_id', 'item_number', 'copy_number']);
6+
});
7+
8+
await knex.schema.alterTable('analysis', (table) => {
9+
table
10+
.foreign(['sample_id', 'item_number', 'copy_number'])
11+
.references(['sample_id', 'item_number', 'copy_number'])
12+
.inTable('sample_items')
13+
.onDelete('CASCADE');
14+
});
15+
};
16+
17+
export const down = async (knex: Knex) => {
18+
await knex.schema.alterTable('analysis', (table) => {
19+
table.dropForeign(['sample_id', 'item_number', 'copy_number']);
20+
});
21+
22+
await knex.schema.alterTable('analysis', (table) => {
23+
table
24+
.foreign(['sample_id', 'item_number', 'copy_number'])
25+
.references(['sample_id', 'item_number', 'copy_number'])
26+
.inTable('sample_items');
27+
});
28+
};

server/repositories/sampleRepository.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { genDocument } from 'maestro-shared/test/documentFixtures';
66
import { LaboratoryFixture } from 'maestro-shared/test/laboratoryFixtures';
77
import {
88
Sample11Fixture,
9+
Sample13Fixture,
910
Sample2Fixture
1011
} from 'maestro-shared/test/sampleFixtures';
1112
import { Sampler1Fixture } from 'maestro-shared/test/userFixtures';
@@ -211,3 +212,31 @@ describe('findMany samples', async () => {
211212
expect(samples[0].id).toBe(analysisWithResidues.sampleId);
212213
});
213214
});
215+
216+
describe('deleteDraftOnProgrammingPlan', async () => {
217+
test('deletes only draft samples for the given programmingPlanId', async () => {
218+
const before = await sampleRepository.findMany({
219+
programmingPlanIds: toArray(Sample11Fixture.programmingPlanId)
220+
});
221+
expect(before).toHaveLength(4);
222+
223+
await sampleRepository.deleteDraftOnProgrammingPlan(
224+
'00000000-0000-0000-0000-000000000000'
225+
);
226+
227+
let after = await sampleRepository.findMany({
228+
programmingPlanIds: toArray(Sample2Fixture.programmingPlanId)
229+
});
230+
expect(after).toHaveLength(4);
231+
232+
await sampleRepository.deleteDraftOnProgrammingPlan(
233+
Sample11Fixture.programmingPlanId
234+
);
235+
236+
after = await sampleRepository.findMany({
237+
programmingPlanIds: toArray(Sample11Fixture.programmingPlanId)
238+
});
239+
expect(after).toHaveLength(1);
240+
expect(after[0].id).toBe(Sample13Fixture.id);
241+
});
242+
});

server/repositories/sampleRepository.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import {
66
PartialSample,
77
SampleChecked
88
} from 'maestro-shared/schema/Sample/Sample';
9-
import { SampleStatus } from 'maestro-shared/schema/Sample/SampleStatus';
9+
import {
10+
DraftStatusList,
11+
SampleStatus
12+
} from 'maestro-shared/schema/Sample/SampleStatus';
1013
import z from 'zod';
1114
import { analysisResiduesTable, analysisTable } from './analysisRepository';
1215
import { companiesTable } from './companyRepository';
@@ -358,6 +361,17 @@ const deleteOne = async (id: string): Promise<void> => {
358361
await Samples().where({ id }).delete();
359362
};
360363

364+
const deleteDraftOnProgrammingPlan = async (
365+
programmingPlanId: string
366+
): Promise<void> => {
367+
console.info('Delete draft samples on programmingPlan', programmingPlanId);
368+
await kysely
369+
.deleteFrom('samples')
370+
.where('programmingPlanId', '=', programmingPlanId)
371+
.where('status', 'in', DraftStatusList)
372+
.execute();
373+
};
374+
361375
export const formatPartialSample = (
362376
partialSample: PartialSample | SampleChecked
363377
): PartialSampleDbo => ({
@@ -423,5 +437,6 @@ export const sampleRepository = {
423437
findMany,
424438
count,
425439
getNextSequence,
426-
deleteOne
440+
deleteOne,
441+
deleteDraftOnProgrammingPlan
427442
};

0 commit comments

Comments
 (0)