@@ -213,6 +213,7 @@ export default class PartReviewService {
213213 }
214214
215215 static async uploadFile ( file : Express . Multer . File ) {
216+ console . log ( 'Service Function file' , file ) ;
216217 const data = await uploadFile ( file ) ;
217218
218219 if ( ! data ?. id ) {
@@ -231,7 +232,8 @@ export default class PartReviewService {
231232 description : string ,
232233 reviewStatus : Review_Status ,
233234 tagIds : string [ ] ,
234- assigneeIds : string [ ]
235+ assigneeIds : string [ ] ,
236+ reviewerIds : string [ ]
235237 ) {
236238 const part = await prisma . part . findUnique ( {
237239 where : { partId } ,
@@ -247,24 +249,63 @@ export default class PartReviewService {
247249
248250 if ( ! hasPermission ) throw new AccessDeniedException ( 'Only leadership and the part creator can update part data' ) ;
249251
250- const updatedPart = await prisma . part . update ( {
251- where : { partId } ,
252- data : {
253- index,
254- commonName,
255- description,
256- status : reviewStatus ,
257- tags : {
258- set : tagIds . map ( ( partTagId ) => ( { partTagId } ) )
252+ const editedPart = await prisma . $transaction ( async ( tx ) => {
253+ const editedPart = await tx . part . update ( {
254+ where : { partId } ,
255+ data : {
256+ index,
257+ commonName,
258+ description,
259+ status : reviewStatus ,
260+ tags : {
261+ set : tagIds . map ( ( partTagId ) => ( { partTagId } ) )
262+ } ,
263+ assignees : {
264+ set : assigneeIds . map ( ( userId ) => ( { userId } ) )
265+ }
259266 } ,
260- assignees : {
261- set : assigneeIds . map ( ( userId ) => ( { userId } ) )
262- }
263- } ,
264- ...getPartQueryArgs ( organizationId )
267+ ...getPartQueryArgs ( organizationId )
268+ } ) ;
269+
270+ const reviewersToAdd = reviewerIds . filter (
271+ ( id ) => ! editedPart . reviewRequests . some ( ( reviewReq ) => reviewReq . reviewerRequested . userId === id )
272+ ) ;
273+
274+ await Promise . all (
275+ reviewersToAdd . map ( async ( id ) => {
276+ return tx . partReviewRequest . create ( {
277+ data : {
278+ part : {
279+ connect : {
280+ partId : editedPart . partId
281+ }
282+ } ,
283+ requester : { connect : { userId : updater . userId } } ,
284+ reviewerRequested : { connect : { userId : id } }
285+ }
286+ } ) ;
287+ } )
288+ ) ;
289+
290+ const reviewRequestsToRemove = editedPart . reviewRequests . filter (
291+ ( reviewReq ) => ! reviewerIds . includes ( reviewReq . reviewerRequested . userId )
292+ ) ;
293+
294+ await Promise . all (
295+ reviewRequestsToRemove . map ( async ( reviewReq ) => {
296+ return tx . partReviewRequest . update ( {
297+ where : { partReviewRequestId : reviewReq . partReviewRequestId } ,
298+ data : {
299+ dateDeleted : new Date ( )
300+ }
301+ } ) ;
302+ } )
303+ ) ;
304+
305+ return editedPart ;
265306 } ) ;
266307
267- return partTransformer ( updatedPart ) ;
308+ return partTransformer ( editedPart ) ;
268309 }
269310
270311 static async deletePart ( partId : string , deleter : User , organizationId : string ) {
0 commit comments