Skip to content

Commit c5f3867

Browse files
committed
Merge remote-tracking branch 'origin' into #4025-guest-change-request-page
2 parents 34bb3c0 + 3474750 commit c5f3867

11 files changed

Lines changed: 131 additions & 17 deletions

File tree

src/backend/src/controllers/recruitment.controllers.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,13 @@ export default class RecruitmentController {
115115
next(error);
116116
}
117117
}
118+
119+
static async getAllGuestDefintions(req: Request, res: Response, next: NextFunction) {
120+
try {
121+
const allDefinitons = await RecruitmentServices.getAllGuestDefinitions(req.organization);
122+
res.status(200).json(allDefinitons);
123+
} catch (error: unknown) {
124+
next(error);
125+
}
126+
}
118127
}

src/backend/src/prisma/seed.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import OnboardingServices from '../services/onboarding.services.js';
4141
import { dbSeedAllParts, dbSeedAllPartTags } from './seed-data/parts.seed.js';
4242
import FinanceServices from '../services/finance.services.js';
4343
import CalendarService from '../services/calendar.services.js';
44+
import { allChangeRequestsReviewed } from '../utils/change-requests.utils.js';
4445

4546
const prisma = new PrismaClient();
4647

@@ -3890,6 +3891,50 @@ const performSeed: () => Promise<void> = async () => {
38903891
undefined,
38913892
undefined
38923893
);
3894+
3895+
await RecruitmentServices.createGuestDefinition(
3896+
thomasEmrax,
3897+
ner,
3898+
'Projects',
3899+
'This is the definition of a project. Projects are blah blah blah',
3900+
0,
3901+
'bar_chart',
3902+
'Click here to view all our projects!',
3903+
'/projects'
3904+
);
3905+
3906+
await RecruitmentServices.createGuestDefinition(
3907+
thomasEmrax,
3908+
ner,
3909+
'Change Requests',
3910+
'This is the definiton for a change request. Changes requests are blah blah blah',
3911+
0,
3912+
'bar_chart',
3913+
'Click here to view all our change requests!',
3914+
'/change-requests'
3915+
);
3916+
3917+
await RecruitmentServices.createGuestDefinition(
3918+
thomasEmrax,
3919+
ner,
3920+
'Gantt Chart',
3921+
'This is the definiton for a change request. Changes requests are blah blah blah',
3922+
0,
3923+
'bar_chart',
3924+
'Click here to view all our projects!',
3925+
'/gantt'
3926+
);
3927+
3928+
await RecruitmentServices.createGuestDefinition(
3929+
thomasEmrax,
3930+
ner,
3931+
'Design Reviews',
3932+
'This is the definiton for a design review. Design reviews are blah blah blah',
3933+
0,
3934+
'bar_chart',
3935+
'Click here to view all our design reviews!',
3936+
'/design-reviews'
3937+
);
38933938
};
38943939

38953940
performSeed()

src/backend/src/routes/recruitment.routes.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,6 @@ recruitmentRouter.post(
6262
RecruitmentController.createGuestDefinition
6363
);
6464

65+
recruitmentRouter.get('/guestDefinitions', RecruitmentController.getAllGuestDefintions);
66+
6567
export default recruitmentRouter;

src/backend/src/services/part-review.services.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import {
3131
getPartReviewRequestQueryArgs,
3232
getPartSubmissionQueryArgs
3333
} from '../prisma-query-args/part-review.query-args.js';
34-
import { faqTransformer } from '../transformers/faq.transformer.js';
34+
import { faqTransformer } from '../transformers/recruitment-transformer.js';
3535
import {
3636
partReviewRequestTransformer,
3737
partsReviewCommonMistakeTransformer,

src/backend/src/services/recruitment.services.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { isAdmin, User } from 'shared';
33
import prisma from '../prisma/prisma.js';
44
import { AccessDeniedAdminOnlyException, DeletedException, NotFoundException } from '../utils/errors.utils.js';
55
import { userHasPermission } from '../utils/users.utils.js';
6-
import { faqTransformer } from '../transformers/faq.transformer.js';
6+
import { faqTransformer, guestDefinitionTransformer } from '../transformers/recruitment-transformer.js';
77
import { getFaqQueryArgs } from '../prisma-query-args/faq.query-args.js';
88

99
export default class RecruitmentServices {
@@ -251,6 +251,14 @@ export default class RecruitmentServices {
251251
}
252252
});
253253

