all repos — caroster @ 2e4e192becc64475ea9245eb5fec57f72cb7088e

[Octree] Group carpool to your event https://caroster.io

backend/src/api/travel/policies/check-deletion.ts (view raw)

 1import { errors } from "@strapi/utils";
 2
 3export default async (policyContext, config, { strapi }) => {
 4  const travelId = policyContext.args?.id;
 5  const travel = await strapi.entityService.findOne(
 6    "api::travel.travel",
 7    travelId,
 8    {
 9      populate: ["event", "user"],
10    }
11  );
12
13  if (!travel) throw new errors.NotFoundError(`Travel not found`);
14
15  const event = travel.event;
16
17  if (event.enabled_modules?.includes("caroster-plus")) {
18    const user = policyContext.state.user;
19    if (!user) throw new errors.ForbiddenError();
20
21    const admins = event.administrators?.split(/, ?/) || [];
22    const isAdmin = [...admins, event.email].includes(user.email);
23
24    if (isAdmin) {
25      const vehicleName =
26        travel.firstname && travel.lastname
27          ? `${travel.firstname} ${travel.lastname[0]}.`
28          : travel.vehicleName;
29      await strapi.entityService.create("api::notification.notification", {
30        data: {
31          type: "DeletedYourTrip",
32          event,
33          user: travel.user,
34          payload: { travel, vehicleName },
35        },
36      });
37      return true;
38    } else if (travel.user?.email === user.email) return true;
39    else return false;
40  }
41};