Update file index.ts

This commit is contained in:
Mikhail 2023-07-03 16:43:05 +00:00
parent 667fdce888
commit c7cc06aa61

@ -1,280 +1,280 @@
import { Types } from "mongoose"; import { Types } from "mongoose";
import { PrivilegeModel } from "@/models/privilege.model"; import { PrivilegeModel } from "@/models/privilege.model";
import { validateEmptyFields } from "@/utils/validate-empty-fields"; import { validateEmptyFields } from "@/utils/validate-empty-fields";
import { convertPrivilegiesToMap, validatePrivilege } from "./helpers"; import { convertPrivilegiesToMap, validatePrivilege } from "./helpers";
import type { FastifyReply } from "fastify"; import type { FastifyReply } from "fastify";
import type { import type {
GetServicePrivilegiesRequest, GetServicePrivilegiesRequest,
RegisterPrivilegeRequest, RegisterPrivilegeRequest,
GetPrivilegeRequest, GetPrivilegeRequest,
RegisterPrivilegiesRequest, RegisterPrivilegiesRequest,
RemovePrivilegeRequest, RemovePrivilegeRequest,
} from "./types"; } from "./types";
export const registerPrivilegies = async (request: RegisterPrivilegiesRequest, reply: FastifyReply) => { export const registerPrivilegies = async (request: RegisterPrivilegiesRequest, reply: FastifyReply) => {
const [requestBody, errorEmpty] = validateEmptyFields(request.body ?? {}, ["privilegies"]); const [requestBody, errorEmpty] = validateEmptyFields(request.body ?? {}, ["privilegies"]);
if (errorEmpty) { if (errorEmpty) {
void reply.status(400); void reply.status(400);
return errorEmpty; return errorEmpty;
} }
if (!requestBody.privilegies.length) { if (!requestBody.privilegies.length) {
void reply.status(400); void reply.status(400);
return new Error("empty privilege array"); return new Error("empty privilege array");
} }
for (const rawPrivilege of requestBody.privilegies) { for (const rawPrivilege of requestBody.privilegies) {
const errorInvalid = validatePrivilege(rawPrivilege); const errorInvalid = validatePrivilege(rawPrivilege);
if (errorInvalid) { if (errorInvalid) {
void reply.status(400); void reply.status(400);
return errorInvalid; return errorInvalid;
} }
} }
const updatePrivilegeRequests = requestBody.privilegies.map(async (privilege) => { const updatePrivilegeRequests = requestBody.privilegies.map(async (privilege) => {
await PrivilegeModel.updateOne( await PrivilegeModel.updateOne(
{ privilegeId: privilege.privilegeId }, { privilegeId: privilege.privilegeId },
{ {
$set: { $set: {
name: privilege.name, name: privilege.name,
privilegeId: privilege.privilegeId, privilegeId: privilege.privilegeId,
serviceKey: privilege.serviceKey, serviceKey: privilege.serviceKey,
description: privilege.description, description: privilege.description,
type: privilege.type, type: privilege.type,
value: privilege.value, value: privilege.value,
price: privilege.price, price: privilege.price,
isDeleted: false, isDeleted: false,
createdAt: new Date(), createdAt: new Date(),
}, },
}, },
{ upsert: true } { upsert: true }
).lean(); ).lean();
return privilege; return privilege;
}); });
return Promise.all(updatePrivilegeRequests); return Promise.all(updatePrivilegeRequests);
}; };
export const registerPrivilege = async (request: RegisterPrivilegeRequest, reply: FastifyReply) => { export const registerPrivilege = async (request: RegisterPrivilegeRequest, reply: FastifyReply) => {
const [requestBody, errorEmpty] = validateEmptyFields( const [requestBody, errorEmpty] = validateEmptyFields(
request.body ?? {}, request.body ?? {},
["name", "privilegeId", "serviceKey", "type", "description", "value", "amount"], ["name", "privilegeId", "serviceKey", "type", "description", "value"],
false false
); );
if (errorEmpty) { if (errorEmpty) {
void reply.status(400); void reply.status(400);
return errorEmpty; return errorEmpty;
} }
const errorInvalid = validatePrivilege(requestBody); const errorInvalid = validatePrivilege(requestBody);
if (errorInvalid) { if (errorInvalid) {
void reply.status(400); void reply.status(400);
return errorInvalid; return errorInvalid;
} }
const privilege = await PrivilegeModel.findOne({ privilegeId: requestBody.privilegeId }).lean(); const privilege = await PrivilegeModel.findOne({ privilegeId: requestBody.privilegeId }).lean();
if (privilege) { if (privilege) {
void reply.status(409); void reply.status(409);
return new Error("privilege already exist"); return new Error("privilege already exist");
} }
const newPrivilege = new PrivilegeModel({ const newPrivilege = new PrivilegeModel({
name: requestBody.name, name: requestBody.name,
privilegeId: requestBody.privilegeId, privilegeId: requestBody.privilegeId,
serviceKey: requestBody.serviceKey, serviceKey: requestBody.serviceKey,
description: requestBody.description, description: requestBody.description,
type: requestBody.type, type: requestBody.type,
value: requestBody.value, value: requestBody.value,
price: requestBody.price, price: requestBody.price,
}); });
return newPrivilege.save(); return newPrivilege.save();
}; };
export const getAllPrivilegies = async () => PrivilegeModel.find({ isDeleted: false }).lean(); export const getAllPrivilegies = async () => PrivilegeModel.find({ isDeleted: false }).lean();
export const getAllPrivilegiesMap = async () => { export const getAllPrivilegiesMap = async () => {
const privilegies = await PrivilegeModel.find({ isDeleted: false }).lean(); const privilegies = await PrivilegeModel.find({ isDeleted: false }).lean();
if (!privilegies.length) { if (!privilegies.length) {
return {}; return {};
} }
return convertPrivilegiesToMap(privilegies); return convertPrivilegiesToMap(privilegies);
}; };
export const getServicePrivilegies = async (request: GetServicePrivilegiesRequest, reply: FastifyReply) => { export const getServicePrivilegies = async (request: GetServicePrivilegiesRequest, reply: FastifyReply) => {
const [requestParams, error] = validateEmptyFields(request.params ?? {}, ["serviceKey"]); const [requestParams, error] = validateEmptyFields(request.params ?? {}, ["serviceKey"]);
if (error) { if (error) {
void reply.status(400); void reply.status(400);
return error; return error;
} }
return PrivilegeModel.find({ serviceKey: requestParams.serviceKey, isDeleted: false }).lean(); return PrivilegeModel.find({ serviceKey: requestParams.serviceKey, isDeleted: false }).lean();
}; };
export const getPrivilege = async (request: GetPrivilegeRequest, reply: FastifyReply) => { export const getPrivilege = async (request: GetPrivilegeRequest, reply: FastifyReply) => {
const [requestParams, error] = validateEmptyFields(request.params ?? {}, ["privilegeId"]); const [requestParams, error] = validateEmptyFields(request.params ?? {}, ["privilegeId"]);
if (error) { if (error) {
void reply.status(400); void reply.status(400);
return error; return error;
} }
if (!Types.ObjectId.isValid(requestParams.privilegeId)) { if (!Types.ObjectId.isValid(requestParams.privilegeId)) {
void reply.status(400); void reply.status(400);
return new Error("invalid id"); return new Error("invalid id");
} }
const privilege = await PrivilegeModel.findOne({ privilegeId: requestParams.privilegeId, isDeleted: false }).lean(); const privilege = await PrivilegeModel.findOne({ privilegeId: requestParams.privilegeId, isDeleted: false }).lean();
if (!privilege) { if (!privilege) {
void reply.status(404); void reply.status(404);
return new Error("privilege not found"); return new Error("privilege not found");
} }
return privilege; return privilege;
}; };
export const replacePrivilege = async (request: RegisterPrivilegeRequest, reply: FastifyReply) => { export const replacePrivilege = async (request: RegisterPrivilegeRequest, reply: FastifyReply) => {
const [requestBody, errorEmpty] = validateEmptyFields( const [requestBody, errorEmpty] = validateEmptyFields(
request.body ?? {}, request.body ?? {},
["name", "privilegeId", "serviceKey", "type", "description", "value", "amount"], ["name", "privilegeId", "serviceKey", "type", "description", "value"],
false false
); );
if (errorEmpty) { if (errorEmpty) {
void reply.status(400); void reply.status(400);
return errorEmpty; return errorEmpty;
} }
const errorInvalid = validatePrivilege(requestBody); const errorInvalid = validatePrivilege(requestBody);
if (errorInvalid) { if (errorInvalid) {
void reply.status(400); void reply.status(400);
return errorInvalid; return errorInvalid;
} }
const privilege = await PrivilegeModel.findOne({ privilegeId: requestBody.privilegeId }); const privilege = await PrivilegeModel.findOne({ privilegeId: requestBody.privilegeId });
if (!privilege) { if (!privilege) {
void reply.status(404); void reply.status(404);
return new Error("privilege not found"); return new Error("privilege not found");
} }
await privilege.replaceOne({ await privilege.replaceOne({
name: requestBody.name, name: requestBody.name,
privilegeId: requestBody.privilegeId, privilegeId: requestBody.privilegeId,
serviceKey: requestBody.serviceKey, serviceKey: requestBody.serviceKey,
description: requestBody.description, description: requestBody.description,
type: requestBody.type, type: requestBody.type,
value: requestBody.value, value: requestBody.value,
price: requestBody.price, price: requestBody.price,
updatedAt: new Date(), updatedAt: new Date(),
}); });
return privilege; return privilege;
}; };
export const removePrivilege = async (request: RemovePrivilegeRequest, reply: FastifyReply) => { export const removePrivilege = async (request: RemovePrivilegeRequest, reply: FastifyReply) => {
const [{ privilegeId }, error] = validateEmptyFields(request.body ?? {}, ["privilegeId"]); const [{ privilegeId }, error] = validateEmptyFields(request.body ?? {}, ["privilegeId"]);
if (error) { if (error) {
void reply.status(400); void reply.status(400);
return error; return error;
} }
if (!Types.ObjectId.isValid(privilegeId)) { if (!Types.ObjectId.isValid(privilegeId)) {
void reply.status(400); void reply.status(400);
return new Error("invalid id"); return new Error("invalid id");
} }
const privilege = await PrivilegeModel.findOneAndUpdate( const privilege = await PrivilegeModel.findOneAndUpdate(
{ privilegeId }, { privilegeId },
{ $set: { isDeleted: true, deletedAt: new Date() } } { $set: { isDeleted: true, deletedAt: new Date() } }
); );
if (!privilege) { if (!privilege) {
void reply.status(404); void reply.status(404);
return new Error("privilege not found"); return new Error("privilege not found");
} }
return privilege; return privilege;
}; };
export const replacePrivilegies = async (request: RegisterPrivilegiesRequest, reply: FastifyReply) => { export const replacePrivilegies = async (request: RegisterPrivilegiesRequest, reply: FastifyReply) => {
const [requestBody, errorEmpty] = validateEmptyFields(request.body ?? {}, ["privilegies"]); const [requestBody, errorEmpty] = validateEmptyFields(request.body ?? {}, ["privilegies"]);
if (errorEmpty) { if (errorEmpty) {
void reply.status(400); void reply.status(400);
return errorEmpty; return errorEmpty;
} }
if (!requestBody.privilegies.length) { if (!requestBody.privilegies.length) {
void reply.status(400); void reply.status(400);
return new Error("empty privilege array"); return new Error("empty privilege array");
} }
for (const rawPrivilege of requestBody.privilegies) { for (const rawPrivilege of requestBody.privilegies) {
const errorInvalid = validatePrivilege(rawPrivilege); const errorInvalid = validatePrivilege(rawPrivilege);
if (errorInvalid) { if (errorInvalid) {
void reply.status(400); void reply.status(400);
return errorInvalid; return errorInvalid;
} }
} }
const replacePrivilegeRequests = requestBody.privilegies.map(async (privilege) => { const replacePrivilegeRequests = requestBody.privilegies.map(async (privilege) => {
await PrivilegeModel.replaceOne( await PrivilegeModel.replaceOne(
{ privilegeId: privilege.privilegeId }, { privilegeId: privilege.privilegeId },
{ {
name: privilege.name, name: privilege.name,
privilegeId: privilege.privilegeId, privilegeId: privilege.privilegeId,
serviceKey: privilege.serviceKey, serviceKey: privilege.serviceKey,
description: privilege.description, description: privilege.description,
type: privilege.type, type: privilege.type,
value: privilege.value, value: privilege.value,
price: privilege.price, price: privilege.price,
updatedAt: new Date(), updatedAt: new Date(),
isDeleted: false, isDeleted: false,
} }
).lean(); ).lean();
return privilege; return privilege;
}); });
return Promise.all(replacePrivilegeRequests); return Promise.all(replacePrivilegeRequests);
}; };
export const restorePrivilege = async (request: RemovePrivilegeRequest, reply: FastifyReply) => { export const restorePrivilege = async (request: RemovePrivilegeRequest, reply: FastifyReply) => {
const [{ privilegeId }, error] = validateEmptyFields(request.body ?? {}, ["privilegeId"]); const [{ privilegeId }, error] = validateEmptyFields(request.body ?? {}, ["privilegeId"]);
if (error) { if (error) {
void reply.status(400); void reply.status(400);
return error; return error;
} }
if (!Types.ObjectId.isValid(privilegeId)) { if (!Types.ObjectId.isValid(privilegeId)) {
void reply.status(400); void reply.status(400);
return new Error("invalid id"); return new Error("invalid id");
} }
const privilege = await PrivilegeModel.findOneAndUpdate({ privilegeId }, { $set: { isDeleted: false } }); const privilege = await PrivilegeModel.findOneAndUpdate({ privilegeId }, { $set: { isDeleted: false } });
if (!privilege) { if (!privilege) {
void reply.status(404); void reply.status(404);
return new Error("privilege not found"); return new Error("privilege not found");
} }
return privilege; return privilege;
}; };