|
@@ -30,14 +30,14 @@ import { UserUtils } from "#utils/user-utils.js";
|
|
import { CheckPermissionsService } from "#modules/permissions-management/check-permissions-service.js";
|
|
import { CheckPermissionsService } from "#modules/permissions-management/check-permissions-service.js";
|
|
import { EntityesService } from "#modules/entities-management/entityes-service.js";
|
|
import { EntityesService } from "#modules/entities-management/entityes-service.js";
|
|
import { RouterUtils } from "#utils/router-utils.js";
|
|
import { RouterUtils } from "#utils/router-utils.js";
|
|
-import { config } from "#config";
|
|
|
|
|
|
+import { AllPermissionsValues } from "#modules/permissions-management/permissions-types.js";
|
|
|
|
|
|
dayjs.extend(utc);
|
|
dayjs.extend(utc);
|
|
|
|
|
|
router.post("/create-event", async (req, res, next) => {
|
|
router.post("/create-event", async (req, res, next) => {
|
|
try {
|
|
try {
|
|
// валидация запроса
|
|
// валидация запроса
|
|
- const { localName, dates, timezone, companyId } =
|
|
|
|
|
|
+ const { localName, dates, timezone, companyId, rolesToAdd, staff } =
|
|
EventsManagementApi.ZCreateEvent.req.parse(req.body);
|
|
EventsManagementApi.ZCreateEvent.req.parse(req.body);
|
|
|
|
|
|
const userId = UserUtils.getUserFromReq(req).userId;
|
|
const userId = UserUtils.getUserFromReq(req).userId;
|
|
@@ -75,10 +75,11 @@ router.post("/create-event", async (req, res, next) => {
|
|
|
|
|
|
const eventId = uuidv7();
|
|
const eventId = uuidv7();
|
|
|
|
|
|
- // createEntity
|
|
|
|
|
|
+ // создаём ентити
|
|
|
|
+ // TODO заменить на процедуру
|
|
await EntityesService.createEntity(eventId, "event");
|
|
await EntityesService.createEntity(eventId, "event");
|
|
|
|
|
|
- // get event
|
|
|
|
|
|
+ // создаём ивент
|
|
await db.query(
|
|
await db.query(
|
|
sql.unsafe`
|
|
sql.unsafe`
|
|
insert into events_management.events
|
|
insert into events_management.events
|
|
@@ -87,7 +88,7 @@ router.post("/create-event", async (req, res, next) => {
|
|
(${eventId}, ${localName}, ${tz}, ${companyId})`,
|
|
(${eventId}, ${localName}, ${tz}, ${companyId})`,
|
|
);
|
|
);
|
|
|
|
|
|
- // get dates
|
|
|
|
|
|
+ // вставляем даты ивента
|
|
for (const date of dates) {
|
|
for (const date of dates) {
|
|
await db.query(
|
|
await db.query(
|
|
sql.unsafe`
|
|
sql.unsafe`
|
|
@@ -98,20 +99,43 @@ router.post("/create-event", async (req, res, next) => {
|
|
);
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
- // add role to user
|
|
|
|
- const MANAGER_ROLE_ID = config.EVENT_DEFAULT_ROLE_MANAGER_ID;
|
|
|
|
- if (!MANAGER_ROLE_ID) {
|
|
|
|
- throw Error("EVENT_DEFAULT_ROLE_MANAGER_ID is not defined");
|
|
|
|
|
|
+ // вставляем новые роли ивента
|
|
|
|
+ for (const role of rolesToAdd) {
|
|
|
|
+ // роль
|
|
|
|
+ await db.query(
|
|
|
|
+ sql.unsafe`
|
|
|
|
+ insert into
|
|
|
|
+ permissions_management.roles
|
|
|
|
+ (role_id, name, description, entity_id, is_system)
|
|
|
|
+ values
|
|
|
|
+ (${role.roleId}, ${role.name}, ${role.description}, ${eventId}, false)`,
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ // права
|
|
|
|
+ for (const permission of role.permissions) {
|
|
|
|
+ await db.query(
|
|
|
|
+ sql.unsafe`
|
|
|
|
+ insert into permissions_management.non_default_roles_overrides
|
|
|
|
+ (entity_id, role_id, permission_id, permission_value_id)
|
|
|
|
+ values
|
|
|
|
+ (${eventId}, ${role.roleId}, ${permission.permissionId}, ${permission.permissionValueId})
|
|
|
|
+ `,
|
|
|
|
+ );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- await db.query(
|
|
|
|
- sql.unsafe`
|
|
|
|
|
|
+ // добавляем юзеров
|
|
|
|
+
|
|
|
|
+ for (const user of staff) {
|
|
|
|
+ await db.query(
|
|
|
|
+ sql.unsafe`
|
|
insert into
|
|
insert into
|
|
permissions_management.user_roles
|
|
permissions_management.user_roles
|
|
- (user_id, role_id)
|
|
|
|
|
|
+ (user_id, role_id, entity_id)
|
|
values
|
|
values
|
|
- (${userId}, ${MANAGER_ROLE_ID})`,
|
|
|
|
- );
|
|
|
|
|
|
+ (${user.userId}, ${user.roleId}, ${eventId})`,
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
|
|
RouterUtils.validAndSendResponse(
|
|
RouterUtils.validAndSendResponse(
|
|
EventsManagementApi.ZCreateEvent.res,
|
|
EventsManagementApi.ZCreateEvent.res,
|
|
@@ -126,6 +150,37 @@ router.post("/create-event", async (req, res, next) => {
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+router.post("/get-event-system-roles", async (req, res, next) => {
|
|
|
|
+ try {
|
|
|
|
+ const systemRoles = await db.any(sql.type(
|
|
|
|
+ z.object({
|
|
|
|
+ role_id: ZDbShema.permissions_management.roles.role_id,
|
|
|
|
+ name: ZDbShema.permissions_management.roles.name,
|
|
|
|
+ description: ZDbShema.permissions_management.roles.description,
|
|
|
|
+ }),
|
|
|
|
+ )`
|
|
|
|
+ select
|
|
|
|
+ *
|
|
|
|
+ from
|
|
|
|
+ permissions_management.roles
|
|
|
|
+ where
|
|
|
|
+ is_system = true
|
|
|
|
+ and entity_type_id = 'event'
|
|
|
|
+ `);
|
|
|
|
+
|
|
|
|
+ RouterUtils.validAndSendResponse(
|
|
|
|
+ EventsManagementApi.ZGetEventSystemRoles.res,
|
|
|
|
+ res,
|
|
|
|
+ {
|
|
|
|
+ code: "success",
|
|
|
|
+ roles: [...systemRoles],
|
|
|
|
+ },
|
|
|
|
+ );
|
|
|
|
+ } catch (e) {
|
|
|
|
+ next(e);
|
|
|
|
+ }
|
|
|
|
+});
|
|
|
|
+
|
|
router.post("/get-event", async (req, res, next) => {
|
|
router.post("/get-event", async (req, res, next) => {
|
|
try {
|
|
try {
|
|
// валидация запроса
|
|
// валидация запроса
|
|
@@ -140,6 +195,7 @@ router.post("/get-event", async (req, res, next) => {
|
|
"view_event_true",
|
|
"view_event_true",
|
|
);
|
|
);
|
|
|
|
|
|
|
|
+ // TODO проверить везде ARRAY_AGG
|
|
// event
|
|
// event
|
|
const DbEventsTypes = ZDbShema.events_management.events;
|
|
const DbEventsTypes = ZDbShema.events_management.events;
|
|
const event = await db.maybeOne(
|
|
const event = await db.maybeOne(
|
|
@@ -224,13 +280,38 @@ router.post("/get-event", async (req, res, next) => {
|
|
select
|
|
select
|
|
room_id, name, location_id
|
|
room_id, name, location_id
|
|
from
|
|
from
|
|
- location_management.rooms
|
|
|
|
|
|
+ locations_management.rooms
|
|
where
|
|
where
|
|
room_id in (${sql.join(eventRoomsIdsArr, sql.fragment`, `)})
|
|
room_id in (${sql.join(eventRoomsIdsArr, sql.fragment`, `)})
|
|
`,
|
|
`,
|
|
);
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // task-blocks
|
|
|
|
+ // TODO вынести
|
|
|
|
+ const REQUIRED_PERMISSION: AllPermissionsValues = "view_task_block_true";
|
|
|
|
+ const taskBlocks = await db.any(
|
|
|
|
+ sql.type(
|
|
|
|
+ z.object({
|
|
|
|
+ task_block_id: ZDbShema.tasks_management.task_blocks.task_block_id,
|
|
|
|
+ name: ZDbShema.tasks_management.task_blocks.name,
|
|
|
|
+ }),
|
|
|
|
+ )`
|
|
|
|
+ select
|
|
|
|
+ tb.task_block_id,
|
|
|
|
+ tb.name
|
|
|
|
+ from
|
|
|
|
+ tasks_management.task_blocks tb
|
|
|
|
+ -- permissions
|
|
|
|
+ join permissions_management.cached_user_permissions cup on
|
|
|
|
+ tb.task_block_id = cup.entity_id
|
|
|
|
+ where
|
|
|
|
+ tb.event_id = ${eventId} and
|
|
|
|
+ cup.user_id = ${userId} and
|
|
|
|
+ cup.permission_value_id = ${REQUIRED_PERMISSION}
|
|
|
|
+ `,
|
|
|
|
+ );
|
|
|
|
+
|
|
// res
|
|
// res
|
|
RouterUtils.validAndSendResponse(EventsManagementApi.ZGetEvent.res, res, {
|
|
RouterUtils.validAndSendResponse(EventsManagementApi.ZGetEvent.res, res, {
|
|
code: "success",
|
|
code: "success",
|
|
@@ -238,6 +319,7 @@ router.post("/get-event", async (req, res, next) => {
|
|
...event,
|
|
...event,
|
|
programPoints: [...programPoints],
|
|
programPoints: [...programPoints],
|
|
rooms: [...rooms],
|
|
rooms: [...rooms],
|
|
|
|
+ taskBlocks: [...taskBlocks],
|
|
},
|
|
},
|
|
});
|
|
});
|
|
} catch (e) {
|
|
} catch (e) {
|
|
@@ -257,8 +339,8 @@ router.post("/create-program-point", async (req, res, next) => {
|
|
await CheckPermissionsService.checkEntityPermission(
|
|
await CheckPermissionsService.checkEntityPermission(
|
|
eventId,
|
|
eventId,
|
|
userId,
|
|
userId,
|
|
- "create_program_point",
|
|
|
|
- "create_program_point_true",
|
|
|
|
|
|
+ "edit_event",
|
|
|
|
+ "edit_event_true",
|
|
);
|
|
);
|
|
|
|
|
|
const programPointId = uuidv7();
|
|
const programPointId = uuidv7();
|
|
@@ -291,25 +373,13 @@ router.post("/update-event", async (req, res, next) => {
|
|
|
|
|
|
const userId = UserUtils.getUserFromReq(req).userId;
|
|
const userId = UserUtils.getUserFromReq(req).userId;
|
|
|
|
|
|
- if (localName) {
|
|
|
|
- // проверка прав
|
|
|
|
- await CheckPermissionsService.checkEntityPermission(
|
|
|
|
- eventId,
|
|
|
|
- userId,
|
|
|
|
- "edit_event_name",
|
|
|
|
- "edit_event_name_true",
|
|
|
|
- );
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (timezone) {
|
|
|
|
- // проверка прав
|
|
|
|
- await CheckPermissionsService.checkEntityPermission(
|
|
|
|
- eventId,
|
|
|
|
- userId,
|
|
|
|
- "edit_event_timezone",
|
|
|
|
- "edit_event_timezone_true",
|
|
|
|
- );
|
|
|
|
- }
|
|
|
|
|
|
+ // проверка прав
|
|
|
|
+ await CheckPermissionsService.checkEntityPermission(
|
|
|
|
+ eventId,
|
|
|
|
+ userId,
|
|
|
|
+ "edit_event",
|
|
|
|
+ "edit_event_true",
|
|
|
|
+ );
|
|
|
|
|
|
// change localName, timezone
|
|
// change localName, timezone
|
|
await db.query(
|
|
await db.query(
|
|
@@ -333,14 +403,6 @@ router.post("/update-event", async (req, res, next) => {
|
|
|
|
|
|
// change dates
|
|
// change dates
|
|
if (dates) {
|
|
if (dates) {
|
|
- // проверка прав
|
|
|
|
- await CheckPermissionsService.checkEntityPermission(
|
|
|
|
- eventId,
|
|
|
|
- userId,
|
|
|
|
- "edit_event_dates",
|
|
|
|
- "edit_event_dates_true",
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
await db.query(
|
|
await db.query(
|
|
sql.unsafe`
|
|
sql.unsafe`
|
|
delete from events_management.event_dates
|
|
delete from events_management.event_dates
|
|
@@ -402,8 +464,8 @@ router.post("/update-program-point", async (req, res, next) => {
|
|
await CheckPermissionsService.checkEntityPermission(
|
|
await CheckPermissionsService.checkEntityPermission(
|
|
eventId,
|
|
eventId,
|
|
userId,
|
|
userId,
|
|
- "edit_event_program_points",
|
|
|
|
- "edit_event_program_points_true",
|
|
|
|
|
|
+ "edit_event",
|
|
|
|
+ "edit_event_true",
|
|
);
|
|
);
|
|
|
|
|
|
// point
|
|
// point
|