254-
return definition;
254+
return guestDefinitionTransformer(definition);
255+
}
256+
257+
static async getAllGuestDefinitions(organization: Organization) {
258+
const allGuestDefintions = await prisma.guest_Definition.findMany({
259+
where: { organizationId: organization.organizationId, dateDeleted: null }
260+
});
261+
262+
return allGuestDefintions.map(guestDefinitionTransformer);
255263
}
256264
}

src/backend/src/transformers/faq.transformer.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { Prisma } from '@prisma/client';
2+
import { FrequentlyAskedQuestion, GuestDefinition } from 'shared';
3+
import { FaqQueryArgs } from '../prisma-query-args/faq.query-args.js';
4+
import { userTransformer } from './user.transformer.js';
5+
6+
export const faqTransformer = (faq: Prisma.FrequentlyAskedQuestionGetPayload<FaqQueryArgs>): FrequentlyAskedQuestion => ({
7+
faqId: faq.faqId,
8+
question: faq.question,
9+
answer: faq.answer,
10+
userCreated: userTransformer(faq.userCreated),
11+
dateCreated: faq.dateCreated,
12+
dateDeleted: faq.dateDeleted ?? undefined
13+
});
14+
15+
export const guestDefinitionTransformer = (guestDefinition: Prisma.Guest_DefinitionGetPayload<{}>): GuestDefinition => ({
16+
definitionId: guestDefinition.definitionId,
17+
term: guestDefinition.term,
18+
description: guestDefinition.description,
19+
order: guestDefinition.order,
20+
buttonText: guestDefinition.buttonText ?? undefined,
21+
buttonLink: guestDefinition.buttonLink ?? undefined,
22+
icon: guestDefinition.icon ?? undefined
23+
});

src/backend/tests/unit/recruitment.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,4 +377,33 @@ describe('Recruitment Tests', () => {
377377
).rejects.toThrow(new AccessDeniedAdminOnlyException('create a guest definition'));
378378
});
379379
});
380+
381+
describe('Get All Guest Definitions', () => {
382+
it('Succeeds and gets all the guest definitions', async () => {
383+
const def = await RecruitmentServices.createGuestDefinition(
384+
superman,
385+
organization,
386+
'test term',
387+
'test description',
388+
2,
389+
'iconname',
390+
'buttonTxt',
391+
'buttonLink'
392+
);
393+
394+
const def2 = await RecruitmentServices.createGuestDefinition(
395+
superman,
396+
organization,
397+
'test term',
398+
'test description',
399+
2,
400+
'iconname',
401+
'buttonTxt',
402+
'buttonLink'
403+
);
404+
405+
const result = await RecruitmentServices.getAllGuestDefinitions(organization);
406+
expect(result).toStrictEqual([def, def2]);
407+
});
408+
});
380409
});

src/frontend/src/pages/CreditsPage/CreditsPage.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ const CreditsPage: React.FC = () => {
256256
{ name: 'Amber Friar', color: '#F5A9B8' },
257257
{ name: 'Kaung Mo', color: '#9a1115' },
258258
{ name: 'Mae Balesterri', color: '#7fb2bc' },
259+
{ name: 'Nigel Purvis', color: '#E2725B' },
259260
{
260261
name: 'Joshua Goldberg',
261262
color: 'transparent',

src/shared/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export * from './src/types/team-types.js';
1111
export * from './src/types/task-types.js';
1212
export * from './src/types/finance-types.js';
1313
export * from './src/types/reimbursement-requests-types.js';
14-
export * from './src/types/frequently-asked-questions-types.js';
14+
export * from './src/types/recruitment-types.js';
1515
export * from './src/types/milestone-types.js';
1616
export * from './src/types/checklist-types.js';
1717
export * from './src/types/pop-up-types.js';

0 commit comments

Comments
 (0)