Skip to content
This repository was archived by the owner on Feb 22, 2025. It is now read-only.

Commit 86639cb

Browse files
committed
feat(application): ✨ get, delete and add application response templates
1 parent 3fdde1e commit 86639cb

File tree

5 files changed

+174
-30
lines changed

5 files changed

+174
-30
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
-- CreateTable
2+
CREATE TABLE "ApplicationResponseTemplate" (
3+
"id" TEXT NOT NULL,
4+
"buildteamId" TEXT NOT NULL,
5+
"content" TEXT NOT NULL,
6+
7+
CONSTRAINT "ApplicationResponseTemplate_pkey" PRIMARY KEY ("id")
8+
);
9+
10+
-- AddForeignKey
11+
ALTER TABLE "ApplicationResponseTemplate" ADD CONSTRAINT "ApplicationResponseTemplate_buildteamId_fkey" FOREIGN KEY ("buildteamId") REFERENCES "BuildTeam"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- AlterTable
2+
ALTER TABLE "ApplicationResponseTemplate" ADD COLUMN "name" TEXT NOT NULL DEFAULT 'Response Template';

prisma/schema.prisma

+39-30
Original file line numberDiff line numberDiff line change
@@ -23,36 +23,37 @@ model User {
2323
}
2424

2525
model BuildTeam {
26-
id String @id @default(uuid())
27-
name String @unique
28-
icon String
29-
backgroundImage String
30-
invite String
31-
about String
32-
creatorId String
33-
createdAt DateTime @default(now())
34-
location String @default("")
35-
slug String @unique @default("")
36-
ip String @default("buildtheearth.net")
37-
acceptionMessage String @default("")
38-
allowTrial Boolean @default(false)
39-
rejectionMessage String @default("")
40-
trialMessage String @default("")
41-
token String @default("")
42-
allowBuilderClaim Boolean? @default(true)
43-
instantAccept Boolean? @default(false)
44-
webhook String?
45-
allowApplications Boolean? @default(true)
46-
color String @default("#1098AD")
47-
Application Application[]
48-
applicationQuestions ApplicationQuestion[] @relation("applicationQuestions")
49-
creator User @relation("creator", fields: [creatorId], references: [id])
50-
claims Claim[]
51-
showcases Showcase[] @relation("showcases")
52-
socials Social[] @relation("socials")
53-
UserPermission UserPermission[]
54-
members User[] @relation("members")
55-
CalendarEvent CalendarEvent[]
26+
id String @id @default(uuid())
27+
name String @unique
28+
icon String
29+
backgroundImage String
30+
invite String
31+
about String
32+
creatorId String
33+
createdAt DateTime @default(now())
34+
location String @default("")
35+
slug String @unique @default("")
36+
ip String @default("buildtheearth.net")
37+
acceptionMessage String @default("")
38+
allowTrial Boolean @default(false)
39+
rejectionMessage String @default("")
40+
trialMessage String @default("")
41+
token String @default("")
42+
allowBuilderClaim Boolean? @default(true)
43+
instantAccept Boolean? @default(false)
44+
webhook String?
45+
allowApplications Boolean? @default(true)
46+
color String @default("#1098AD")
47+
Application Application[]
48+
applicationQuestions ApplicationQuestion[] @relation("applicationQuestions")
49+
creator User @relation("creator", fields: [creatorId], references: [id])
50+
claims Claim[]
51+
showcases Showcase[] @relation("showcases")
52+
socials Social[] @relation("socials")
53+
UserPermission UserPermission[]
54+
members User[] @relation("members")
55+
CalendarEvent CalendarEvent[]
56+
responseTemplate ApplicationResponseTemplate[]
5657
}
5758

