|
@@ -19,6 +19,7 @@ import { cPeService } from "./c-pe-service.js";
|
|
|
import { cCustomFieldsValidateService } from "#modules/client/custom-fields/c-cf-validate-service.js";
|
|
|
import dayjs from "dayjs";
|
|
|
import { cActService } from "../c-act-service.js";
|
|
|
+import { cUsersService } from "#modules/client/users/c-users-service.js";
|
|
|
|
|
|
class ClientPeController {
|
|
|
async getEventPeTypes(
|
|
@@ -88,6 +89,18 @@ class ClientPeController {
|
|
|
api.client.pe.POST_PartEntity.req.formData.body.parse(
|
|
|
JSON.parse(req.body.body),
|
|
|
);
|
|
|
+ const { childId } = api.client.pe.POST_PartEntity.req.query.parse(
|
|
|
+ req.query,
|
|
|
+ );
|
|
|
+
|
|
|
+ // проверка родителя
|
|
|
+ if (childId) {
|
|
|
+ const isParent = await cUsersService.checkChildParent({
|
|
|
+ userId: user.userId,
|
|
|
+ childId,
|
|
|
+ });
|
|
|
+ if (!isParent) throw ApiError.ForbiddenError();
|
|
|
+ }
|
|
|
|
|
|
const files = req.files;
|
|
|
|
|
@@ -139,7 +152,7 @@ class ClientPeController {
|
|
|
insert into act.pe_members
|
|
|
(pe_member_id, pe_id, user_id)
|
|
|
values
|
|
|
- (${v7()}, ${peId}, ${user.userId})
|
|
|
+ (${v7()}, ${peId}, ${childId || user.userId})
|
|
|
`);
|
|
|
}
|
|
|
|
|
@@ -319,10 +332,52 @@ class ClientPeController {
|
|
|
and pm.is_active = true
|
|
|
`);
|
|
|
|
|
|
+ const childrenPes = await selPool.any(sql.type(
|
|
|
+ z.object({
|
|
|
+ peMemberId: DbSchema.act.peMembers.peMemberId,
|
|
|
+ peId: DbSchema.act.partEntities.peId,
|
|
|
+ peTypeId: DbSchema.act.partEntities.peTypeId,
|
|
|
+ peTypeCode: DbSchema.act.peTypes.code,
|
|
|
+ peTypeName: DbSchema.act.peTypes.name,
|
|
|
+ ownerId: DbSchema.act.partEntities.ownerId,
|
|
|
+ name: DbSchema.act.partEntities.name,
|
|
|
+ childId: DbSchema.usr.users.userId,
|
|
|
+ childIdentity: z.string(),
|
|
|
+ }),
|
|
|
+ )`
|
|
|
+ select
|
|
|
+ pm.pe_member_id "peMemberId",
|
|
|
+ pe.pe_id "peId",
|
|
|
+ pe.event_inst_id "peInstId",
|
|
|
+ pe.owner_id "ownerId",
|
|
|
+ pe.pe_type_id "peTypeId",
|
|
|
+ pt.code "peTypeCode",
|
|
|
+ pt."name" "peTypeName",
|
|
|
+ pe."name",
|
|
|
+ ui.user_id "childId",
|
|
|
+ ui."identity" "childIdentity"
|
|
|
+ from
|
|
|
+ usr.users u
|
|
|
+ join act.pe_members pm on
|
|
|
+ u.user_id = pm.user_id
|
|
|
+ join act.part_entities pe on
|
|
|
+ pe.pe_id = pm.pe_id
|
|
|
+ join act.pe_types pt on
|
|
|
+ pt.pe_type_id = pe.pe_type_id
|
|
|
+ left join ev.users_identity ui on
|
|
|
+ ui.user_id = u.user_id
|
|
|
+ where
|
|
|
+ u.is_child = true
|
|
|
+ and pe.event_inst_id = ${event.eventInstId}
|
|
|
+ and pm.is_active = true
|
|
|
+ and u.parent_id = ${user.userId}
|
|
|
+ `);
|
|
|
+
|
|
|
RouterUtils.validAndSendResponse(api.client.pe.GET_MyPes.res, res, {
|
|
|
code: "success",
|
|
|
owner: [...ownerPes],
|
|
|
memeber: [...memberPes],
|
|
|
+ children: [...childrenPes],
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -345,7 +400,7 @@ class ClientPeController {
|
|
|
// валделец
|
|
|
if (isOwner) {
|
|
|
const pe = await cPeService.getPeWithValues(peId);
|
|
|
- const members = await cPeService.getPeMembersWithFields(peId);
|
|
|
+ const members = await cPeService.getPeMembersWithIdentity(peId);
|
|
|
const invites = await cPeService.getInvites(peId);
|
|
|
const peMembersRequests = await cPeService.getPeMembersRequests(peId);
|
|
|
|
|
@@ -395,6 +450,15 @@ 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 { childId } = api.client.pe.POST_JoinToPe.req.query.parse(req.query);
|
|
|
+
|
|
|
+ if (childId) {
|
|
|
+ const isParent = await cUsersService.checkChildParent({
|
|
|
+ userId: user.userId,
|
|
|
+ childId,
|
|
|
+ });
|
|
|
+ if (!isParent) throw ApiError.ForbiddenError();
|
|
|
+ }
|
|
|
|
|
|
const isOwner = await cPeService.checkPeOwner(user.userId, peId);
|
|
|
if (!isOwner) throw ApiError.ForbiddenError();
|
|
@@ -412,7 +476,7 @@ class ClientPeController {
|
|
|
act.pe_members pm
|
|
|
where
|
|
|
pm.pe_id = ${peId} and
|
|
|
- pm.user_id = ${user.userId}
|
|
|
+ pm.user_id = ${childId || user.userId}
|
|
|
`);
|
|
|
|
|
|
if (peMember && peMember.isActive) {
|
|
@@ -438,7 +502,7 @@ class ClientPeController {
|
|
|
insert into act.pe_members
|
|
|
(pe_member_id, pe_id, user_id, is_active)
|
|
|
values
|
|
|
- (${memberId}, ${peId}, ${user.userId}, true)
|
|
|
+ (${memberId}, ${peId}, ${childId || user.userId}, true)
|
|
|
`);
|
|
|
}
|
|
|
|
|
@@ -527,6 +591,20 @@ class ClientPeController {
|
|
|
const { peInviteUuid } = api.client.pe.POST_AcceptInvite.req.params.parse(
|
|
|
req.params,
|
|
|
);
|
|
|
+ const { childId } = api.client.pe.POST_AcceptInvite.req.query.parse(
|
|
|
+ req.query,
|
|
|
+ );
|
|
|
+
|
|
|
+ if (childId) {
|
|
|
+ const isChildParent = await cUsersService.checkChildParent({
|
|
|
+ userId: user.userId,
|
|
|
+ childId,
|
|
|
+ });
|
|
|
+
|
|
|
+ if (!isChildParent) {
|
|
|
+ throw ApiError.ForbiddenError();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
const invite = await cPeService.getInviteInfo(peInviteUuid);
|
|
|
|
|
@@ -607,7 +685,9 @@ class ClientPeController {
|
|
|
// TODO: много лишних данных
|
|
|
// участник уже в pe
|
|
|
const peMembers = await cPeService.getPeMembersWithFields(invite.peId);
|
|
|
- const isFound = peMembers.find((m) => m.userId === user.userId);
|
|
|
+ const isFound = peMembers.find(
|
|
|
+ (m) => m.userId === (childId || user.userId),
|
|
|
+ );
|
|
|
if (isFound) {
|
|
|
RouterUtils.validAndSendResponse(
|
|
|
api.client.pe.POST_AcceptInvite.res,
|
|
@@ -623,7 +703,7 @@ class ClientPeController {
|
|
|
// запрос уже отправлен
|
|
|
const isPending = await cPeService.checkPeMemberInvite({
|
|
|
peInviteId: invite.peInviteId,
|
|
|
- userId: user.userId,
|
|
|
+ userId: childId || user.userId,
|
|
|
});
|
|
|
if (isPending) {
|
|
|
RouterUtils.validAndSendResponse(
|
|
@@ -643,7 +723,7 @@ class ClientPeController {
|
|
|
insert into act.pe_members_requests
|
|
|
(pe_member_request_id, pe_invite_id, user_id, status)
|
|
|
values
|
|
|
- (${id}, ${invite.peInviteId}, ${user.userId}, 'PENDING')
|
|
|
+ (${id}, ${invite.peInviteId}, ${childId || user.userId}, 'PENDING')
|
|
|
`);
|
|
|
|
|
|
await t.query(sql.unsafe`
|