Skip to content

Commit 18e1bbb

Browse files
committed
Merge branch 'develop' into #1520-get-all-material-types-endpoint
2 parents 4dd057c + 1df2238 commit 18e1bbb

23 files changed

Lines changed: 1013 additions & 67 deletions

.github/workflows/run-tests.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ jobs:
2020
steps:
2121
- name: Checkout repository
2222
uses: actions/checkout@v3
23+
- name: Set env variables
24+
run: touch .env && echo "FINANCE_TEAM_ID=0" >> .env
2325
- name: Set up Node.js
2426
uses: actions/setup-node@v3
2527
with:

src/backend/src/controllers/projects.controllers.ts

Lines changed: 89 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,14 @@ export default class ProjectsController {
167167
manufacturerName,
168168
manufacturerPartNumber,
169169
quantity,
170-
unitName,
171170
price,
172171
subtotal,
173172
linkUrl,
174173
notes,
175174
wbsNum,
176175
assemblyId,
177-
pdmFileName
176+
pdmFileName,
177+
unitName
178178
);
179179
return res.status(200).json(material);
180180
} catch (error: unknown) {
@@ -193,6 +193,17 @@ export default class ProjectsController {
193193
}
194194
}
195195

196+
static async deleteManufacturer(req: Request, res: Response, next: NextFunction) {
197+
try {
198+
const user: User = await getCurrentUser(res);
199+
const { manufacturerName } = req.params;
200+
const deletedManufacturer: Manufacturer = await ProjectsService.deleteManufacturer(user, manufacturerName);
201+
res.status(200).json(deletedManufacturer);
202+
} catch (error: unknown) {
203+
next(error);
204+
}
205+
}
206+
196207
static async getAllManufacturers(req: Request, res: Response, next: NextFunction) {
197208
try {
198209
const user = await getCurrentUser(res);
@@ -223,4 +234,80 @@ export default class ProjectsController {
223234
next(error);
224235
}
225236
}
237+
238+
static async assignMaterialAssembly(req: Request, res: Response, next: NextFunction) {
239+
try {
240+
const { materialId } = req.params;
241+
const { assemblyId } = req.body;
242+
const user = await getCurrentUser(res);
243+
const updatedMaterial = await ProjectsService.assignMaterialAssembly(user, materialId, assemblyId);
244+
res.status(200).json(updatedMaterial);
245+
} catch (error: unknown) {
246+
next(error);
247+
}
248+
}
249+
250+
static async deleteAssemblyType(req: Request, res: Response, next: NextFunction) {
251+
try {
252+
const { assemblyId } = req.params;
253+
const user = await getCurrentUser(res);
254+
const deletedAssembly = await ProjectsService.deleteAssembly(assemblyId, user);
255+
res.status(200).json(deletedAssembly);
256+
} catch (error: unknown) {
257+
next(error);
258+
}
259+
}
260+
261+
static async deleteMaterialType(req: Request, res: Response, next: NextFunction) {
262+
try {
263+
const { materialTypeId } = req.params;
264+
const user = await getCurrentUser(res);
265+
const deletedMaterial = await ProjectsService.deleteMaterialType(materialTypeId, user);
266+
res.status(200).json(deletedMaterial);
267+
} catch (error: unknown) {
268+
next(error);
269+
}
270+
}
271+
272+
static async editMaterial(req: Request, res: Response, next: NextFunction) {
273+
try {
274+
const user = await getCurrentUser(res);
275+
const { materialId } = req.params;
276+
const {
277+
name,
278+
assemblyId,
279+
status,
280+
materialTypeName,
281+
manufacturerName,
282+
manufacturerPartNumber,
283+
pdmFileName,
284+
quantity,
285+
unitName,
286+
price,
287+
subtotal,
288+
linkUrl,
289+
notes
290+
} = req.body;
291+
const updatedMaterial = await ProjectsService.editMaterial(
292+
user,
293+
materialId,
294+
name,
295+
status,
296+
materialTypeName,
297+
manufacturerName,
298+
manufacturerPartNumber,
299+
quantity,
300+
price,
301+
subtotal,
302+
linkUrl,
303+
notes,
304+
unitName,
305+
assemblyId,
306+
pdmFileName
307+
);
308+
res.status(200).json(updatedMaterial);
309+
} catch (error: unknown) {
310+
next(error);
311+
}
312+
}
226313
}