5859
model ApplicationQuestion {
@@ -183,6 +184,14 @@ model ApplicationAnswer {
183184
question ApplicationQuestion @relation(fields: [questionId], references: [id])
184185
}
185186

187+
model ApplicationResponseTemplate {
188+
id String @id @default(uuid())
189+
buildteamId String
190+
name String @default("Response Template")
191+
content String
192+
buildteam BuildTeam @relation(fields: [buildteamId], references: [id])
193+
}
194+
186195
model Upload {
187196
id String @id @default(uuid())
188197
name String

src/controllers/BuildTeamController.ts

+74
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ class BuildTeamController {
255255
ERROR_GENERIC(req, res, 404, "BuildTeam does not exist.");
256256
}
257257
}
258+
258259
public async deleteBuildTeamSocial(req: Request, res: Response) {
259260
const errors = validationResult(req);
260261
if (!errors.isEmpty()) {
@@ -270,6 +271,7 @@ class BuildTeamController {
270271
ERROR_GENERIC(req, res, 404, "BuildTeam does not exist.");
271272
}
272273
}
274+
273275
public async updateBuildTeam(req: Request, res: Response) {
274276
const errors = validationResult(req);
275277
if (!errors.isEmpty()) {
@@ -464,6 +466,78 @@ class BuildTeamController {
464466
res.send(kcMembers);
465467
}
466468

469+
public async getBuildTeamResponseTemplates(req: Request, res: Response) {
470+
const errors = validationResult(req);
471+
if (!errors.isEmpty()) {
472+
return ERROR_VALIDATION(req, res, errors.array());
473+
}
474+
475+
let templateResponses = await this.core
476+
.getPrisma()
477+
.applicationResponseTemplate.findMany({
478+
where: {
479+
buildteam: req.query.slug
480+
? { slug: req.params.id }
481+
: { id: req.params.id },
482+
},
483+
});
484+
485+
if (templateResponses) {
486+
res.send(templateResponses);
487+
} else {
488+
ERROR_GENERIC(req, res, 404, "BuildTeam does not exist.");
489+
}
490+
}
491+
public async addBuildTeamResponseTemplate(req: Request, res: Response) {
492+
const errors = validationResult(req);
493+
if (!errors.isEmpty()) {
494+
return ERROR_VALIDATION(req, res, errors.array());
495+
}
496+
497+
let templateResponses = await this.core
498+
.getPrisma()
499+
.applicationResponseTemplate.create({
500+
data: {
501+
buildteam: {
502+
connect: req.query.slug
503+
? { slug: req.params.id }
504+
: { id: req.params.id },
505+
},
506+
content: req.body.content,
507+
name: req.body.name,
508+
},
509+
});
510+
511+
if (templateResponses) {
512+
res.send(templateResponses);
513+
} else {
514+
ERROR_GENERIC(req, res, 404, "BuildTeam does not exist.");
515+
}
516+
}
517+
public async deleteBuildTeamResponseTemplate(req: Request, res: Response) {
518+
const errors = validationResult(req);
519+
if (!errors.isEmpty()) {
520+
return ERROR_VALIDATION(req, res, errors.array());
521+
}
522+
523+
let templateResponses = await this.core
524+
.getPrisma()
525+
.applicationResponseTemplate.delete({
526+
where: {
527+
buildteam: req.query.slug
528+
? { slug: req.params.id }
529+
: { id: req.params.id },
530+
id: req.params.template,
531+
},
532+
});
533+
534+
if (templateResponses) {
535+
res.send(templateResponses);
536+
} else {
537+
ERROR_GENERIC(req, res, 404, "BuildTeam or Template does not exist.");
538+
}
539+
}
540+
467541
public async generateBuildTeamToken(req: Request, res: Response) {
468542
const errors = validationResult(req);
469543
if (!errors.isEmpty()) {

src/web/routes/index.ts

+48
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,53 @@ class Routes {
114114
},
115115
param("id")
116116
);
117+
router.addRoute(
118+
RequestMethods.GET,
119+
"/buildteams/:id/application/templates",
120+
async (request: Request, response: Response) => {
121+
await controllers.buildTeam.getBuildTeamResponseTemplates(
122+
request,
123+
response
124+
);
125+
},
126+
param("id")
127+
);
128+
router.addRoute(
129+
RequestMethods.POST,
130+
"/buildteams/:id/application/templates",
131+
async (request: Request, response: Response) => {
132+
await controllers.buildTeam.addBuildTeamResponseTemplate(
133+
request,
134+
response
135+
);
136+
},
137+
param("id"),
138+
body("content").isString(),
139+
checkUserPermissions(
140+
this.web.getCore().getPrisma(),
141+
["team.application.edit", "team.application.review"],
142+
"id"
143+
)
144+
);
145+
router.addRoute(
146+
RequestMethods.DELETE,
147+
"/buildteams/:id/application/templates/:template",
148+
async (request: Request, response: Response) => {
149+
await controllers.buildTeam.addBuildTeamResponseTemplate(
150+
request,
151+
response
152+
);
153+
},
154+
param("id"),
155+
param("template").isUUID(),
156+
body("content").isString(),
157+
body("name").isString(),
158+
checkUserPermissions(
159+
this.web.getCore().getPrisma(),
160+
["team.application.edit", "team.application.review"],
161+
"id"
162+
)
163+
);
117164
router.addRoute(
118165
RequestMethods.POST,
119166
"/buildteams/:id/application/questions",
@@ -450,6 +497,7 @@ class Routes {
450497
param("id"),
451498
param("user").isUUID()
452499
);
500+
453501
router.addRoute(
454502
RequestMethods.GET,
455503
"/buildteams/:id/applications/:app",

0 commit comments

Comments
 (0)