From 8ded0f2265ade930525a1d8ee5c1909b67c6bb13 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Tue, 13 Jun 2023 15:02:26 +0000 Subject: [PATCH 1/3] Update file index.ts --- src/handlers/tariff/index.ts | 431 +++++++++++++++++------------------ 1 file changed, 212 insertions(+), 219 deletions(-) diff --git a/src/handlers/tariff/index.ts b/src/handlers/tariff/index.ts index a01d30a..34c3cc8 100644 --- a/src/handlers/tariff/index.ts +++ b/src/handlers/tariff/index.ts @@ -1,219 +1,212 @@ -import { Types } from "mongoose"; - -import { TariffModel } from "@/models/tariff.model"; -import { PrivilegeModel } from "@/models/privilege.model"; - -import { validateEmptyFields } from "@/utils/validate-empty-fields"; -import { determinePaginationParameters } from "@/utils/determine-pagination-parameters"; -import { validateTariff } from "./helpers"; - -import type { FastifyReply } from "fastify"; -import type { Privilege } from "@/types/models/privilege.type"; -import type { Eloquent } from "@/types/models/eloquent.type"; -import type { - CreateTariffRequest, - GetTariffRequest, - ReplaceTariffRequest, - RemoveTariffRequest, - GetTariffsResponse, - GetTariffsRequest, -} from "./types"; - -export const getTariffs = async (request: GetTariffsRequest): Promise => { - const { page, limit } = determinePaginationParameters(request?.query ?? {}); - - const tariffsCount = await TariffModel.countDocuments(); - - const totalPages = Math.ceil(tariffsCount / limit); - const offset = (page - 1) * limit; - - const tariffs = await TariffModel.find({}).sort({ createdAt: "desc" }).skip(offset).limit(limit).lean(); - - return { tariffs, totalPages }; -}; - -export const getTariff = async (request: GetTariffRequest, reply: FastifyReply) => { - const [requestParams, error] = validateEmptyFields(request.params ?? {}, ["id"]); - - if (error) { - void reply.status(400); - return error; - } - - if (!Types.ObjectId.isValid(requestParams.id)) { - void reply.status(400); - return new Error("invalid id"); - } - - const tariff = await TariffModel.findById(requestParams.id).lean(); - - if (!tariff) { - void reply.status(404); - return new Error("tariff not found"); - } - - return tariff; -}; - -export const createTariff = async (request: CreateTariffRequest, reply: FastifyReply) => { - const [requestBody, error] = validateTariff(request.body); - - if (error) { - void reply.status(400); - return error; - } - - for (const privilege of requestBody.privilegies) { - if (!Types.ObjectId.isValid(privilege.privilegeId)) { - void reply.status(404); - return new Error(`privilege id <${privilege.privilegeId}> invalid`); - } - } - - const privilegeIDs = requestBody.privilegies.map(({ privilegeId }) => privilegeId); - - const privilegies = await PrivilegeModel.find({ privilegeId: privilegeIDs }).lean(); - const cleanPrivilegies = privilegies.map>((privilege) => ({ - name: privilege.name, - privilegeId: privilege.privilegeId, - serviceKey: privilege.serviceKey, - description: privilege.description, - amount: privilege.amount, - type: privilege.type, - value: privilege.value, - price: privilege.price, - })); - - const newTariff = new TariffModel({ - name: requestBody.name, - price: requestBody.price, - isCustom: requestBody.isCustom, - privilegies: cleanPrivilegies, - }); - - await newTariff.save(); - - return newTariff; -}; - -export const replaceTariff = async (request: ReplaceTariffRequest, reply: FastifyReply) => { - const [requestBody, error] = validateTariff(request.body ?? {}); - - if (error) { - void reply.status(400); - return error; - } - - if (!Types.ObjectId.isValid(request.params?.id || "")) { - void reply.status(400); - return new Error("invalid id"); - } - - const tariff = await TariffModel.findById(request.params?.id); - - if (!tariff) { - void reply.status(404); - return new Error("tariff not found"); - } - - for (const privilege of requestBody.privilegies) { - if (!Types.ObjectId.isValid(privilege.privilegeId)) { - void reply.status(404); - return new Error(`privilege id <${privilege.privilegeId}> invalid`); - } - } - - const privilegeIDs = requestBody.privilegies.map(({ privilegeId }) => privilegeId); - - const privilegies = await PrivilegeModel.find({ privilegeId: privilegeIDs }).lean(); - const cleanPrivilegies = privilegies.map>((privilege) => ({ - name: privilege.name, - privilegeId: privilege.privilegeId, - serviceKey: privilege.serviceKey, - description: privilege.description, - amount: privilege.amount, - type: privilege.type, - value: privilege.value, - price: privilege.price, - })); - - await tariff.replaceOne({ - name: requestBody.name, - price: requestBody.price, - isCustom: requestBody.isCustom, - privilegies: cleanPrivilegies, - }); - - return tariff; -}; - -export const removeTariff = async (request: RemoveTariffRequest, reply: FastifyReply) => { - const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]); - - if (error) { - void reply.status(400); - return error; - } - - if (!Types.ObjectId.isValid(id)) { - void reply.status(400); - return new Error("invalid id"); - } - - const tariff = await TariffModel.findByIdAndUpdate(id, { - $set: { isDeleted: true, deletedAt: new Date() }, - }).lean(); - - if (!tariff) { - void reply.status(404); - return new Error("tariff not found"); - } - - return tariff; -}; - -export const deleteTariff = async (request: RemoveTariffRequest, reply: FastifyReply) => { - const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]); - - if (error) { - void reply.status(400); - return error; - } - - if (!Types.ObjectId.isValid(id)) { - void reply.status(400); - return new Error("invalid id"); - } - - const tariff = await TariffModel.findByIdAndDelete(id).lean(); - - if (!tariff) { - void reply.status(404); - return new Error("tariff not found"); - } - - return tariff; -}; - -export const restoreTariff = async (request: RemoveTariffRequest, reply: FastifyReply) => { - const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]); - - if (error) { - void reply.status(400); - return error; - } - - if (!Types.ObjectId.isValid(id)) { - void reply.status(400); - return new Error("invalid id"); - } - - const tariff = await TariffModel.findByIdAndUpdate(id, { $set: { isDeleted: false } }).lean(); - - if (!tariff) { - void reply.status(404); - return new Error("tariff not found"); - } - - return tariff; -}; +import { Types } from "mongoose"; + +import { TariffModel } from "@/models/tariff.model"; +import { PrivilegeModel } from "@/models/privilege.model"; + +import { validateEmptyFields } from "@/utils/validate-empty-fields"; +import { determinePaginationParameters } from "@/utils/determine-pagination-parameters"; +import { validateTariff } from "./helpers"; + +import type { FastifyReply } from "fastify"; +import type { Privilege } from "@/types/models/privilege.type"; +import type { Eloquent } from "@/types/models/eloquent.type"; +import type { + CreateTariffRequest, + GetTariffRequest, + ReplaceTariffRequest, + RemoveTariffRequest, + GetTariffsResponse, + GetTariffsRequest, +} from "./types"; + +export const getTariffs = async (request: GetTariffsRequest): Promise => { + const { page, limit } = determinePaginationParameters(request?.query ?? {}); + + const tariffsCount = await TariffModel.countDocuments(); + + const totalPages = Math.ceil(tariffsCount / limit); + const offset = (page - 1) * limit; + + const tariffs = await TariffModel.find({}).sort({ createdAt: "desc" }).skip(offset).limit(limit).lean(); + + return { tariffs, totalPages }; +}; + +export const getTariff = async (request: GetTariffRequest, reply: FastifyReply) => { + const [requestParams, error] = validateEmptyFields(request.params ?? {}, ["id"]); + + if (error) { + void reply.status(400); + return error; + } + + if (!Types.ObjectId.isValid(requestParams.id)) { + void reply.status(400); + return new Error("invalid id"); + } + + const tariff = await TariffModel.findById(requestParams.id).lean(); + + if (!tariff) { + void reply.status(404); + return new Error("tariff not found"); + } + + return tariff; +}; + +export const createTariff = async (request: CreateTariffRequest, reply: FastifyReply) => { + const [requestBody, error] = validateTariff(request.body); + + if (error) { + void reply.status(400); + return error; + } + + const privilegeIDs = requestBody.privilegies.map(({ privilegeId }) => privilegeId); + + const privilegies = await PrivilegeModel.find({ privilegeId: privilegeIDs }).lean(); + const cleanPrivilegies = privilegies.map>((privilege) => ({ + name: privilege.name, + privilegeId: privilege.privilegeId, + serviceKey: privilege.serviceKey, + description: privilege.description, + amount: privilege.amount, + type: privilege.type, + value: privilege.value, + price: privilege.price, + })); + + const newTariff = new TariffModel({ + name: requestBody.name, + price: requestBody.price, + isCustom: requestBody.isCustom, + privilegies: cleanPrivilegies, + }); + + await newTariff.save(); + + return newTariff; +}; + +export const replaceTariff = async (request: ReplaceTariffRequest, reply: FastifyReply) => { + const [requestBody, error] = validateTariff(request.body ?? {}); + + if (error) { + void reply.status(400); + return error; + } + + if (!Types.ObjectId.isValid(request.params?.id || "")) { + void reply.status(400); + return new Error("invalid id"); + } + + const tariff = await TariffModel.findById(request.params?.id); + + if (!tariff) { + void reply.status(404); + return new Error("tariff not found"); + } + + for (const privilege of requestBody.privilegies) { + if (!Types.ObjectId.isValid(privilege.privilegeId)) { + void reply.status(404); + return new Error(`privilege id <${privilege.privilegeId}> invalid`); + } + } + + const privilegeIDs = requestBody.privilegies.map(({ privilegeId }) => privilegeId); + + const privilegies = await PrivilegeModel.find({ privilegeId: privilegeIDs }).lean(); + const cleanPrivilegies = privilegies.map>((privilege) => ({ + name: privilege.name, + privilegeId: privilege.privilegeId, + serviceKey: privilege.serviceKey, + description: privilege.description, + amount: privilege.amount, + type: privilege.type, + value: privilege.value, + price: privilege.price, + })); + + await tariff.replaceOne({ + name: requestBody.name, + price: requestBody.price, + isCustom: requestBody.isCustom, + privilegies: cleanPrivilegies, + }); + + return tariff; +}; + +export const removeTariff = async (request: RemoveTariffRequest, reply: FastifyReply) => { + const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]); + + if (error) { + void reply.status(400); + return error; + } + + if (!Types.ObjectId.isValid(id)) { + void reply.status(400); + return new Error("invalid id"); + } + + const tariff = await TariffModel.findByIdAndUpdate(id, { + $set: { isDeleted: true, deletedAt: new Date() }, + }).lean(); + + if (!tariff) { + void reply.status(404); + return new Error("tariff not found"); + } + + return tariff; +}; + +export const deleteTariff = async (request: RemoveTariffRequest, reply: FastifyReply) => { + const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]); + + if (error) { + void reply.status(400); + return error; + } + + if (!Types.ObjectId.isValid(id)) { + void reply.status(400); + return new Error("invalid id"); + } + + const tariff = await TariffModel.findByIdAndDelete(id).lean(); + + if (!tariff) { + void reply.status(404); + return new Error("tariff not found"); + } + + return tariff; +}; + +export const restoreTariff = async (request: RemoveTariffRequest, reply: FastifyReply) => { + const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]); + + if (error) { + void reply.status(400); + return error; + } + + if (!Types.ObjectId.isValid(id)) { + void reply.status(400); + return new Error("invalid id"); + } + + const tariff = await TariffModel.findByIdAndUpdate(id, { $set: { isDeleted: false } }).lean(); + + if (!tariff) { + void reply.status(404); + return new Error("tariff not found"); + } + + return tariff; +}; From 9c382ab12a91c932534b2f169a1a4a3b383e09bd Mon Sep 17 00:00:00 2001 From: Mikhail Date: Tue, 13 Jun 2023 15:52:32 +0000 Subject: [PATCH 2/3] Update file index.ts --- src/handlers/tariff/index.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/handlers/tariff/index.ts b/src/handlers/tariff/index.ts index 34c3cc8..8e32c7e 100644 --- a/src/handlers/tariff/index.ts +++ b/src/handlers/tariff/index.ts @@ -62,10 +62,17 @@ export const createTariff = async (request: CreateTariffRequest, reply: FastifyR void reply.status(400); return error; } + + for (const privilege of requestBody.privilegies) { + if (!Types.ObjectId.isValid(privilege.privilegeId)) { + void reply.status(404); + return new Error(`privilege id <${privilege.privilegeId}> invalid`); + } + } const privilegeIDs = requestBody.privilegies.map(({ privilegeId }) => privilegeId); - const privilegies = await PrivilegeModel.find({ privilegeId: privilegeIDs }).lean(); + const privilegies = await PrivilegeModel.find({ _id: privilegeIDs }).lean(); const cleanPrivilegies = privilegies.map>((privilege) => ({ name: privilege.name, privilegeId: privilege.privilegeId, From 508eed611e2bfb5dd5f588fa7cad844ab52ce90c Mon Sep 17 00:00:00 2001 From: Mikhail Date: Thu, 15 Jun 2023 11:32:35 +0000 Subject: [PATCH 3/3] Update file index.ts --- src/handlers/tariff/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/handlers/tariff/index.ts b/src/handlers/tariff/index.ts index 8e32c7e..b728f68 100644 --- a/src/handlers/tariff/index.ts +++ b/src/handlers/tariff/index.ts @@ -125,7 +125,7 @@ export const replaceTariff = async (request: ReplaceTariffRequest, reply: Fastif const privilegeIDs = requestBody.privilegies.map(({ privilegeId }) => privilegeId); - const privilegies = await PrivilegeModel.find({ privilegeId: privilegeIDs }).lean(); + const privilegies = await PrivilegeModel.find({ _id: privilegeIDs }).lean(); const cleanPrivilegies = privilegies.map>((privilege) => ({ name: privilege.name, privilegeId: privilege.privilegeId,