Merge branch 'dev' into 'staging'
feat: pagination tariff See merge request pena-services/hub_admin_backend_service!37
This commit is contained in:
commit
6150933766
@ -6,7 +6,7 @@ import { PermissionModule } from "@/services/permission/permission.module";
|
||||
|
||||
import { getUser } from "@/clients/auth";
|
||||
import { validateEmptyFields } from "@/utils/validate-empty-fields";
|
||||
import { determinePaginationParameters } from "./helpers";
|
||||
import { determinePaginationParameters } from "@/utils/determine-pagination-parameters";
|
||||
|
||||
import type { FastifyReply, FastifyRequest } from "fastify";
|
||||
import type { Account } from "@/types/models/account.type";
|
||||
@ -27,21 +27,21 @@ export const getAccounts = async (request: GetAccountsRequest): Promise<GetAccou
|
||||
|
||||
export const createAccount = async (request: FastifyRequest, reply: FastifyReply) => {
|
||||
if (!Types.ObjectId.isValid(request.user.id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("invalid user id");
|
||||
}
|
||||
|
||||
const account = await AccountModel.findOne({ userId: request.user.id }).lean();
|
||||
|
||||
if (account) {
|
||||
reply.status(409);
|
||||
void reply.status(409);
|
||||
return new Error("account already exist");
|
||||
}
|
||||
|
||||
const user = await getUser({ id: request.user.id });
|
||||
|
||||
if (!user) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("user not found");
|
||||
}
|
||||
|
||||
@ -56,19 +56,19 @@ export const getAccountByID = async (request: GetAccountRequest, reply: FastifyR
|
||||
const [getAccountRequestParams, error] = validateEmptyFields(request.params || {}, ["userId"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(getAccountRequestParams.userId)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid user id");
|
||||
}
|
||||
|
||||
const account = await AccountModel.findOne({ userId: getAccountRequestParams.userId }).lean();
|
||||
|
||||
if (!account) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("account not found");
|
||||
}
|
||||
|
||||
@ -77,14 +77,14 @@ export const getAccountByID = async (request: GetAccountRequest, reply: FastifyR
|
||||
|
||||
export const getAccount = async (request: GetAccountRequest, reply: FastifyReply): Promise<Account> => {
|
||||
if (!Types.ObjectId.isValid(request.user.id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid user id");
|
||||
}
|
||||
|
||||
const account = await AccountModel.findOne({ userId: request.user.id }).lean();
|
||||
|
||||
if (!account) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("account not found");
|
||||
}
|
||||
|
||||
@ -95,14 +95,14 @@ export const setAccountRole = async (request: SetAccountRoleRequest, reply: Fast
|
||||
const [setAccountRoleBody, error] = validateEmptyFields(request.body || {}, ["userId", "role"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
const role = await RoleModel.findOne({ name: setAccountRoleBody.role }).lean();
|
||||
|
||||
if (!role) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("role not found");
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ export const setAccountRole = async (request: SetAccountRoleRequest, reply: Fast
|
||||
);
|
||||
|
||||
if (!account) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("account not found");
|
||||
}
|
||||
|
||||
@ -121,7 +121,7 @@ export const setAccountRole = async (request: SetAccountRoleRequest, reply: Fast
|
||||
|
||||
export const removeAccount = async (request: FastifyRequest, reply: FastifyReply): Promise<Account> => {
|
||||
if (!Types.ObjectId.isValid(request.user.id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid user id");
|
||||
}
|
||||
|
||||
@ -131,7 +131,7 @@ export const removeAccount = async (request: FastifyRequest, reply: FastifyReply
|
||||
).lean();
|
||||
|
||||
if (!account) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("account not found");
|
||||
}
|
||||
|
||||
@ -142,19 +142,19 @@ export const removeAccountById = async (request: GetAccountRequest, reply: Fasti
|
||||
const [{ userId }, error] = validateEmptyFields(request.params || {}, ["userId"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(userId)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid user id");
|
||||
}
|
||||
|
||||
const account = await AccountModel.findOne({ userId: request.user.id });
|
||||
|
||||
if (!account) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("account not found");
|
||||
}
|
||||
|
||||
@ -171,14 +171,14 @@ export const removeAccountById = async (request: GetAccountRequest, reply: Fasti
|
||||
|
||||
export const deleteAccount = async (request: FastifyRequest, reply: FastifyReply): Promise<Account> => {
|
||||
if (!Types.ObjectId.isValid(request.user.id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid user id");
|
||||
}
|
||||
|
||||
const account = await AccountModel.findByIdAndDelete({ userId: request.user.id }).lean();
|
||||
|
||||
if (!account) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("account not found");
|
||||
}
|
||||
|
||||
@ -189,19 +189,19 @@ export const deleteAccountById = async (request: GetAccountRequest, reply: Fasti
|
||||
const [{ userId }, error] = validateEmptyFields(request.params || {}, ["userId"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(userId)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid user id");
|
||||
}
|
||||
|
||||
const account = await AccountModel.findByIdAndDelete({ userId: request.user.id }).lean();
|
||||
|
||||
if (!account) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("account not found");
|
||||
}
|
||||
|
||||
@ -216,7 +216,7 @@ export const deleteAccountById = async (request: GetAccountRequest, reply: Fasti
|
||||
|
||||
export const restoreAccount = async (request: FastifyRequest, reply: FastifyReply): Promise<Account> => {
|
||||
if (!Types.ObjectId.isValid(request.user.id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid user id");
|
||||
}
|
||||
|
||||
@ -226,7 +226,7 @@ export const restoreAccount = async (request: FastifyRequest, reply: FastifyRepl
|
||||
).lean();
|
||||
|
||||
if (!account) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("account not found");
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
import type { FastifyRequest } from "fastify";
|
||||
import type { Account } from "@/types/models/account.type";
|
||||
import type { PaginationParams } from "@/types/messages/pagination.type";
|
||||
|
||||
export type GetAccountRequest = FastifyRequest<{
|
||||
Params?: {
|
||||
@ -22,8 +23,3 @@ export type GetAccountsResponse = {
|
||||
accounts: Account[];
|
||||
totalPages: number;
|
||||
};
|
||||
|
||||
export type PaginationParams = {
|
||||
page?: number;
|
||||
limit?: number;
|
||||
};
|
||||
|
@ -1,20 +1,17 @@
|
||||
import type { FastifyRequest, FastifyReply, HookHandlerDoneFunction as Done } from "fastify";
|
||||
|
||||
export const verifyUser = async (request: FastifyRequest, reply: FastifyReply, done: Done) => {
|
||||
console.info("---------------------------verifyUser------------------------------");
|
||||
|
||||
try {
|
||||
const { id } = await request.jwtVerify<{ id?: string }>();
|
||||
|
||||
if (!id) {
|
||||
reply.status(401);
|
||||
void reply.status(401);
|
||||
return reply.send("user id is empty");
|
||||
}
|
||||
|
||||
request.user = { id };
|
||||
} catch (nativeError) {
|
||||
reply.status(401);
|
||||
console.info("---------------------------verifyUser error------------------------------", nativeError);
|
||||
void reply.status(401);
|
||||
return reply.send(nativeError);
|
||||
}
|
||||
|
||||
|
@ -18,12 +18,12 @@ export const getPermissionById = async (
|
||||
const [{ permissionId }, validateParamsError] = validateEmptyFields(request.params || {}, ["permissionId"]);
|
||||
|
||||
if (validateParamsError) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw validateParamsError;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(permissionId)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid permission id");
|
||||
}
|
||||
|
||||
@ -33,7 +33,7 @@ export const getPermissionById = async (
|
||||
});
|
||||
|
||||
if (!permission) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("permission not found");
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@ export const createPermission = async (request: CreatePermissionRequest, reply:
|
||||
const [permission, error] = validateEmptyFields(request.body || {}, ["name", "description"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw error;
|
||||
}
|
||||
|
||||
@ -61,17 +61,17 @@ export const updatePermission = async (
|
||||
const [{ permissionId }, validateParamsError] = validateEmptyFields(request.params || {}, ["permissionId"]);
|
||||
|
||||
if (validateBodyError) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw validateBodyError;
|
||||
}
|
||||
|
||||
if (validateParamsError) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw validateParamsError;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(permissionId)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid permission id");
|
||||
}
|
||||
|
||||
@ -83,7 +83,7 @@ export const updatePermission = async (
|
||||
});
|
||||
|
||||
if (!findedPermission) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("permission not found");
|
||||
}
|
||||
|
||||
@ -97,12 +97,12 @@ export const removePermission = async (
|
||||
const [{ permissionId }, validateParamsError] = validateEmptyFields(request.params || {}, ["permissionId"]);
|
||||
|
||||
if (validateParamsError) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw validateParamsError;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(permissionId)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid permission id");
|
||||
}
|
||||
|
||||
@ -120,7 +120,7 @@ export const removePermission = async (
|
||||
);
|
||||
|
||||
if (!permission) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("permission not found");
|
||||
}
|
||||
|
||||
@ -134,12 +134,12 @@ export const restorePermission = async (
|
||||
const [{ permissionId }, validateParamsError] = validateEmptyFields(request.params || {}, ["permissionId"]);
|
||||
|
||||
if (validateParamsError) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw validateParamsError;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(permissionId)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
throw new Error("invalid permission id");
|
||||
}
|
||||
|
||||
@ -158,7 +158,7 @@ export const restorePermission = async (
|
||||
);
|
||||
|
||||
if (!permission) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
throw new Error("permission not found");
|
||||
}
|
||||
|
||||
|
@ -18,12 +18,12 @@ export const registerPrivilegies = async (request: RegisterPrivilegiesRequest, r
|
||||
const [requestBody, errorEmpty] = validateEmptyFields(request.body ?? {}, ["privilegies"]);
|
||||
|
||||
if (errorEmpty) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return errorEmpty;
|
||||
}
|
||||
|
||||
if (!requestBody.privilegies.length) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("empty privilege array");
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@ export const registerPrivilegies = async (request: RegisterPrivilegiesRequest, r
|
||||
const errorInvalid = validatePrivilege(rawPrivilege);
|
||||
|
||||
if (errorInvalid) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return errorInvalid;
|
||||
}
|
||||
}
|
||||
@ -69,21 +69,21 @@ export const registerPrivilege = async (request: RegisterPrivilegeRequest, reply
|
||||
);
|
||||
|
||||
if (errorEmpty) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return errorEmpty;
|
||||
}
|
||||
|
||||
const errorInvalid = validatePrivilege(requestBody);
|
||||
|
||||
if (errorInvalid) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return errorInvalid;
|
||||
}
|
||||
|
||||
const privilege = await PrivilegeModel.findOne({ privilegeId: requestBody.privilegeId }).lean();
|
||||
|
||||
if (privilege) {
|
||||
reply.status(409);
|
||||
void reply.status(409);
|
||||
return new Error("privilege already exist");
|
||||
}
|
||||
|
||||
@ -116,7 +116,7 @@ export const getServicePrivilegies = async (request: GetServicePrivilegiesReques
|
||||
const [requestParams, error] = validateEmptyFields(request.params ?? {}, ["serviceKey"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
@ -127,19 +127,19 @@ export const getPrivilege = async (request: GetPrivilegeRequest, reply: FastifyR
|
||||
const [requestParams, error] = validateEmptyFields(request.params ?? {}, ["privilegeId"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(requestParams.privilegeId)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("invalid id");
|
||||
}
|
||||
|
||||
const privilege = await PrivilegeModel.findOne({ privilegeId: requestParams.privilegeId, isDeleted: false }).lean();
|
||||
|
||||
if (!privilege) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("privilege not found");
|
||||
}
|
||||
|
||||
@ -154,21 +154,21 @@ export const replacePrivilege = async (request: RegisterPrivilegeRequest, reply:
|
||||
);
|
||||
|
||||
if (errorEmpty) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return errorEmpty;
|
||||
}
|
||||
|
||||
const errorInvalid = validatePrivilege(requestBody);
|
||||
|
||||
if (errorInvalid) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return errorInvalid;
|
||||
}
|
||||
|
||||
const privilege = await PrivilegeModel.findOne({ privilegeId: requestBody.privilegeId });
|
||||
|
||||
if (!privilege) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("privilege not found");
|
||||
}
|
||||
|
||||
@ -190,12 +190,12 @@ export const removePrivilege = async (request: RemovePrivilegeRequest, reply: Fa
|
||||
const [{ privilegeId }, error] = validateEmptyFields(request.body ?? {}, ["privilegeId"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(privilegeId)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("invalid id");
|
||||
}
|
||||
|
||||
@ -205,7 +205,7 @@ export const removePrivilege = async (request: RemovePrivilegeRequest, reply: Fa
|
||||
);
|
||||
|
||||
if (!privilege) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("privilege not found");
|
||||
}
|
||||
|
||||
@ -216,12 +216,12 @@ export const replacePrivilegies = async (request: RegisterPrivilegiesRequest, re
|
||||
const [requestBody, errorEmpty] = validateEmptyFields(request.body ?? {}, ["privilegies"]);
|
||||
|
||||
if (errorEmpty) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return errorEmpty;
|
||||
}
|
||||
|
||||
if (!requestBody.privilegies.length) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("empty privilege array");
|
||||
}
|
||||
|
||||
@ -229,7 +229,7 @@ export const replacePrivilegies = async (request: RegisterPrivilegiesRequest, re
|
||||
const errorInvalid = validatePrivilege(rawPrivilege);
|
||||
|
||||
if (errorInvalid) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return errorInvalid;
|
||||
}
|
||||
}
|
||||
@ -260,19 +260,19 @@ export const restorePrivilege = async (request: RemovePrivilegeRequest, reply: F
|
||||
const [{ privilegeId }, error] = validateEmptyFields(request.body ?? {}, ["privilegeId"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(privilegeId)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("invalid id");
|
||||
}
|
||||
|
||||
const privilege = await PrivilegeModel.findOneAndUpdate({ privilegeId }, { $set: { isDeleted: false } });
|
||||
|
||||
if (!privilege) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("privilege not found");
|
||||
}
|
||||
|
||||
|
@ -14,14 +14,14 @@ export const createRole = async (request: CreateRoleRequest, reply: FastifyReply
|
||||
const [createRoleRequest, error] = validateEmptyFields(request.body, ["name", "permissions"]);
|
||||
|
||||
if (error || !createRoleRequest) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
const isRoleExist = await RoleModel.exists({ name: createRoleRequest.name }).lean();
|
||||
|
||||
if (isRoleExist) {
|
||||
reply.status(409);
|
||||
void reply.status(409);
|
||||
return new Error("role already exist");
|
||||
}
|
||||
|
||||
@ -34,14 +34,14 @@ export const deleteRole = async (request: RemoveRoleRequest, reply: FastifyReply
|
||||
const { id } = request.body || {};
|
||||
|
||||
if (!id || !Types.ObjectId.isValid(id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("wrong id");
|
||||
}
|
||||
|
||||
const deletedRole = await RoleModel.findByIdAndDelete(id);
|
||||
|
||||
if (!deletedRole) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("role not found");
|
||||
}
|
||||
|
||||
@ -52,18 +52,19 @@ export const removeRole = async (request: RemoveRoleRequest, reply: FastifyReply
|
||||
const { id } = request.body || {};
|
||||
|
||||
if (!id || !Types.ObjectId.isValid(id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("wrong id");
|
||||
}
|
||||
|
||||
const role = await RoleModel.findById(id);
|
||||
|
||||
if (!role) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("role by id not found");
|
||||
}
|
||||
|
||||
if (role.isDeleted) {
|
||||
reply.status(409);
|
||||
void reply.status(409);
|
||||
return new Error("role already deleted");
|
||||
}
|
||||
|
||||
@ -76,7 +77,7 @@ export const getRole = async (request: GetRoleRequest, reply: FastifyReply) => {
|
||||
const { query } = request.params || {};
|
||||
|
||||
if (!query) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("query is empty");
|
||||
}
|
||||
|
||||
@ -84,7 +85,7 @@ export const getRole = async (request: GetRoleRequest, reply: FastifyReply) => {
|
||||
const role = await RoleModel.findOne({ _id: new Types.ObjectId(query), isDeleted: false }).lean();
|
||||
|
||||
if (!role) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("role not found");
|
||||
}
|
||||
|
||||
@ -94,7 +95,7 @@ export const getRole = async (request: GetRoleRequest, reply: FastifyReply) => {
|
||||
const role = await RoleModel.findOne({ name: query, isDeleted: false }).lean();
|
||||
|
||||
if (!role) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("role not found");
|
||||
}
|
||||
|
||||
@ -106,19 +107,20 @@ export const replaceRole = async (request: UpdateRoleRequest, reply: FastifyRepl
|
||||
const { query } = request.params || {};
|
||||
|
||||
if (error || !replaceRoleRequest) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (!query) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("either name or id must be filled");
|
||||
}
|
||||
|
||||
if (Types.ObjectId.isValid(query)) {
|
||||
const role = RoleModel.findById(query);
|
||||
const role = await RoleModel.findById(query);
|
||||
|
||||
if (!role) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("role by id not found");
|
||||
}
|
||||
|
||||
@ -134,7 +136,7 @@ export const replaceRole = async (request: UpdateRoleRequest, reply: FastifyRepl
|
||||
const role = await RoleModel.findOne({ name: query });
|
||||
|
||||
if (!role) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("role not found");
|
||||
}
|
||||
|
||||
@ -151,11 +153,12 @@ export const updateRole = async (request: UpdateRoleRequest, reply: FastifyReply
|
||||
const { query } = request.params;
|
||||
|
||||
if (!query) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("query is empty");
|
||||
}
|
||||
|
||||
if (!request.body?.name && !request.body?.permissions) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("either name or permissions must be filled");
|
||||
}
|
||||
|
||||
@ -163,7 +166,7 @@ export const updateRole = async (request: UpdateRoleRequest, reply: FastifyReply
|
||||
const role = await RoleModel.findById(query);
|
||||
|
||||
if (!role) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("role by id not found");
|
||||
}
|
||||
|
||||
@ -181,7 +184,7 @@ export const updateRole = async (request: UpdateRoleRequest, reply: FastifyReply
|
||||
const role = await RoleModel.findOne({ name: query });
|
||||
|
||||
if (!role) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("role not found");
|
||||
}
|
||||
|
||||
@ -200,18 +203,19 @@ export const restoreRole = async (request: RemoveRoleRequest, reply: FastifyRepl
|
||||
const { id } = request.body || {};
|
||||
|
||||
if (!id || !Types.ObjectId.isValid(id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("wrong id");
|
||||
}
|
||||
|
||||
const role = await RoleModel.findById(id);
|
||||
|
||||
if (!role) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("role by id not found");
|
||||
}
|
||||
|
||||
if (!role.isDeleted) {
|
||||
reply.status(409);
|
||||
void reply.status(409);
|
||||
return new Error("role not removed");
|
||||
}
|
||||
|
||||
|
@ -4,33 +4,51 @@ 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 } from "./types";
|
||||
import type {
|
||||
CreateTariffRequest,
|
||||
GetTariffRequest,
|
||||
ReplaceTariffRequest,
|
||||
RemoveTariffRequest,
|
||||
GetTariffsResponse,
|
||||
GetTariffsRequest,
|
||||
} from "./types";
|
||||
|
||||
export const getTariffs = async () => TariffModel.find({}).lean();
|
||||
export const getTariffs = async (request: GetTariffsRequest): Promise<GetTariffsResponse> => {
|
||||
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) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(requestParams.id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("invalid id");
|
||||
}
|
||||
|
||||
const tariff = await TariffModel.findById(requestParams.id).lean();
|
||||
|
||||
if (!tariff) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("tariff not found");
|
||||
}
|
||||
|
||||
@ -41,13 +59,13 @@ export const createTariff = async (request: CreateTariffRequest, reply: FastifyR
|
||||
const [requestBody, error] = validateTariff(request.body);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
for (const privilege of requestBody.privilegies) {
|
||||
if (!Types.ObjectId.isValid(privilege.privilegeId)) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error(`privilege id <${privilege.privilegeId}> invalid`);
|
||||
}
|
||||
}
|
||||
@ -82,25 +100,25 @@ export const replaceTariff = async (request: ReplaceTariffRequest, reply: Fastif
|
||||
const [requestBody, error] = validateTariff(request.body ?? {});
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(request.params?.id || "")) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("invalid id");
|
||||
}
|
||||
|
||||
const tariff = await TariffModel.findById(request.params?.id);
|
||||
|
||||
if (!tariff) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("tariff not found");
|
||||
}
|
||||
|
||||
for (const privilege of requestBody.privilegies) {
|
||||
if (!Types.ObjectId.isValid(privilege.privilegeId)) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error(`privilege id <${privilege.privilegeId}> invalid`);
|
||||
}
|
||||
}
|
||||
@ -133,12 +151,12 @@ export const removeTariff = async (request: RemoveTariffRequest, reply: FastifyR
|
||||
const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("invalid id");
|
||||
}
|
||||
|
||||
@ -147,7 +165,7 @@ export const removeTariff = async (request: RemoveTariffRequest, reply: FastifyR
|
||||
}).lean();
|
||||
|
||||
if (!tariff) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("tariff not found");
|
||||
}
|
||||
|
||||
@ -158,19 +176,19 @@ export const deleteTariff = async (request: RemoveTariffRequest, reply: FastifyR
|
||||
const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("invalid id");
|
||||
}
|
||||
|
||||
const tariff = await TariffModel.findByIdAndDelete(id).lean();
|
||||
|
||||
if (!tariff) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("tariff not found");
|
||||
}
|
||||
|
||||
@ -181,19 +199,19 @@ export const restoreTariff = async (request: RemoveTariffRequest, reply: Fastify
|
||||
const [{ id }, error] = validateEmptyFields(request.body ?? {}, ["id"]);
|
||||
|
||||
if (error) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (!Types.ObjectId.isValid(id)) {
|
||||
reply.status(400);
|
||||
void reply.status(400);
|
||||
return new Error("invalid id");
|
||||
}
|
||||
|
||||
const tariff = await TariffModel.findByIdAndUpdate(id, { $set: { isDeleted: false } }).lean();
|
||||
|
||||
if (!tariff) {
|
||||
reply.status(404);
|
||||
void reply.status(404);
|
||||
return new Error("tariff not found");
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
import type { FastifyRequest } from "fastify";
|
||||
import type { TariffMessage } from "@/types/messages/tariff-message.type";
|
||||
import type { Tariff } from "@/types/models/tariff.type";
|
||||
import type { PaginationParams } from "@/types/messages/pagination.type";
|
||||
|
||||
export type GetTariffRequest = FastifyRequest<{
|
||||
Params?: {
|
||||
@ -21,3 +23,12 @@ export type ReplaceTariffRequest = FastifyRequest<{
|
||||
Body?: TariffMessage;
|
||||
Params?: { id?: string };
|
||||
}>;
|
||||
|
||||
export type GetTariffsRequest = FastifyRequest<{
|
||||
Querystring?: PaginationParams;
|
||||
}>;
|
||||
|
||||
export type GetTariffsResponse = {
|
||||
tariffs: Tariff[];
|
||||
totalPages: number;
|
||||
};
|
||||
|
@ -82,3 +82,65 @@ export const tariff: SwaggerMessage = {
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export const tariffs: SwaggerMessage = {
|
||||
description: "Список тарифов",
|
||||
type: "object",
|
||||
required: ["tariffs", "totalPages"],
|
||||
properties: {
|
||||
tariffs: {
|
||||
type: "array",
|
||||
description: "Массив тарифов",
|
||||
items: tariff,
|
||||
},
|
||||
totalPages: { type: "number" },
|
||||
},
|
||||
examples: [
|
||||
{
|
||||
totalPages: 10,
|
||||
tariffs: [
|
||||
{
|
||||
name: "Использование сервисов",
|
||||
price: 14000,
|
||||
isCustom: false,
|
||||
privilegies: [
|
||||
{
|
||||
name: "name",
|
||||
privilegeId: "507f1f77bcf86cd799439011",
|
||||
serviceKey: "docx-templater-service",
|
||||
description: "Количество попыток использования",
|
||||
type: "count",
|
||||
value: "200",
|
||||
price: 12300,
|
||||
amount: 300,
|
||||
},
|
||||
],
|
||||
isDeleted: false,
|
||||
createdAt: "2017-07-21T17:32:28Z",
|
||||
updatedAt: "2017-07-21T17:32:28Z",
|
||||
},
|
||||
{
|
||||
name: "user",
|
||||
price: 14000,
|
||||
isCustom: false,
|
||||
privilegies: [
|
||||
{
|
||||
name: "507f1f77bcf86cd799439011",
|
||||
privilegeId: "507f1f77bcf86cd799439011",
|
||||
serviceKey: "docx-templater-service",
|
||||
description: "Количество попыток использования",
|
||||
type: "count",
|
||||
value: "200",
|
||||
price: 12300,
|
||||
amount: 100,
|
||||
},
|
||||
],
|
||||
isDeleted: true,
|
||||
createdAt: "2017-07-21T17:32:28Z",
|
||||
updatedAt: "2019-04-14T15:32:15Z",
|
||||
deletedAt: "2021-08-17T13:23:44Z",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
4
src/types/messages/pagination.type.ts
Normal file
4
src/types/messages/pagination.type.ts
Normal file
@ -0,0 +1,4 @@
|
||||
export type PaginationParams = {
|
||||
page?: number;
|
||||
limit?: number;
|
||||
};
|
@ -1,6 +1,6 @@
|
||||
import { determinePaginationParameters } from "./helpers";
|
||||
import { determinePaginationParameters } from "./determine-pagination-parameters";
|
||||
|
||||
import type { PaginationParams } from "./types";
|
||||
import type { PaginationParams } from "@/types/messages/pagination.type";
|
||||
|
||||
describe("determinePaginationParameters", () => {
|
||||
const testCases: Array<{
|
@ -1,5 +1,5 @@
|
||||
import type { ObjectWithRequiredFields } from "@/types/object-with-required-fields";
|
||||
import type { PaginationParams } from "./types";
|
||||
import type { PaginationParams } from "@/types/messages/pagination.type";
|
||||
|
||||
const DEFAULT_PAGE = 1;
|
||||
const DEFAULT_LIMIT = 100;
|
Loading…
Reference in New Issue
Block a user