Bläddra i källkod

Добавлено вступление в pe для владельца

Vadim 2 månader sedan
förälder
incheckning
80daff1193

+ 12 - 0
src/api/v_0.1.0/client/client-pe-api.ts

@@ -359,6 +359,18 @@ class ClientPartEntitiesApi {
       ),
     }),
   };
+
+  POST_JoinToPe = {
+    req: {
+      params: z.object({
+        peId: z.string().uuid(),
+      }),
+    },
+    res: z.object({
+      code: z.enum(["success"]),
+      memberId: z.string().uuid(),
+    }),
+  };
 }
 
 export const clientPartEntitiesApi = new ClientPartEntitiesApi();

+ 59 - 0
src/modules/client/activities/participant-entities/c-pe-controller.ts

@@ -390,6 +390,65 @@ class ClientPeController {
     });
   }
 
+  async joinToPe(req: Request, res: Response) {
+    const user = sessionService.getUserFromReq(req);
+    const { peId } = api.client.pe.POST_JoinToPe.req.params.parse(req.params);
+
+    const isOwner = await cPeService.checkPeOwner(user.userId, peId);
+    if (!isOwner) throw ApiError.ForbiddenError();
+
+    const peMember = await selPool.maybeOne(sql.type(
+      z.object({
+        isActive: DbSchema.act.peMembers.isActive,
+        peMemberId: DbSchema.act.peMembers.peMemberId,
+      }),
+    )`
+      select
+        pm.pe_member_id "peMemberId",
+        pm.is_active "isActive"
+      from
+        act.pe_members pm
+      where
+        pm.pe_id = ${peId} and
+        pm.user_id = ${user.userId}
+    `);
+
+    if (peMember && peMember.isActive) {
+      throw ApiError.BadRequest(
+        "peMemberAlreadyExists",
+        "Участник уже в сущности участия",
+      );
+    }
+
+    const memberId = v7();
+
+    await updPool.transaction(async (tr) => {
+      if (peMember) {
+        await tr.query(sql.unsafe`
+          update act.pe_members
+          set
+            is_active = true
+          where
+            pe_member_id = ${peMember.peMemberId}
+        `);
+      } else {
+        await tr.query(sql.unsafe`
+        insert into act.pe_members 
+          (pe_member_id, pe_id, user_id, is_active)
+        values
+          (${memberId}, ${peId}, ${user.userId}, true)
+      `);
+      }
+
+      await cPeService.updateAllActRegStatusByPe(peId);
+    });
+
+    RouterUtils.validAndSendResponse(api.client.pe.POST_JoinToPe.res, res, {
+      code: "success",
+      memberId,
+    });
+  }
+
   async createInvite(req: Request, res: Response) {
     const user = sessionService.getUserFromReq(req);
     const { name, limitVal, expirationDate } =

+ 5 - 0
src/modules/client/activities/participant-entities/c-pe-router.ts

@@ -41,6 +41,11 @@ router.get(
 
 router.get("/:peId", RouterUtils.asyncHandler(clientPeController.getPe));
 
+router.post(
+  "/:peId/join",
+  RouterUtils.asyncHandler(clientPeController.joinToPe),
+);
+
 router.patch(
   "/:peId",
   upload.any(),