Skip to content

Commit

Permalink
Ajoute une fonction de suppression d'une valeur d'indicateur
Browse files Browse the repository at this point in the history
  • Loading branch information
marc-rutkowski committed Jan 20, 2025
1 parent b8caaa9 commit 9f4afc3
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { z } from 'zod';

/** Suppression d'une valeur d'indicateur pour une collectivité */
export const deleteValeurIndicateurSchema = z.object({
collectiviteId: z.number(),
indicateurId: z.number(),
id: z.number(),
});

export type DeleteValeurIndicateur = z.infer<
typeof deleteValeurIndicateurSchema
>;
37 changes: 37 additions & 0 deletions backend/src/indicateurs/valeurs/crud-valeurs.router.e2e-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,4 +176,41 @@ describe("Route de lecture/écriture des valeurs d'indicateurs", () => {
};
await expect(caller.indicateurs.valeurs.upsert(input)).rejects.toThrow();
});

test('Permet de supprimer une valeur', async () => {
const caller = router.createCaller({ user: yoloDodoUser });

// insère une valeur
const inputInsert: InputUpsert = {
collectiviteId,
indicateurId,
dateValeur: '2021-01-01',
resultat: 42,
resultatCommentaire: 'commentaire',
};
await caller.indicateurs.valeurs.upsert(inputInsert);

// vérifie le nombre de valeurs avant la suppression
const inputBefore: InputList = {
collectiviteId,
indicateurIds: [indicateurId],
};
const resultBefore = await caller.indicateurs.valeurs.list(inputBefore);
expect(
resultBefore.indicateurs[0].sources.collectivite.valeurs.length
).toBe(1);

// supprime l'entrée
const valeurId =
resultBefore.indicateurs[0].sources.collectivite.valeurs[0].id;
await caller.indicateurs.valeurs.delete({
collectiviteId,
indicateurId,
id: valeurId,
});

// vérifie le nombre de valeurs après la suppression
const resultAfter = await caller.indicateurs.valeurs.list(inputBefore);
expect(resultAfter.indicateurs.length).toBe(0);
});
});
7 changes: 6 additions & 1 deletion backend/src/indicateurs/valeurs/crud-valeurs.router.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { TrpcService } from '@/backend/utils/trpc/trpc.service';
import { Injectable } from '@nestjs/common';
import { upsertValeurIndicateurSchema } from '../index-domain';
import { deleteValeurIndicateurSchema } from '../shared/models/delete-valeur-indicateur.request';
import { getIndicateursValeursRequestSchema } from '../shared/models/get-indicateurs.request';
import { upsertValeurIndicateurSchema } from '../shared/models/upsert-valeur-indicateur.request';
import IndicateurValeursService from './crud-valeurs.service';
Expand All @@ -23,5 +23,10 @@ export class IndicateurValeursRouter {
.mutation(({ input, ctx }) => {
return this.service.upsertValeur(input, ctx.user);
}),
delete: this.trpc.authedProcedure
.input(deleteValeurIndicateurSchema)
.mutation(({ input, ctx }) => {
return this.service.deleteValeurIndicateur(input, ctx.user);
}),
});
}
26 changes: 26 additions & 0 deletions backend/src/indicateurs/valeurs/crud-valeurs.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import * as _ from 'lodash';
import { AuthenticatedUser, AuthRole } from '../../auth/models/auth.models';
import { DatabaseService } from '../../utils/database/database.service';
import { DeleteIndicateursValeursRequestType } from '../shared/models/delete-indicateurs.request';
import { DeleteValeurIndicateur } from '../shared/models/delete-valeur-indicateur.request';
import { GetIndicateursValeursRequestType } from '../shared/models/get-indicateurs.request';
import { GetIndicateursValeursResponseType } from '../shared/models/get-indicateurs.response';
import {
Expand Down Expand Up @@ -368,6 +369,31 @@ export default class CrudValeursService {
}
}

async deleteValeurIndicateur(
data: DeleteValeurIndicateur,
tokenInfo: AuthenticatedUser
) {
const { collectiviteId, indicateurId, id } = data;
await this.permissionService.isAllowed(
tokenInfo,
PermissionOperation.INDICATEURS_EDITION,
ResourceType.COLLECTIVITE,
collectiviteId
);

if (tokenInfo.role === AuthRole.AUTHENTICATED && tokenInfo.id) {
await this.databaseService.db
.delete(indicateurValeurTable)
.where(
and(
eq(indicateurValeurTable.collectiviteId, collectiviteId),
eq(indicateurValeurTable.indicateurId, indicateurId),
eq(indicateurValeurTable.id, id)
)
);
}
}

async upsertIndicateurValeurs(
indicateurValeurs: IndicateurValeurInsert[],
tokenInfo: AuthenticatedUser | undefined
Expand Down

0 comments on commit 9f4afc3

Please sign in to comment.