Skip to content

Commit acf02db

Browse files
committed
feat(programmation): lors de la cloture, supprime les brouillons restants
1 parent b8e49d7 commit acf02db

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
@@ -5,6 +5,7 @@ import { genPartialAnalysis } from 'maestro-shared/test/analysisFixtures';
55
import { genDocument } from 'maestro-shared/test/documentFixtures';
66
import {
77
Sample11Fixture,
8+
Sample13Fixture,
89
Sample2Fixture
910
} from 'maestro-shared/test/sampleFixtures';
1011
import { Sampler1Fixture } from 'maestro-shared/test/userFixtures';
@@ -195,3 +196,31 @@ describe('findMany samples', async () => {
195196
expect(samples[0].id).toBe(analysisWithResidues.sampleId);
196197
});
197198
});
199+
200+
describe('deleteDraftOnProgrammingPlan', async () => {
201+
test('deletes only draft samples for the given programmingPlanId', async () => {
202+
const before = await sampleRepository.findMany({
203+
programmingPlanIds: toArray(Sample11Fixture.programmingPlanId)
204+
});
205+
expect(before).toHaveLength(4);
206+
207+
await sampleRepository.deleteDraftOnProgrammingPlan(
208+
'00000000-0000-0000-0000-000000000000'
209+
);
210+
211+
let after = await sampleRepository.findMany({
212+
programmingPlanIds: toArray(Sample2Fixture.programmingPlanId)
213+
});
214+
expect(after).toHaveLength(4);
215+
216+
await sampleRepository.deleteDraftOnProgrammingPlan(
217+
Sample11Fixture.programmingPlanId
218+
);
219+
220+
after = await sampleRepository.findMany({
221+
programmingPlanIds: toArray(Sample11Fixture.programmingPlanId)
222+
});
223+
expect(after).toHaveLength(1);
224+
expect(after[0].id).toBe(Sample13Fixture.id);
225+
});
226+
});

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';
@@ -343,6 +346,17 @@ const deleteOne = async (id: string): Promise<void> => {
343346
await Samples().where({ id }).delete();
344347
};
345348

349+
const deleteDraftOnProgrammingPlan = async (
350+
programmingPlanId: string
351+
): Promise<void> => {
352+
console.info('Delete draft samples on programmingPlan', programmingPlanId);
353+
await kysely
354+
.deleteFrom('samples')
355+
.where('programmingPlanId', '=', programmingPlanId)
356+
.where('status', 'in', DraftStatusList)
357+
.execute();
358+
};
359+
346360
export const formatPartialSample = (
347361
partialSample: PartialSample | SampleChecked
348362
): PartialSampleDbo => ({
@@ -408,5 +422,6 @@ export const sampleRepository = {
408422
findMany,
409423
count,
410424
getNextSequence,
411-
deleteOne
425+
deleteOne,
426+
deleteDraftOnProgrammingPlan
412427
};

0 commit comments

Comments
 (0)