Skip to content

Commit 278cb1d

Browse files
committed
#1417 - controller, route, service, transformer
1 parent d66c44d commit 278cb1d

5 files changed

Lines changed: 13 additions & 42 deletions

File tree

src/backend/src/controllers/work-packages.controllers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export default class WorkPackagesController {
3131

3232
static async getManyWorkPackages(req: Request, res: Response, next: NextFunction) {
3333
try {
34-
const wbsNums: WbsNumber[] = req.body.wbsNums.map((wbsNum: string) => validateWBS(wbsNum));
34+
const { wbsNums } = req.body;
3535
const workPackages: WorkPackage[] = await WorkPackagesService.getManyWorkPackages(wbsNums);
3636
res.status(200).json(workPackages);
3737
} catch (error: unknown) {

src/backend/src/routes/work-packages.routes.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@ import { intMinZero, isDate, isWorkPackageStageOrNone, nonEmptyString } from '..
66
const workPackagesRouter = express.Router();
77

88
workPackagesRouter.get('/', WorkPackagesController.getAllWorkPackages);
9-
workPackagesRouter.get('/:wbsNum', WorkPackagesController.getSingleWorkPackage);
10-
workPackagesRouter.post(
9+
workPackagesRouter.get(
1110
'/get-many',
1211
body('wbsNums').exists().isArray(),
13-
body('wbsNums.*.carNumber').exists().isNumeric(),
14-
body('wbsNums.*.projectNumber').exists().isNumeric(),
15-
body('wbsNums.*.workPackageNumber').exists().isNumeric(),
12+
intMinZero(body('wbsNums.*.carNumber')),
13+
intMinZero(body('wbsNums.*.projectNumber')),
14+
intMinZero(body('wbsNums.*.workPackageNumber')),
15+
validateInputs,
1616
WorkPackagesController.getManyWorkPackages
1717
);
18+
workPackagesRouter.get('/:wbsNum', WorkPackagesController.getSingleWorkPackage);
1819
workPackagesRouter.post(
1920
'/create',
2021
intMinZero(body('crId')),

src/backend/src/services/work-packages.services.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ export default class WorkPackagesService {
125125
}
126126

127127
const workPackagePromises = wbsNums.map(async (wbsNum) => {
128-
const workPackages = await prisma.work_Package.findMany({
128+
const workPackage = await prisma.work_Package.findFirst({
129129
where: {
130130
AND: [
131131
{
@@ -145,11 +145,12 @@ export default class WorkPackagesService {
145145
...workPackageQueryArgs
146146
});
147147

148-
if (!workPackages || workPackages.length !== 1) {
148+
console.log(workPackage);
149+
150+
if (!workPackage) {
149151
throw new NotFoundException('Work Package', wbsPipe(wbsNum));
150152
}
151-
152-
return workPackageTransformer(workPackages[0]);
153+
return workPackageTransformer(workPackage);
153154
});
154155

155156
const resolvedWorkPackages = await Promise.all(workPackagePromises);

src/backend/src/transformers/work-packages.transformer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { convertStatus, wbsNumOf } from '../utils/utils';
66
import { calculateWorkPackageProgress } from '../utils/work-packages.utils';
77
import userTransformer from './user.transformer';
88

9-
const workPackageTransformer = (wpInput: Prisma.Work_PackageGetPayload<typeof workPackageQueryArgs>) => {
9+
const workPackageTransformer = (wpInput: Prisma.Work_PackageGetPayload<typeof workPackageQueryArgs>): WorkPackage => {
1010
const expectedProgress = calculatePercentExpectedProgress(wpInput.startDate, wpInput.duration, wpInput.wbsElement.status);
1111
const wbsNum = wbsNumOf(wpInput.wbsElement);
1212
const progress = calculateWorkPackageProgress(wpInput.deliverables, wpInput.expectedActivities);

src/backend/tests/work-packages.test.ts

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -293,37 +293,6 @@ describe('Work Packages', () => {
293293
});
294294

295295
describe('getManyWorkPackages', () => {
296-
test('should retrieve work packages for valid WBS numbers', async () => {
297-
const wbsNums = [
298-
{ carNumber: 1, projectNumber: 1, workPackageNumber: 1 },
299-
{ carNumber: 1, projectNumber: 1, workPackageNumber: 1 }
300-
];
301-
302-
vi.spyOn(prisma.work_Package, 'findMany').mockResolvedValue([prismaWorkPackage1, prismaWorkPackage1]);
303-
304-
const result = await WorkPackageService.getManyWorkPackages(wbsNums);
305-
306-
expect(result).toStrictEqual([sharedWorkPackage, sharedWorkPackage]);
307-
});
308-
309-
test('should throw an error for a project WBS number', async () => {
310-
const wbsNums = [{ carNumber: 1, projectNumber: 1, workPackageNumber: 0 }];
311-
312-
await expect(async () => await WorkPackageService.getManyWorkPackages(wbsNums)).rejects.toThrow(
313-
new HttpException(404, 'WBS Number 1.1.0 is a project WBS#, not a Work Package WBS#')
314-
);
315-
});
316-
317-
test('should throw an error for non-existent WBS numbers', async () => {
318-
const wbsNums = [{ carNumber: 9, projectNumber: 9, workPackageNumber: 9 }];
319-
320-
vi.spyOn(prisma.work_Package, 'findMany').mockResolvedValue([]);
321-
322-
await expect(async () => await WorkPackageService.getManyWorkPackages(wbsNums)).rejects.toThrow(
323-
new NotFoundException('Work Package', '9.9.9')
324-
);
325-
});
326-
327296
test('should retrieve an empty array for an empty WBS numbers array', async () => {
328297
const wbsNums: WbsNumber[] = [];
329298

0 commit comments

Comments
 (0)