@@ -10,6 +10,7 @@ import {
1010 Manufacturer ,
1111 MaterialType ,
1212 Project ,
13+ Unit ,
1314 WbsNumber ,
1415 wbsPipe
1516} from 'shared' ;
@@ -30,12 +31,13 @@ import { wbsNumOf } from '../utils/utils';
3031import WorkPackagesService from './work-packages.services' ;
3132import linkQueryArgs from '../prisma-query-args/links.query-args' ;
3233import linkTypeQueryArgs from '../prisma-query-args/link-types.query-args' ;
33- import manufacturerQueryArgs from '../prisma-query-args/manufacturers.query-args' ;
3434import materialTypeQueryArgs from '../prisma-query-args/material-type.query-args' ;
3535import { linkTypeTransformer } from '../transformers/links.transformer' ;
36- import { manufacturerTransformer } from '../transformers/manufacturer.transformer' ;
3736import { isUserPartOfTeams } from '../utils/teams.utils' ;
3837import { materialTypeTransformer } from '../transformers/material-type.transformer' ;
38+ import { materialPreviewTransformer } from '../transformers/material.transformer' ;
39+ import manufacturerQueryArgs from '../prisma-query-args/manufacturers.query-args' ;
40+ import manufacturerTransformer from '../transformers/manufacturer.transformer' ;
3941
4042export default class ProjectsService {
4143 /**
@@ -585,7 +587,7 @@ export default class ProjectsService {
585587 * Create an assembly
586588 * @param name The name of the assembly to be created
587589 * @param userCreated The user creating the assembly
588- * @param wbsElementId The
590+ * @param wbsElementId The wbsElement that the created assembly is associated with
589591 * @param pdmFileName optional - The name of the file holding the assembly
590592 * @returns the project that the user has favorited/unfavorited
591593 * @throws if the project wbs doesn't exist or is not corresponding to a project
@@ -613,9 +615,9 @@ export default class ProjectsService {
613615 if ( ! project ) throw new NotFoundException ( 'Project' , wbsPipe ( wbsNumber ) ) ;
614616 if ( project . wbsElement . dateDeleted ) throw new DeletedException ( 'Project' , project . projectId ) ;
615617
616- const checkAssembly = await prisma . assembly . findUnique ( { where : { name } } ) ;
617-
618- if ( checkAssembly ) throw new HttpException ( 400 , `${ name } already exists as an assembly!` ) ;
618+ console . log ( project . wbsElement . assemblies ) ;
619+ if ( project . wbsElement . assemblies . some ( ( assembly ) => assembly . name === name && ! assembly . dateDeleted ) )
620+ throw new HttpException ( 400 , `${ name } already exists as an assembly on this project !` ) ;
619621
620622 const { teams, wbsElementId } = project ;
621623
@@ -656,7 +658,7 @@ export default class ProjectsService {
656658 if ( manufacturer ) throw new HttpException ( 400 , `${ name } already exists as a manufacturer!` ) ;
657659
658660 const newManufacturer = await prisma . manufacturer . create ( {
659- data : { name, dateCreated : new Date ( ) , creatorId : submitter . userId }
661+ data : { name, dateCreated : new Date ( ) , userCreatedId : submitter . userId }
660662 } ) ;
661663
662664 return newManufacturer ;
@@ -754,7 +756,7 @@ export default class ProjectsService {
754756 data : {
755757 name,
756758 dateCreated : new Date ( ) ,
757- creatorId : submitter . userId
759+ userCreatedId : submitter . userId
758760 }
759761 } ) ;
760762
@@ -1028,4 +1030,46 @@ export default class ProjectsService {
10281030
10291031 return updatedMaterial ;
10301032 }
1033+
1034+ /**
1035+ * Gets all the units in the database with all their materials
1036+ * @returns all the units in the database
1037+ */
1038+ static async getAllUnits ( user : User ) : Promise < Unit [ ] > {
1039+ if ( isGuest ( user . role ) ) throw new AccessDeniedGuestException ( 'get units' ) ;
1040+
1041+ const units = await prisma . unit . findMany ( {
1042+ include : {
1043+ materials : true
1044+ }
1045+ } ) ;
1046+
1047+ return units . map ( ( unit ) => {
1048+ return { ...unit , materials : unit . materials . map ( materialPreviewTransformer ) } ;
1049+ } ) ;
1050+ }
1051+
1052+ /**
1053+ * Creates a new unit
1054+ * @param submitter the user who's creating the unit
1055+ * @param name the name of the unit
1056+ * @throws if the submitter is a guest or the given unit name already exists
1057+ */
1058+ static async createUnit ( name : string , submitter : User ) : Promise < Unit > {
1059+ if ( isGuest ( submitter . role ) ) throw new AccessDeniedGuestException ( 'create units' ) ;
1060+
1061+ const unit = await prisma . unit . findUnique ( {
1062+ where : {
1063+ name
1064+ }
1065+ } ) ;
1066+
1067+ if ( unit ) throw new HttpException ( 400 , `${ name } already exists as a unit!` ) ;
1068+
1069+ const newUnit = await prisma . unit . create ( {
1070+ data : { name }
1071+ } ) ;
1072+
1073+ return { ...newUnit , materials : [ ] } ;
1074+ }
10311075}
0 commit comments