feat: change tariff model

This commit is contained in:
Kirill 2023-05-29 09:20:39 +03:00
parent 6621ae1ca5
commit c1a70eaa8d
12 changed files with 57 additions and 75 deletions

@ -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/*

@ -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:

@ -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",

@ -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);

@ -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<Record<string, Privilege>>((accamulator, privilegeId) => {
const findedPrivilege = privilegies.find((privilege) => privilege.privilegeId === privilegeId);
if (!findedPrivilege) {
return accamulator;
}
accamulator[privilegeId] = findedPrivilege;
return accamulator;
}, {});
const cleanPrivilegies = privilegies.map<Omit<Privilege, keyof Eloquent>>((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<Record<string, Privilege>>((accamulator, privilegeId) => {
const findedPrivilege = privilegies.find((privilege) => privilege.privilegeId === privilegeId);
if (!findedPrivilege) {
return accamulator;
}
accamulator[privilegeId] = findedPrivilege;
return accamulator;
}, {});
const cleanPrivilegies = privilegies.map<Omit<Privilege, keyof Eloquent>>((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);

@ -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,

@ -14,6 +14,11 @@ const schema: SchemaDefinition<Privilege> = {
required: true,
index: true,
},
amount: {
type: Number,
require: false,
default: 1,
},
serviceKey: {
type: String,
required: true,

@ -19,9 +19,8 @@ const schema: SchemaDefinition<Tariff> = {
default: false,
},
privilegies: {
type: Map,
of: PrivilegeSchema,
default: {},
type: [PrivilegeSchema],
default: [],
},
...eloquentSchema,
};

@ -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",

@ -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;
};

@ -5,6 +5,7 @@ export type Privilege = Eloquent & {
privilegeId: string;
serviceKey: string;
description: string;
amount: number;
type: "count" | "day" | "full";
value: string;
price: number;

@ -5,5 +5,5 @@ export type Tariff = Eloquent & {
name: string;
price: number;
isCustom: boolean;
privilegies: Record<string, Omit<Privilege, keyof Eloquent>>;
privilegies: Array<Omit<Privilege, keyof Eloquent>>;
};