|
@@ -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 } =
|