all repos — caroster @ e3dd820256e0c4ea2c317a33c8fc29f9a83f3711

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

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

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