Skip to content

Commit 2d7c94e

Browse files
Merge branch 'development' into feature/request-gliederung-access
2 parents 38b8d1c + 38c4fa4 commit 2d7c94e

18 files changed

Lines changed: 418 additions & 180 deletions

File tree

.github/dependabot.yml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
# To get started with Dependabot version updates, you'll need to specify which
2-
# package ecosystems to update and where the package manifests are located.
3-
# Please see the documentation for all configuration options:
4-
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5-
61
version: 2
72
updates:
8-
- package-ecosystem: 'npm' # See documentation for possible values
9-
directory: '/' # Location of package manifests
3+
- package-ecosystem: npm
4+
directory: /
105
schedule:
11-
interval: 'daily'
6+
interval: "daily"
7+
labels:
8+
- component:deps
9+
- deps:npm

apps/api/prisma/seeders/anmeldungen.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import type { Seeder } from './index.js'
1414

1515
const ENTRY_COUNT = 100
1616

17-
faker.seed(123)
18-
1917
async function create(prisma: PrismaClient, unterveranstaltung: Unterveranstaltung): Promise<void> {
2018
const address = await prisma.address.create({
2119
data: {

apps/api/src/services/program/program.create.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,28 @@ export const programCreateProcedure = defineProtectedMutateProcedure({
99
roleIds: ['ADMIN'],
1010
inputSchema: z.strictObject({
1111
veranstaltungId: z.string().uuid(),
12-
name: z.string(),
13-
description: z.string(),
14-
location: z.string(),
15-
responsible: z.string(),
16-
startingAt: z.date(),
17-
endingAt: z.date(),
12+
data: z.object({
13+
name: z.string(),
14+
description: z.string(),
15+
location: z.string(),
16+
responsible: z.string(),
17+
startingAt: z.date(),
18+
endingAt: z.date(),
19+
}),
1820
}),
19-
handler: async ({ input }) => {
20-
if (dayjs(input.endingAt).isBefore(input.startingAt)) {
21+
handler: async ({ input: { veranstaltungId, data } }) => {
22+
if (dayjs(data.endingAt).isBefore(data.startingAt)) {
2123
throw new TRPCError({
2224
code: 'BAD_REQUEST',
2325
message: 'Das Enddatum kann nicht vor dem Startdatum liegen.',
2426
})
2527
}
2628

2729
await prisma.programmPunkt.create({
28-
data: input,
30+
data: {
31+
...data,
32+
veranstaltungId: veranstaltungId,
33+
},
2934
})
3035
},
3136
})
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { z } from 'zod'
2+
import prisma from '../../prisma.js'
3+
import { defineProtectedMutateProcedure } from '../../types/defineProcedure.js'
4+
5+
export const programDeleteProcedure = defineProtectedMutateProcedure({
6+
key: 'delete',
7+
roleIds: ['ADMIN'],
8+
inputSchema: z.strictObject({
9+
programId: z.string().uuid(),
10+
}),
11+
handler: async ({ input: { programId } }) => {
12+
await prisma.programmPunkt.delete({
13+
where: {
14+
id: programId,
15+
},
16+
})
17+
},
18+
})
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { TRPCError } from '@trpc/server'
2+
import dayjs from 'dayjs'
3+
import { z } from 'zod'
4+
import prisma from '../../prisma.js'
5+
import { defineProtectedMutateProcedure } from '../../types/defineProcedure.js'
6+
7+
export const programEditProcedure = defineProtectedMutateProcedure({
8+
key: 'edit',
9+
roleIds: ['ADMIN'],
10+
inputSchema: z.strictObject({
11+
programId: z.string().uuid(),
12+
data: z.object({
13+
name: z.string(),
14+
description: z.string(),
15+
location: z.string(),
16+
responsible: z.string(),
17+
startingAt: z.date(),
18+
endingAt: z.date(),
19+
}),
20+
}),
21+
handler: async ({ input: { programId, data } }) => {
22+
if (dayjs(data.endingAt).isBefore(data.startingAt)) {
23+
throw new TRPCError({
24+
code: 'BAD_REQUEST',
25+
message: 'Das Enddatum kann nicht vor dem Startdatum liegen.',
26+
})
27+
}
28+
29+
await prisma.programmPunkt.update({
30+
where: {
31+
id: programId,
32+
},
33+
data: data,
34+
})
35+
},
36+
})
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { z } from 'zod'
2+
import prisma from '../../prisma.js'
3+
import { defineProtectedMutateProcedure } from '../../types/defineProcedure.js'
4+
5+
export const programGetProcedure = defineProtectedMutateProcedure({
6+
key: 'get',
7+
roleIds: ['ADMIN'],
8+
inputSchema: z.strictObject({
9+
programId: z.string().uuid(),
10+
}),
11+
handler: async ({ input }) => {
12+
return await prisma.programmPunkt.findUniqueOrThrow({
13+
where: {
14+
id: input.programId,
15+
},
16+
select: {
17+
name: true,
18+
description: true,
19+
location: true,
20+
responsible: true,
21+
startingAt: true,
22+
endingAt: true,
23+
},
24+
})
25+
},
26+
})

apps/api/src/services/program/program.list.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export const programListProcedure = defineProtectedQueryProcedure({
1414
veranstaltungId: input.veranstaltungId,
1515
},
1616
select: {
17+
id: true,
1718
name: true,
1819
description: true,
1920
location: true,

apps/api/src/services/program/program.router.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,23 @@
22
import { mergeRouters } from '../../trpc.js'
33
import { programSearchLocationProcedure, programSearchResponsiblesProcedure } from './program.autocomplete.js'
44
import { programCreateProcedure } from './program.create.js'
5+
import { programDeleteProcedure } from './program.delete.js'
6+
import { programEditProcedure } from './program.edit.js'
7+
import { programGetProcedure } from './program.get.js'
58
import { programListProcedure } from './program.list.js'
69

710
// Import Routes here - do not delete this line
811

912
export const programRouter = mergeRouters(
13+
// Queries
1014
programListProcedure,
11-
programCreateProcedure,
15+
programGetProcedure,
1216
programSearchLocationProcedure,
13-
programSearchResponsiblesProcedure
17+
programSearchResponsiblesProcedure,
18+
19+
// Mutations
20+
programCreateProcedure,
21+
programEditProcedure,
22+
programDeleteProcedure
1423
// Add Routes here - do not delete this line
1524
)

apps/api/src/services/unterveranstaltung/unterveranstaltungList.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,18 @@ export const unterveranstaltungListProcedure = defineProtectedQueryProcedure({
1111
key: 'list',
1212
roleIds: [Role.ADMIN, Role.GLIEDERUNG_ADMIN],
1313
inputSchema: z.strictObject({
14-
veranstaltungId: z.string().uuid().optional(),
14+
mode: z
15+
.discriminatedUnion('mode', [
16+
z.strictObject({
17+
mode: z.literal('veranstaltung'),
18+
veranstaltungId: z.string().uuid(),
19+
}),
20+
z.strictObject({
21+
mode: z.literal('gliederung'),
22+
gliederungId: z.string().uuid(),
23+
}),
24+
])
25+
.optional(),
1526
table: defineTableInput({
1627
filter: {
1728
gliederungName: z.string().optional(),
@@ -24,12 +35,13 @@ export const unterveranstaltungListProcedure = defineProtectedQueryProcedure({
2435
async handler({
2536
ctx: { account },
2637
input: {
27-
veranstaltungId,
38+
mode,
2839
table: { filter, pagination },
2940
},
3041
}) {
3142
const where: Prisma.UnterveranstaltungWhereInput = {
32-
veranstaltungId,
43+
veranstaltungId: mode?.mode === 'veranstaltung' ? mode.veranstaltungId : undefined,
44+
gliederungId: mode?.mode === 'gliederung' ? mode.gliederungId : undefined,
3345
gliederung: {
3446
name: {
3547
contains: filter?.gliederungName,
@@ -49,7 +61,7 @@ export const unterveranstaltungListProcedure = defineProtectedQueryProcedure({
4961
// Role-based Filter
5062
if (account.role !== Role.ADMIN) {
5163
const gliederung = await getGliederungRequireAdmin(account.id)
52-
where.gliederungId = gliederung.id
64+
where.gliederungId = gliederung.id // TODO:
5365
}
5466

5567
const total = await prisma.unterveranstaltung.count({ where })

apps/api/src/services/veranstaltung/veranstaltungPublicGet.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export const veranstaltungPublicGetProcedure = definePublicQueryProcedure({
1919
ort: true,
2020
programmPunkte: {
2121
select: {
22+
id: true,
2223
name: true,
2324
description: true,
2425
location: true,

0 commit comments

Comments
 (0)