Prechádzať zdrojové kódy

Добавлен лимит мемберов в pe

Vadim 2 mesiacov pred
rodič
commit
852ea0f945

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

@@ -80,6 +80,8 @@ class ClientPartEntitiesApi {
           peTypeId: z.string().uuid(),
           peTypeCode: z.string(),
           peTypeName: z.string(),
+          maxMembers: z.number().int().nullable(),
+          isWithMembers: z.boolean(),
           eventInstId: z.string().uuid(),
           name: z.string(),
           ownerId: z.string().uuid(),

+ 33 - 1
src/modules/client/activities/participant-entities/c-pe-controller.ts

@@ -473,8 +473,40 @@ class ClientPeController {
       return;
     }
 
+    const pe = await selPool.maybeOne(sql.unsafe`
+      select
+        pe.pe_id,
+        pt.max_members,
+        members."membersCount"
+      from
+        act.part_entities pe
+      left join act.pe_types pt on
+        pt.pe_type_id = pe.pe_type_id
+      left join (
+        select
+          pe_id,
+          count(*) as "membersCount"
+        from
+          act.pe_members
+        where
+          is_active = true
+        group by
+          pe_id
+      ) members on
+        members.pe_id = pe.pe_id
+      where
+        pe.pe_id = ${invite.peId}
+    `);
+
+    if (!pe) {
+      throw ApiError.BadRequest("peNotFound", "Сущность участия не найдена");
+    }
+
     // лимит превышен
-    if (invite.limitVal && invite.countVal >= invite.limitVal) {
+    if (
+      (invite.limitVal && invite.countVal >= invite.limitVal) ||
+      (pe.maxMembers !== null && pe.membersCount >= pe.maxMembers)
+    ) {
       RouterUtils.validAndSendResponse(
         api.client.pe.POST_AcceptInvite.res,
         res,

+ 15 - 9
src/modules/client/activities/participant-entities/c-pe-service.ts

@@ -30,6 +30,8 @@ class CPeService {
         peTypeId: z.string().uuid(),
         peTypeCode: z.string(),
         peTypeName: z.string(),
+        maxMembers: z.number().int().nullable(),
+        isWithMembers: z.boolean(),
         eventInstId: z.string().uuid(),
         ownerId: z.string().uuid(),
         name: z.string(),
@@ -41,16 +43,20 @@ class CPeService {
       }),
     )`
       select
-        pe_id "peId",
-        pe_type_id "peTypeId",
-        pe_type_code "peTypeCode",
-        pe_type_name "peTypeName",
-        event_inst_id "eventInstId",
-        name,
-        owner_id "ownerId",
-        fields
+        pe.pe_id "peId",
+        pe.pe_type_id "peTypeId",
+        pe.pe_type_code "peTypeCode",
+        pe.pe_type_name "peTypeName",
+        pt.max_members "maxMembers",
+        pt.is_with_members "isWithMembers",
+        pe.event_inst_id "eventInstId",
+        pe.name,
+        pe.owner_id "ownerId",
+        pe.fields
       from
-        act.pe_with_fields_and_values
+        act.pe_with_fields_and_values pe
+      left join act.pe_types pt on
+        pt.pe_type_id = pe.pe_type_id
       where
         pe_id = ${peId}
     `);