src/backend/src/prisma/migrations/20231024124220_add_bom/migration.sql renamed to src/backend/src/prisma/migrations/20231119081759_add_bom/migration.sql

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ CREATE TABLE "Material" (
5151
CREATE TABLE "Material_Type" (
5252
"name" TEXT NOT NULL,
5353
"dateCreated" TIMESTAMP(3) NOT NULL,
54+
"dateDeleted" TIMESTAMP(3),
5455
"creatorId" INTEGER NOT NULL,
5556

5657
CONSTRAINT "Material_Type_pkey" PRIMARY KEY ("name")
@@ -61,16 +62,14 @@ CREATE TABLE "Manufacturer" (
6162
"name" TEXT NOT NULL,
6263
"dateCreated" TIMESTAMP(3) NOT NULL,
6364
"creatorId" INTEGER NOT NULL,
65+
"dateDeleted" TIMESTAMP(3),
6466

6567
CONSTRAINT "Manufacturer_pkey" PRIMARY KEY ("name")
6668
);
6769

6870
-- CreateIndex
6971
CREATE UNIQUE INDEX "Assembly_name_key" ON "Assembly"("name");
7072

71-
-- CreateIndex
72-
CREATE UNIQUE INDEX "Material_name_key" ON "Material"("name");
73-
7473
-- AddForeignKey
7574
ALTER TABLE "Assembly" ADD CONSTRAINT "Assembly_userDeletedId_fkey" FOREIGN KEY ("userDeletedId") REFERENCES "User"("userId") ON DELETE SET NULL ON UPDATE CASCADE;
7675

src/backend/src/prisma/schema.prisma

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ model Material {
491491
materialId String @id @default(uuid())
492492
assembly Assembly? @relation(fields: [assemblyId], references: [assemblyId])
493493
assemblyId String?
494-
name String @unique
494+
name String
495495
wbsElement WBS_Element @relation(fields: [wbsElementId], references: [wbsElementId])
496496
wbsElementId Int
497497
dateDeleted DateTime?
@@ -519,6 +519,7 @@ model Material {
519519
model Material_Type {
520520
name String @id
521521
dateCreated DateTime
522+
dateDeleted DateTime?
522523
creatorId Int
523524
materials Material[]
524525
}
@@ -527,5 +528,6 @@ model Manufacturer {
527528
name String @id
528529
dateCreated DateTime
529530
creatorId Int
531+
dateDeleted DateTime?
530532
materials Material[]
531533
}

src/backend/src/prisma/seed.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import ChangeRequestsService from '../services/change-requests.services';
2222
import projectQueryArgs from '../prisma-query-args/projects.query-args';
2323
import TeamsService from '../services/teams.services';
2424
import WorkPackagesService from '../services/work-packages.services';
25-
import { ChangeRequest, ClubAccount, StandardChangeRequest, validateWBS, WbsElementStatus, WorkPackageStage } from 'shared';
25+
import { ClubAccount, StandardChangeRequest, validateWBS, WbsElementStatus, WorkPackageStage } from 'shared';
2626
import TasksService from '../services/tasks.services';
2727
import DescriptionBulletsService from '../services/description-bullets.services';
2828
import { seedProject } from './seed-data/projects.seed';
@@ -209,15 +209,12 @@ const performSeed: () => Promise<void> = async () => {
209209
batman,
210210
justiceLeague.teamId,
211211
[
212-
wonderwoman,
213212
flash,
214213
aquaman,
215214
superman,
216215
hawkMan,
217216
hawkWoman,
218-
cyborg,
219217
greenLantern,
220-
martianManhunter,
221218
lexLuther,
222219
hawkgirl,
223220
elongatedMan,
@@ -228,6 +225,11 @@ const performSeed: () => Promise<void> = async () => {
228225
hankHeywood
229226
].map((user) => user.userId)
230227
);
228+
await TeamsService.setTeamLeads(
229+
batman,
230+
justiceLeague.teamId,
231+
[wonderwoman, cyborg, martianManhunter].map((user) => user.userId)
232+
);
231233
await TeamsService.setTeamMembers(
232234
aang,
233235
avatarBenders.teamId,

src/backend/src/routes/projects.routes.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,22 @@ projectRouter.post(
5656
validateInputs,
5757
ProjectsController.createManufacturer
5858
);
59+
projectRouter.delete('/bom/manufacturer/:manufacturerName/delete', ProjectsController.deleteManufacturer);
5960
projectRouter.get('/bom/manufacturer', ProjectsController.getAllManufacturers);
6061
projectRouter.get('/bom/material-type', ProjectsController.getAllMaterialTypes);
6162
projectRouter.post('/bom/material-type/create', nonEmptyString(body('name')), ProjectsController.createMaterialType);
6263
projectRouter.post(
6364
'/bom/assembly/:wbsNum/create',
6465
nonEmptyString(body('name')),
65-
nonEmptyString(body('pdmFileName')).optional(),
66+
nonEmptyString(body('pdmFileName').optional()),
6667
ProjectsController.createAssembly
6768
);
69+
projectRouter.post(
70+
'/bom/material/:materialId/assign-assembly',
71+
nonEmptyString(body('assemblyId').optional()),
72+
validateInputs,
73+
ProjectsController.assignMaterialAssembly
74+
);
6875
projectRouter.post(
6976
'/material/:wbsNum/create',
7077
nonEmptyString(body('name')),
@@ -75,13 +82,35 @@ projectRouter.post(
7582
nonEmptyString(body('manufacturerPartNumber')),
7683
nonEmptyString(body('pdmFileName').optional()),
7784
intMinZero(body('quantity')),
78-
nonEmptyString(body('unitName')),
85+
nonEmptyString(body('unitName')).optional(),
7986
intMinZero(body('price')), // in cents
8087
intMinZero(body('subtotal')), // in cents
8188
nonEmptyString(body('linkUrl').isURL()),
8289
body('notes').isString(),
8390
validateInputs,
8491
ProjectsController.createMaterial
8592
);
93+
projectRouter.post(
94+
'/bom/material/:materialId/edit',
95+
nonEmptyString(body('name')),
96+
nonEmptyString(body('assemblyId').optional()),
97+
isMaterialStatus(body('status')),
98+
nonEmptyString(body('materialTypeName')),
99+
nonEmptyString(body('manufacturerName')),
100+
nonEmptyString(body('manufacturerPartNumber')),
101+
nonEmptyString(body('pdmFileName').optional()),
102+
intMinZero(body('quantity')),
103+
body('unitName').optional(),
104+
intMinZero(body('price')), // in cents
105+
intMinZero(body('subtotal')), // in cents
106+
nonEmptyString(body('linkUrl').isURL()),
107+
body('notes').isString(),
108+
validateInputs,
109+
ProjectsController.editMaterial
110+
);
111+
112+
projectRouter.delete('/bom/material-type/:materialTypeId/delete', ProjectsController.deleteMaterialType);
113+
114+
projectRouter.delete('/bom/assembly/:assemblyId/delete', ProjectsController.deleteAssemblyType);
86115

87116
export default projectRouter;

src/backend/src/routes/reimbursement-requests.routes.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,6 @@ reimbursementRequestsRouter.post(
8686
reimbursementRequestsRouter.post(
8787
'/vendors/create',
8888
nonEmptyString(body('name')),
89-
body('allowedRefundSources').isArray(),
90-
isAccount(body('allowedRefundSources.*')),
9189
validateInputs,
9290
ReimbursementRequestController.createVendor
9391
);

0 commit comments

Comments
 (0)