From f9b38d3f0d209540e8656e2f985b512cddbcafdd Mon Sep 17 00:00:00 2001 From: Axel Rindle Date: Tue, 11 Mar 2025 10:03:45 +0100 Subject: [PATCH 1/2] fix: allow blob images --- apps/api/src/server.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/api/src/server.ts b/apps/api/src/server.ts index 99014228..b0306897 100644 --- a/apps/api/src/server.ts +++ b/apps/api/src/server.ts @@ -23,7 +23,13 @@ app.use( helmet({ contentSecurityPolicy: { directives: { - 'img-src': ["'self'", '*.githubusercontent.com', 'data:', 'dlrgbrahmseedigitalprod.blob.core.windows.net'], + 'img-src': [ + "'self'", + '*.githubusercontent.com', + 'blob:', + 'data:', + 'dlrgbrahmseedigitalprod.blob.core.windows.net', + ], 'connect-src': ["'self'", 'dlrgbrahmseedigitalprod.blob.core.windows.net'], }, }, From 3a04a9cbb96e829a9f9fdfba2aaa71dc583175fc Mon Sep 17 00:00:00 2001 From: Axel Rindle Date: Tue, 11 Mar 2025 15:46:40 +0100 Subject: [PATCH 2/2] fix: custom field delete --- .../customFields/customFields.router.ts | 5 +- .../customFields/customFieldsDelete.ts | 39 +++--- .../CustomFields/CustomFieldDeleteModal.vue | 115 ++++++++++++++++++ .../CustomFields/CustomFieldsFormEdit.vue | 41 +++---- 4 files changed, 158 insertions(+), 42 deletions(-) create mode 100644 apps/frontend/src/components/CustomFields/CustomFieldDeleteModal.vue diff --git a/apps/api/src/services/customFields/customFields.router.ts b/apps/api/src/services/customFields/customFields.router.ts index b3d6b8d6..926ee5d4 100644 --- a/apps/api/src/services/customFields/customFields.router.ts +++ b/apps/api/src/services/customFields/customFields.router.ts @@ -6,7 +6,7 @@ import { customFieldsList } from './customFieldsList.js' import { customFieldsTemplates } from './customFieldsTemplates.js' import { customFieldsUnterveranstaltungCreate } from './customFieldsUnterveranstaltungCreate.js' import { customFieldsVeranstaltungCreate } from './customFieldsVeranstaltungCreate.js' -import { customFieldsDelete } from './customFieldsDelete.js' +import { customFieldsVeranstaltungDelete, customFieldsUnterveranstaltungDelete } from './customFieldsDelete.js' import { customFieldsUpdate } from './customFieldsUpdate.js' import { customFieldValuesUpdate } from './customFieldValuesUpdate.js' // Import Routes here - do not delete this line @@ -16,7 +16,8 @@ export const customFieldsRouter = mergeRouters( customFieldsGet.router, customFieldsVeranstaltungCreate.router, customFieldsUpdate.router, - customFieldsDelete.router, + customFieldsVeranstaltungDelete.router, + customFieldsUnterveranstaltungDelete.router, customFieldsUnterveranstaltungCreate.router, customFieldValuesUpdate.router, customFieldsTemplates.router diff --git a/apps/api/src/services/customFields/customFieldsDelete.ts b/apps/api/src/services/customFields/customFieldsDelete.ts index 8f7adccc..46ea0f48 100644 --- a/apps/api/src/services/customFields/customFieldsDelete.ts +++ b/apps/api/src/services/customFields/customFieldsDelete.ts @@ -1,17 +1,34 @@ import { Role } from '@prisma/client' -import { TRPCError } from '@trpc/server' import { z } from 'zod' import prisma from '../../prisma.js' import { defineProtectedMutateProcedure } from '../../types/defineProcedure.js' +import { TRPCError } from '@trpc/server' -export const customFieldsDelete = defineProtectedMutateProcedure({ - key: 'delete', - roleIds: [Role.ADMIN, Role.GLIEDERUNG_ADMIN], +export const customFieldsVeranstaltungDelete = defineProtectedMutateProcedure({ + key: 'veranstaltungDelete', + roleIds: [Role.ADMIN], inputSchema: z.strictObject({ veranstaltungId: z.number(), fieldId: z.number(), }), + async handler({ input }) { + await prisma.customField.delete({ + where: { + id: input.fieldId, + veranstaltungId: input.veranstaltungId, + }, + }) + }, +}) + +export const customFieldsUnterveranstaltungDelete = defineProtectedMutateProcedure({ + key: 'unterveranstaltungDelete', + roleIds: [Role.ADMIN, Role.GLIEDERUNG_ADMIN], + inputSchema: z.strictObject({ + unterveranstaltungId: z.number(), + fieldId: z.number(), + }), async handler({ ctx, input }) { if (ctx.account.role === Role.GLIEDERUNG_ADMIN) { const { gliederungId: gliederungIdActor } = await prisma.person.findFirstOrThrow({ @@ -43,23 +60,9 @@ export const customFieldsDelete = defineProtectedMutateProcedure({ } } - const field = await prisma.customField.findUnique({ - where: { - id: input.fieldId, - veranstaltungId: input.veranstaltungId, - }, - }) - - if (field === null) { - throw new TRPCError({ - code: 'NOT_FOUND', - }) - } - await prisma.customField.delete({ where: { id: input.fieldId, - veranstaltungId: input.veranstaltungId, }, }) }, diff --git a/apps/frontend/src/components/CustomFields/CustomFieldDeleteModal.vue b/apps/frontend/src/components/CustomFields/CustomFieldDeleteModal.vue new file mode 100644 index 00000000..f5636596 --- /dev/null +++ b/apps/frontend/src/components/CustomFields/CustomFieldDeleteModal.vue @@ -0,0 +1,115 @@ + + + diff --git a/apps/frontend/src/components/CustomFields/CustomFieldsFormEdit.vue b/apps/frontend/src/components/CustomFields/CustomFieldsFormEdit.vue index f57a3658..66199826 100644 --- a/apps/frontend/src/components/CustomFields/CustomFieldsFormEdit.vue +++ b/apps/frontend/src/components/CustomFields/CustomFieldsFormEdit.vue @@ -1,6 +1,6 @@