From c1a70eaa8deded7fae23e95e3e9abb31572d2786 Mon Sep 17 00:00:00 2001 From: Kirill Date: Mon, 29 May 2023 09:20:39 +0300 Subject: [PATCH] feat: change tariff model --- Dockerfile | 4 +- deployments/dev/docker-compose.yaml | 17 +----- package.json | 1 - src/configuration/register-fastify-plugins.ts | 2 - src/handlers/tariff/index.ts | 59 +++++++++---------- src/index.ts | 4 -- src/models/privilege.model.ts | 5 ++ src/models/tariff.model.ts | 5 +- src/swagger/tariff/models.ts | 16 ++--- src/types/configuration/plugins-options.ts | 16 +++-- src/types/models/privilege.type.ts | 1 + src/types/models/tariff.type.ts | 2 +- 12 files changed, 57 insertions(+), 75 deletions(-) diff --git a/Dockerfile b/Dockerfile index 39a6b69..a4ea535 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:19.1-alpine as dev +FROM node:19.1-alpine AS dev RUN apk update && rm -rf /var/cache/apk/* @@ -17,7 +17,7 @@ RUN ls RUN yarn build -FROM node:19.1-alpine as production +FROM node:19.1-alpine AS production RUN apk update && rm -rf /var/cache/apk/* diff --git a/deployments/dev/docker-compose.yaml b/deployments/dev/docker-compose.yaml index 313f985..96f567d 100644 --- a/deployments/dev/docker-compose.yaml +++ b/deployments/dev/docker-compose.yaml @@ -10,11 +10,11 @@ services: env_file: - .env environment: - - DB_HOST=admin-mongo + - DB_HOST=mongo - DB_PORT=27017 - ENVIRONMENT=staging - HTTP_HOST=0.0.0.0 - - HTTP_PORT=8005 + - HTTP_PORT=8001 - AUTH_SERVICE_HOST=http://auth - AUTH_SERVICE_PORT=8000 - DB_USERNAME=test @@ -22,20 +22,9 @@ services: - DB_NAME=admin networks: - dev - depends_on: - - admin-mongo ports: - - 8005:8005 + - 8001:8001 - admin-mongo: - image: "mongo:6.0.3" - environment: - MONGO_INITDB_ROOT_USERNAME: test - MONGO_INITDB_ROOT_PASSWORD: test - ports: - - 27017:27017 - networks: - - dev networks: dev: diff --git a/package.json b/package.json index 806c1b5..db3bd6d 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,6 @@ }, "dependencies": { "@fastify/cookie": "^8.3.0", - "@fastify/cors": "^8.2.0", "@fastify/jwt": "^6.3.3", "@fastify/swagger": "^8.2.1", "@fastify/swagger-ui": "^1.3.0", diff --git a/src/configuration/register-fastify-plugins.ts b/src/configuration/register-fastify-plugins.ts index f637198..22031cb 100644 --- a/src/configuration/register-fastify-plugins.ts +++ b/src/configuration/register-fastify-plugins.ts @@ -1,4 +1,3 @@ -import cors from "@fastify/cors"; import cookie from "@fastify/cookie"; import jwt from "@fastify/jwt"; import swagger from "@fastify/swagger"; @@ -12,7 +11,6 @@ import type { FastifyInstance } from "fastify"; import type { PluginsOptions } from "@/types/configuration/plugins-options"; export const registerFastifyPlugins = (fastify: FastifyInstance, options: PluginsOptions) => { - fastify.register(cors, options.cors); fastify.register(cookie, options.cookie); fastify.register(jwt, options.jwt); fastify.register(swagger, DEFAULT.swaggerOptions); diff --git a/src/handlers/tariff/index.ts b/src/handlers/tariff/index.ts index 7857cd9..5906e6e 100644 --- a/src/handlers/tariff/index.ts +++ b/src/handlers/tariff/index.ts @@ -9,12 +9,13 @@ 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 } from "./types"; export const getTariffs = async () => TariffModel.find({}).lean(); export const getTariff = async (request: GetTariffRequest, reply: FastifyReply) => { - const [requestParams, error] = validateEmptyFields(request.params || {}, ["id"]); + const [requestParams, error] = validateEmptyFields(request.params ?? {}, ["id"]); if (error) { reply.status(400); @@ -52,24 +53,22 @@ export const createTariff = async (request: CreateTariffRequest, reply: FastifyR } const privilegies = await PrivilegeModel.find({ privilegeId: requestBody.privilegieIDArray }).lean(); - - const privilegiesMap = requestBody.privilegieIDArray.reduce>((accamulator, privilegeId) => { - const findedPrivilege = privilegies.find((privilege) => privilege.privilegeId === privilegeId); - - if (!findedPrivilege) { - return accamulator; - } - - accamulator[privilegeId] = findedPrivilege; - - return accamulator; - }, {}); + const cleanPrivilegies = privilegies.map>((privilege) => ({ + name: privilege.name, + privilegeId: privilege.name, + 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: privilegiesMap, + privilegies: cleanPrivilegies, }); await newTariff.save(); @@ -78,7 +77,7 @@ export const createTariff = async (request: CreateTariffRequest, reply: FastifyR }; export const replaceTariff = async (request: ReplaceTariffRequest, reply: FastifyReply) => { - const [requestBody, error] = validateTariff(request.body || {}); + const [requestBody, error] = validateTariff(request.body ?? {}); if (error) { reply.status(400); @@ -105,31 +104,29 @@ export const replaceTariff = async (request: ReplaceTariffRequest, reply: Fastif } const privilegies = await PrivilegeModel.find({ privilegeId: requestBody.privilegieIDArray }).lean(); - - const privilegiesMap = requestBody.privilegieIDArray.reduce>((accamulator, privilegeId) => { - const findedPrivilege = privilegies.find((privilege) => privilege.privilegeId === privilegeId); - - if (!findedPrivilege) { - return accamulator; - } - - accamulator[privilegeId] = findedPrivilege; - - return accamulator; - }, {}); + const cleanPrivilegies = privilegies.map>((privilege) => ({ + name: privilege.name, + privilegeId: privilege.name, + 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: privilegiesMap, + privilegies: cleanPrivilegies, }); return tariff; }; export const removeTariff = async (request: RemoveTariffRequest, reply: FastifyReply) => { - const [{ id }, error] = validateEmptyFields(request.body || {}, ["id"]); + const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]); if (error) { reply.status(400); @@ -154,7 +151,7 @@ export const removeTariff = async (request: RemoveTariffRequest, reply: FastifyR }; export const deleteTariff = async (request: RemoveTariffRequest, reply: FastifyReply) => { - const [{ id }, error] = validateEmptyFields(request.body || {}, ["id"]); + const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]); if (error) { reply.status(400); @@ -177,7 +174,7 @@ export const deleteTariff = async (request: RemoveTariffRequest, reply: FastifyR }; export const restoreTariff = async (request: RemoveTariffRequest, reply: FastifyReply) => { - const [{ id }, error] = validateEmptyFields(request.body || {}, ["id"]); + const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]); if (error) { reply.status(400); diff --git a/src/index.ts b/src/index.ts index f2460b4..1ad4917 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,10 +11,6 @@ const server = new Server({ serverOptions: CONFIGURATION.http, databaseOptions: CONFIGURATION.db, pluginsOptions: { - cors: { - methods: ["GET", "PUT", "POST", "PATCH", "DELETE"], - origin: "*", - }, jwt: { secret: { public: CONFIGURATION.service.publicAccessSecretKey, diff --git a/src/models/privilege.model.ts b/src/models/privilege.model.ts index d1ace2e..254d5de 100644 --- a/src/models/privilege.model.ts +++ b/src/models/privilege.model.ts @@ -14,6 +14,11 @@ const schema: SchemaDefinition = { required: true, index: true, }, + amount: { + type: Number, + require: false, + default: 1, + }, serviceKey: { type: String, required: true, diff --git a/src/models/tariff.model.ts b/src/models/tariff.model.ts index a1257ba..2cefdfd 100644 --- a/src/models/tariff.model.ts +++ b/src/models/tariff.model.ts @@ -19,9 +19,8 @@ const schema: SchemaDefinition = { default: false, }, privilegies: { - type: Map, - of: PrivilegeSchema, - default: {}, + type: [PrivilegeSchema], + default: [], }, ...eloquentSchema, }; diff --git a/src/swagger/tariff/models.ts b/src/swagger/tariff/models.ts index 2e060c2..2bac337 100644 --- a/src/swagger/tariff/models.ts +++ b/src/swagger/tariff/models.ts @@ -36,8 +36,8 @@ export const tariff: SwaggerMessage = { price: { type: "number" }, isCustom: { type: "boolean" }, privilegies: { - type: "object", - additionalProperties: privilege, + type: "array", + items: privilege, }, isDeleted: { type: "boolean" }, createdAt: { @@ -58,8 +58,8 @@ export const tariff: SwaggerMessage = { name: "Использование сервисов", price: 14000, isCustom: false, - privilegies: { - "507f1f77bcf86cd799439011": { + privilegies: [ + { name: "507f1f77bcf86cd799439011", privilegeId: "507f1f77bcf86cd799439011", serviceKey: "docx-templater-service", @@ -68,7 +68,7 @@ export const tariff: SwaggerMessage = { value: "200", price: 12300, }, - }, + ], isDeleted: false, createdAt: "2017-07-21T17:32:28Z", updatedAt: "2017-07-21T17:32:28Z", @@ -77,8 +77,8 @@ export const tariff: SwaggerMessage = { name: "user", price: 14000, isCustom: false, - privilegies: { - "507f1f77bcf86cd799439011": { + privilegies: [ + { name: "507f1f77bcf86cd799439011", privilegeId: "507f1f77bcf86cd799439011", serviceKey: "docx-templater-service", @@ -87,7 +87,7 @@ export const tariff: SwaggerMessage = { value: "200", price: 12300, }, - }, + ], isDeleted: true, createdAt: "2017-07-21T17:32:28Z", updatedAt: "2019-04-14T15:32:15Z", diff --git a/src/types/configuration/plugins-options.ts b/src/types/configuration/plugins-options.ts index 20ded5e..00cd8d3 100644 --- a/src/types/configuration/plugins-options.ts +++ b/src/types/configuration/plugins-options.ts @@ -1,9 +1,7 @@ -import type { FastifyCorsOptions } from "@fastify/cors"; -import type { FastifyCookieOptions } from "@fastify/cookie"; -import type { FastifyJWTOptions } from "@fastify/jwt"; - -export type PluginsOptions = { - cors?: FastifyCorsOptions; - cookie?: FastifyCookieOptions; - jwt?: FastifyJWTOptions; -}; +import type { FastifyCookieOptions } from "@fastify/cookie"; +import type { FastifyJWTOptions } from "@fastify/jwt"; + +export type PluginsOptions = { + cookie?: FastifyCookieOptions; + jwt?: FastifyJWTOptions; +}; diff --git a/src/types/models/privilege.type.ts b/src/types/models/privilege.type.ts index 0070cf1..b1b35a1 100644 --- a/src/types/models/privilege.type.ts +++ b/src/types/models/privilege.type.ts @@ -5,6 +5,7 @@ export type Privilege = Eloquent & { privilegeId: string; serviceKey: string; description: string; + amount: number; type: "count" | "day" | "full"; value: string; price: number; diff --git a/src/types/models/tariff.type.ts b/src/types/models/tariff.type.ts index 2b72d87..871937e 100644 --- a/src/types/models/tariff.type.ts +++ b/src/types/models/tariff.type.ts @@ -5,5 +5,5 @@ export type Tariff = Eloquent & { name: string; price: number; isCustom: boolean; - privilegies: Record>; + privilegies: Array>; };