experience.js 8.7 KB
"use strict";
const utils = require("@strapi/utils");
const { ApplicationError, ValidationError } = utils.errors;
/**
 * experience controller
 */

const { createCoreController } = require("@strapi/strapi").factories;

module.exports = createCoreController("api::experience.experience", () => ({
  async create(ctx) {
    // Validations
    if (!ctx.request.body.data.vendor) {
      throw new ValidationError("Vendor is a mandatory field.");
    }
    if (!ctx.request.body.data.pincode) {
      throw new ValidationError("Pincode is a mandatory field.");
    }
    if (!ctx.request.body.data.subCategory) {
      throw new ValidationError("Subcategory is a mandatory field");
    }
    if (!ctx.request.body.data.category) {
      throw new ValidationError("Category is a mandatory field");
    }
    const subCategory = await strapi
      .query("api::sub-categorie.sub-categorie")
      .findOne({
        where: {
          name: {
            $eq: ctx.request.body.data.subCategory,
          },
        },
      });

    const category = await strapi.query("api::categorie.categorie").findOne({
      where: {
        name: {
          $eq: ctx.request.body.data.category,
        },
      },
    });

    const repeatedActivities = await strapi
      .query("api::experience.experience")
      .findOne({
        where: {
          $and: [
            { name: ctx.request.body.data.name },
            { vendor: ctx.request.body.data.vendor.id },
          ],
        },
      });

    if (repeatedActivities) {
      throw new ValidationError(
        "Activity with the same name already exists, please rename the activity."
      );
    }
    // Create Activity
    const activity = await strapi.entityService.create(
      "api::experience.experience",
      {
        data: {
          name: ctx.request.body.data.name,
          description: ctx.request.body.data.description,
          pricePerPerson: ctx.request.body.data.pricePerPerson,
          address: ctx.request.body.data.address,
          masterPincode: ctx.request.body.data.pincode.id,
          minimumDuration: ctx.request.body.data.minimumDuration,
          maximumDuration: ctx.request.body.data.maximumDuration,
          duration: ctx.request.body.data.duration,
          ageLowerLimit: ctx.request.body.data.ageLowerLimit,
          ageNotes: ctx.request.body.data.ageNotes,
          phoneNumber: ctx.request.body.data.phoneNumber,
          minGroupSize: ctx.request.body.data.minGroupSize,
          maxGroupSize: ctx.request.body.data.maxGroupSize,
          activityType: ctx.request.body.data.activityType,
          link: ctx.request.body.data.link,
          cancellationPolicy: ctx.request.body.data.cancellationPolicy,
          vendor: ctx.request.body.data.vendor.id,
          subCategory: subCategory.id,
          category: category.id,
          giftSomeone: ctx.request.body.data.giftSomeone,
          fromDate: ctx.request.body.data.fromDate,
          toDate: ctx.request.body.data.toDate,
          fromTime: ctx.request.body.data.fromTime,
          toTime: ctx.request.body.data.toTime,
          offers: ctx.request.body.data.offers,
          rating: ctx.request.body.data.rating,
          contactPersonForActivity:
            ctx.request.body.data.contactPersonForActivity,
          contactPersonForBooking:
            ctx.request.body.data.contactPersonForBooking,
          ...ctx.request.body.data.daysBoolean,
        },
      }
    );

    ctx.send({
      success: true,
      message: "Activity Created",
      data: {
        ...activity,
      },
    });
  },

  // async update(ctx) {
  //   // if (!ctx.request.body.data.vendor) {
  //   //   throw new ValidationError("Vendor is a mandatory field.");
  //   // }
  //   console.log("ctx>", ctx.request.body);
  //   if (!ctx.request.body.data.pincode) {
  //     throw new ValidationError("Pincode is a mandatory field.");
  //   }
  //   if (!ctx.request.body.data.subCategory) {
  //     throw new ValidationError("Subcategory is a mandatory field");
  //   }
  //   if (!ctx.request.body.data.category) {
  //     throw new ValidationError("Category is a mandatory field");
  //   }
  //   console.log("subcategoyr", ctx.params);
  //   const { id } = ctx.params;

  //   const subCategory = await strapi
  //     .query("api::sub-categorie.sub-categorie")
  //     .findOne({
  //       where: {
  //         name: {
  //           $eq: ctx.request.body.data.subCategory,
  //         },
  //       },
  //     });
  //   const category = await strapi.query("api::categorie.categorie").findOne({
  //     where: {
  //       name: {
  //         $eq: ctx.request.body.data.category,
  //       },
  //     },
  //   });
  //   console.log(
  //     "ctx.request.body.data.activityId",
  //     ctx.request.body.data.activityId
  //   );
  //   const updatedExperience = await strapi
  //     .query("api::experience.experience")
  //     .update(
  //       { id },
  //       {
  //         name: ctx.request.body.data.name,
  //         description: ctx.request.body.data.description,
  //         pricePerPerson: ctx.request.body.data.pricePerPerson,
  //         address: ctx.request.body.data.address,
  //         masterPincode: ctx.request.body.data.pincode.id,
  //         minimumDuration: ctx.request.body.data.minimumDuration,
  //         maximumDuration: ctx.request.body.data.maximumDuration,
  //         duration: ctx.request.body.data.duration,
  //         ageLowerLimit: ctx.request.body.data.ageLowerLimit,
  //         ageNotes: ctx.request.body.data.ageNotes,
  //         phoneNumber: ctx.request.body.data.phoneNumber,
  //         minGroupSize: ctx.request.body.data.minGroupSize,
  //         maxGroupSize: ctx.request.body.data.maxGroupSize,
  //         activityType: ctx.request.body.data.activityType,
  //         link: ctx.request.body.data.link,
  //         cancellationPolicy: ctx.request.body.data.cancellationPolicy,
  //         // vendor: ctx.request.body.data.vendor.id,
  //         subCategory: subCategory.id,
  //         category: category.id,
  //         giftSomeone: ctx.request.body.data.giftSomeone,
  //         fromDate: ctx.request.body.data.fromDate,
  //         toDate: ctx.request.body.data.toDate,
  //         fromTime: ctx.request.body.data.fromTime,
  //         toTime: ctx.request.body.data.toTime,
  //         offers: ctx.request.body.data.offers,
  //         rating: ctx.request.body.data.rating,
  //         contactPersonForActivity:
  //           ctx.request.body.data.contactPersonForActivity,
  //         contactPersonForBooking:
  //           ctx.request.body.data.contactPersonForBooking,
  //         ...ctx.request.body.data.daysBoolean,
  //       }
  //     );

  //   // const activity = await strapi.entityService.update(
  //   //   "api::experience.experience",
  //   //   { id: ctx.request.body.data.activityId },
  //   //   {
  //   //     name: ctx.request.body.data.name,
  //   //     description: ctx.request.body.data.description,
  //   //     pricePerPerson: ctx.request.body.data.pricePerPerson,
  //   //     address: ctx.request.body.data.address,
  //   //     masterPincode: ctx.request.body.data.pincode.id,
  //   //     minimumDuration: ctx.request.body.data.minimumDuration,
  //   //     maximumDuration: ctx.request.body.data.maximumDuration,
  //   //     duration: ctx.request.body.data.duration,
  //   //     ageLowerLimit: ctx.request.body.data.ageLowerLimit,
  //   //     ageNotes: ctx.request.body.data.ageNotes,
  //   //     phoneNumber: ctx.request.body.data.phoneNumber,
  //   //     minGroupSize: ctx.request.body.data.minGroupSize,
  //   //     maxGroupSize: ctx.request.body.data.maxGroupSize,
  //   //     activityType: ctx.request.body.data.activityType,
  //   //     link: ctx.request.body.data.link,
  //   //     cancellationPolicy: ctx.request.body.data.cancellationPolicy,
  //   //     // vendor: ctx.request.body.data.vendor.id,
  //   //     subCategory: subCategory.id,
  //   //     category: category.id,
  //   //     giftSomeone: ctx.request.body.data.giftSomeone,
  //   //     fromDate: ctx.request.body.data.fromDate,
  //   //     toDate: ctx.request.body.data.toDate,
  //   //     fromTime: ctx.request.body.data.fromTime,
  //   //     toTime: ctx.request.body.data.toTime,
  //   //     offers: ctx.request.body.data.offers,
  //   //     rating: ctx.request.body.data.rating,
  //   //     contactPersonForActivity:
  //   //       ctx.request.body.data.contactPersonForActivity,
  //   //     contactPersonForBooking: ctx.request.body.data.contactPersonForBooking,
  //   //     ...ctx.request.body.data.daysBoolean,
  //   //   }
  //   // );
  //   console.log("updatedExperience", updatedExperience);
  //   ctx.send({
  //     success: true,
  //     message: "Activity updated",
  //     data: {
  //       ...updatedExperience,
  //     },
  //   });
  // },
}));