|
@@ -24,8 +24,8 @@ import { cPeService } from "./participant-entities/c-pe-service.js";
|
|
import { cActService } from "./c-act-service.js";
|
|
import { cActService } from "./c-act-service.js";
|
|
import { validatePeForAct } from "./validators/act-pe-validators.js";
|
|
import { validatePeForAct } from "./validators/act-pe-validators.js";
|
|
import { generateRandomNumber } from "#utils/other-utils.js";
|
|
import { generateRandomNumber } from "#utils/other-utils.js";
|
|
-import { PeMemberWithIdentityShema } from "#api/v_0.1.0/types/pe-types.js";
|
|
|
|
import { cUsersService } from "../users/c-users-service.js";
|
|
import { cUsersService } from "../users/c-users-service.js";
|
|
|
|
+import { logger } from "#plugins/logger.js";
|
|
|
|
|
|
class ClientActivitiesController {
|
|
class ClientActivitiesController {
|
|
async getEventActivities(
|
|
async getEventActivities(
|
|
@@ -500,7 +500,7 @@ class ClientActivitiesController {
|
|
);
|
|
);
|
|
|
|
|
|
const user = sessionService.getUserFromReq(req);
|
|
const user = sessionService.getUserFromReq(req);
|
|
- const role = await cActService.checkActRegOwner(user.userId, activityRegId);
|
|
|
|
|
|
+ const role = await cActService.checkActRegRole(user.userId, activityRegId);
|
|
if (!role) throw ApiError.ForbiddenError();
|
|
if (!role) throw ApiError.ForbiddenError();
|
|
|
|
|
|
let actReg: z.infer<
|
|
let actReg: z.infer<
|
|
@@ -508,87 +508,116 @@ class ClientActivitiesController {
|
|
> | null;
|
|
> | null;
|
|
if (role === "owner") {
|
|
if (role === "owner") {
|
|
const r = await cActService.getActRegWithValues(activityRegId);
|
|
const r = await cActService.getActRegWithValues(activityRegId);
|
|
- if (!r)
|
|
|
|
|
|
+ if (!r) {
|
|
throw ApiError.BadRequest(
|
|
throw ApiError.BadRequest(
|
|
"actRegNotFound",
|
|
"actRegNotFound",
|
|
"Регистрация на мероприятии не найдена",
|
|
"Регистрация на мероприятии не найдена",
|
|
);
|
|
);
|
|
|
|
+ }
|
|
|
|
|
|
- let pe:
|
|
|
|
- | {
|
|
|
|
- peId: string;
|
|
|
|
- peTypeCode: string;
|
|
|
|
- peTypeName: string;
|
|
|
|
- name: string;
|
|
|
|
- members: (z.infer<typeof PeMemberWithIdentityShema> & {
|
|
|
|
- isPaid: boolean;
|
|
|
|
- })[];
|
|
|
|
- }
|
|
|
|
- | undefined = undefined;
|
|
|
|
- let user:
|
|
|
|
- | {
|
|
|
|
- userId: string;
|
|
|
|
- isChild: boolean;
|
|
|
|
- identity: string;
|
|
|
|
- }
|
|
|
|
- | undefined = undefined;
|
|
|
|
-
|
|
|
|
|
|
+ // регистрация через pe
|
|
if (r.peId) {
|
|
if (r.peId) {
|
|
- const _pe = await cPeService.getPeForMember(r.peId);
|
|
|
|
- if (!_pe)
|
|
|
|
|
|
+ const pe = await cActService.getPeForActReg({
|
|
|
|
+ peId: r.peId,
|
|
|
|
+ activityRegId,
|
|
|
|
+ });
|
|
|
|
+ if (!pe)
|
|
throw ApiError.BadRequest(
|
|
throw ApiError.BadRequest(
|
|
"peNotFound",
|
|
"peNotFound",
|
|
"Сущность участия не найдена",
|
|
"Сущность участия не найдена",
|
|
);
|
|
);
|
|
|
|
|
|
- const m = [
|
|
|
|
- ...(await cPeService.getActivePeMembersWithIdentity(r.peId)),
|
|
|
|
- ];
|
|
|
|
- const peMembers = await Promise.all(
|
|
|
|
- m.map(async (m) => ({
|
|
|
|
- ...m,
|
|
|
|
- // TODO: слишком много операций, проще одним запросом вместо getPeMembersWithIdentity
|
|
|
|
- isPaid: await cActService.checkPeMemberActivityRegPayment({
|
|
|
|
- peMemberId: m.peMemberId,
|
|
|
|
- activityRegId: activityRegId,
|
|
|
|
- }),
|
|
|
|
- })),
|
|
|
|
- );
|
|
|
|
- pe = {
|
|
|
|
- ..._pe,
|
|
|
|
- members: peMembers,
|
|
|
|
|
|
+ actReg = {
|
|
|
|
+ ...r,
|
|
|
|
+ entity: { pe },
|
|
|
|
+ role,
|
|
};
|
|
};
|
|
- } else if (r.isUserReg && r.userId) {
|
|
|
|
|
|
+ }
|
|
|
|
+ // личная регистрация
|
|
|
|
+ else if (r.isUserReg && r.userId) {
|
|
const _user = await cUsersService.getUserWithIdentity(r.userId);
|
|
const _user = await cUsersService.getUserWithIdentity(r.userId);
|
|
if (!_user)
|
|
if (!_user)
|
|
throw ApiError.BadRequest("userNotFound", "Пользователь не найден");
|
|
throw ApiError.BadRequest("userNotFound", "Пользователь не найден");
|
|
|
|
|
|
- user = _user;
|
|
|
|
- } else {
|
|
|
|
|
|
+ actReg = {
|
|
|
|
+ ...r,
|
|
|
|
+ entity: { user: _user },
|
|
|
|
+ role,
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+ // никакая не регистрация
|
|
|
|
+ else {
|
|
|
|
+ logger.error({
|
|
|
|
+ func: "getActReg1",
|
|
|
|
+ message: "Регистрация на мероприятии не найдена",
|
|
|
|
+ activityRegId,
|
|
|
|
+ userId: user.userId,
|
|
|
|
+ role,
|
|
|
|
+ });
|
|
throw ApiError.BadRequest(
|
|
throw ApiError.BadRequest(
|
|
"actRegNotFound",
|
|
"actRegNotFound",
|
|
"Регистрация на мероприятии не найдена",
|
|
"Регистрация на мероприятии не найдена",
|
|
);
|
|
);
|
|
}
|
|
}
|
|
-
|
|
|
|
- actReg = {
|
|
|
|
- ...r,
|
|
|
|
- pe,
|
|
|
|
- user,
|
|
|
|
- role,
|
|
|
|
- };
|
|
|
|
- } else {
|
|
|
|
|
|
+ }
|
|
|
|
+ // для члена pe или родителя члена pe
|
|
|
|
+ // личной регистрации с оплатой за участников быть не должно
|
|
|
|
+ else {
|
|
const r = await cActService.getActRegForPeMember({ activityRegId });
|
|
const r = await cActService.getActRegForPeMember({ activityRegId });
|
|
- if (!r)
|
|
|
|
|
|
+
|
|
|
|
+ if (!r) {
|
|
throw ApiError.BadRequest(
|
|
throw ApiError.BadRequest(
|
|
"actRegNotFound",
|
|
"actRegNotFound",
|
|
"Регистрация на мероприятии не найдена",
|
|
"Регистрация на мероприятии не найдена",
|
|
);
|
|
);
|
|
|
|
+ }
|
|
|
|
|
|
- actReg = {
|
|
|
|
- ...r,
|
|
|
|
- role,
|
|
|
|
- };
|
|
|
|
|
|
+ // регистрация через pe
|
|
|
|
+ if (r.peId) {
|
|
|
|
+ const pe = await cActService.getPeForActReg({
|
|
|
|
+ peId: r.peId,
|
|
|
|
+ activityRegId,
|
|
|
|
+ });
|
|
|
|
+ if (!pe)
|
|
|
|
+ throw ApiError.BadRequest(
|
|
|
|
+ "peNotFound",
|
|
|
|
+ "Сущность участия не найдена",
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ actReg = {
|
|
|
|
+ ...r,
|
|
|
|
+ entity: { pe },
|
|
|
|
+ role,
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+ // личная регистрация
|
|
|
|
+ else if (r.isUserReg && r.userId) {
|
|
|
|
+ logger.error({
|
|
|
|
+ func: "getActReg2",
|
|
|
|
+ r,
|
|
|
|
+ message: "Регистрация личная, но в ней участник не владелец",
|
|
|
|
+ activityRegId,
|
|
|
|
+ role,
|
|
|
|
+ userId: user.userId,
|
|
|
|
+ });
|
|
|
|
+ throw ApiError.BadRequest(
|
|
|
|
+ "actRegNotFound",
|
|
|
|
+ "Регистрация на мероприятии не найдена",
|
|
|
|
+ );
|
|
|
|
+ } else {
|
|
|
|
+ logger.error({
|
|
|
|
+ func: "getActReg3",
|
|
|
|
+ r,
|
|
|
|
+ message: "Что то очень странное",
|
|
|
|
+ activityRegId,
|
|
|
|
+ role,
|
|
|
|
+ userId: user.userId,
|
|
|
|
+ });
|
|
|
|
+ throw ApiError.BadRequest(
|
|
|
|
+ "actRegNotFound",
|
|
|
|
+ "Регистрация на мероприятии не найдена",
|
|
|
|
+ );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
RouterUtils.validAndSendResponse(
|
|
RouterUtils.validAndSendResponse(
|
|
@@ -808,7 +837,7 @@ class ClientActivitiesController {
|
|
api.client.activities.DELETE_ActivityReg.req.params.parse(req.params);
|
|
api.client.activities.DELETE_ActivityReg.req.params.parse(req.params);
|
|
|
|
|
|
const user = sessionService.getUserFromReq(req);
|
|
const user = sessionService.getUserFromReq(req);
|
|
- const role = await cActService.checkActRegOwner(user.userId, activityRegId);
|
|
|
|
|
|
+ const role = await cActService.checkActRegRole(user.userId, activityRegId);
|
|
if (role !== "owner") throw ApiError.ForbiddenError();
|
|
if (role !== "owner") throw ApiError.ForbiddenError();
|
|
|
|
|
|
await updPool.transaction(async (tr) => {
|
|
await updPool.transaction(async (tr) => {
|