mirror of
https://github.com/fosrl/pangolin.git
synced 2025-06-24 06:08:48 +02:00
Format files and fix http response
This commit is contained in:
parent
797f72e1d0
commit
8213036729
49 changed files with 2428 additions and 2404 deletions
|
@ -1,3 +1,6 @@
|
||||||
{
|
{
|
||||||
"extends": ["next/core-web-vitals", "next/typescript"]
|
"extends": [
|
||||||
|
"next/core-web-vitals",
|
||||||
|
"next/typescript"
|
||||||
|
]
|
||||||
}
|
}
|
|
@ -5,39 +5,33 @@ import { and, eq } from 'drizzle-orm';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
|
|
||||||
export const ActionsEnum = {
|
export enum ActionsEnum {
|
||||||
|
createOrg = "createOrg",
|
||||||
createOrg: 1,
|
deleteOrg = "deleteOrg",
|
||||||
deleteOrg: 2,
|
getOrg = "getOrg",
|
||||||
getOrg: 3,
|
listOrgs = "listOrgs",
|
||||||
listOrgs: 4,
|
updateOrg = "updateOrg",
|
||||||
updateOrg: 5,
|
createSite = "createSite",
|
||||||
|
deleteSite = "deleteSite",
|
||||||
createSite: 6,
|
getSite = "getSite",
|
||||||
deleteSite: 7,
|
listSites = "listSites",
|
||||||
getSite: 8,
|
updateSite = "updateSite",
|
||||||
listSites: 9,
|
createResource = "createResource",
|
||||||
updateSite: 10,
|
deleteResource = "deleteResource",
|
||||||
|
getResource = "getResource",
|
||||||
createResource: 11,
|
listResources = "listResources",
|
||||||
deleteResource: 12,
|
updateResource = "updateResource",
|
||||||
getResource: 13,
|
createTarget = "createTarget",
|
||||||
listResources: 14,
|
deleteTarget = "deleteTarget",
|
||||||
updateResource: 15,
|
getTarget = "getTarget",
|
||||||
|
listTargets = "listTargets",
|
||||||
createTarget: 16,
|
updateTarget = "updateTarget",
|
||||||
deleteTarget: 17,
|
getUser = "getUser",
|
||||||
getTarget: 18,
|
deleteUser = "deleteUser",
|
||||||
listTargets: 19,
|
listUsers = "listUsers"
|
||||||
updateTarget: 20,
|
|
||||||
|
|
||||||
getUser: 21,
|
|
||||||
deleteUser: 22,
|
|
||||||
listUsers: 23
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function checkUserActionPermission(actionId: number, req: Request): Promise<boolean> {
|
export async function checkUserActionPermission(actionId: string, req: Request): Promise<boolean> {
|
||||||
const userId = req.user?.id;
|
const userId = req.user?.id;
|
||||||
|
|
||||||
if (!userId) {
|
if (!userId) {
|
||||||
|
|
|
@ -130,7 +130,7 @@ export const passwordResetTokens = sqliteTable("passwordResetTokens", {
|
||||||
});
|
});
|
||||||
|
|
||||||
export const actions = sqliteTable("actions", {
|
export const actions = sqliteTable("actions", {
|
||||||
actionId: integer("actionId").primaryKey({ autoIncrement: true }),
|
actionId: text("actionId").primaryKey(),
|
||||||
name: text("name").notNull(),
|
name: text("name").notNull(),
|
||||||
description: text("description"),
|
description: text("description"),
|
||||||
});
|
});
|
||||||
|
@ -146,7 +146,7 @@ export const roleActions = sqliteTable("roleActions", {
|
||||||
roleId: integer("roleId")
|
roleId: integer("roleId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => roles.roleId, { onDelete: "cascade" }),
|
.references(() => roles.roleId, { onDelete: "cascade" }),
|
||||||
actionId: integer("actionId")
|
actionId: text("actionId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => actions.actionId, { onDelete: "cascade" }),
|
.references(() => actions.actionId, { onDelete: "cascade" }),
|
||||||
orgId: integer("orgId")
|
orgId: integer("orgId")
|
||||||
|
@ -158,7 +158,7 @@ export const userActions = sqliteTable("userActions", {
|
||||||
userId: text("userId")
|
userId: text("userId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => users.id, { onDelete: "cascade" }),
|
.references(() => users.id, { onDelete: "cascade" }),
|
||||||
actionId: integer("actionId")
|
actionId: text("actionId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => actions.actionId, { onDelete: "cascade" }),
|
.references(() => actions.actionId, { onDelete: "cascade" }),
|
||||||
orgId: integer("orgId")
|
orgId: integer("orgId")
|
||||||
|
|
|
@ -15,12 +15,12 @@ export async function getUserOrgs(req: Request, res: Response, next: NextFunctio
|
||||||
try {
|
try {
|
||||||
const userOrganizations = await db.select({
|
const userOrganizations = await db.select({
|
||||||
orgId: userOrgs.orgId,
|
orgId: userOrgs.orgId,
|
||||||
role: userOrgs.role,
|
roleId: userOrgs.roleId,
|
||||||
})
|
})
|
||||||
.from(userOrgs)
|
.from(userOrgs)
|
||||||
.where(eq(userOrgs.userId, userId));
|
.where(eq(userOrgs.userId, userId));
|
||||||
|
|
||||||
req.userOrgs = userOrganizations.map(org => org.orgId);
|
req.userOrgIds = userOrganizations.map(org => org.orgId);
|
||||||
// req.userOrgRoleIds = userOrganizations.reduce((acc, org) => {
|
// req.userOrgRoleIds = userOrganizations.reduce((acc, org) => {
|
||||||
// acc[org.orgId] = org.role;
|
// acc[org.orgId] = org.role;
|
||||||
// return acc;
|
// return acc;
|
||||||
|
|
|
@ -3,6 +3,8 @@ import { DrizzleError, eq } from 'drizzle-orm';
|
||||||
import { sites, resources, targets, exitNodes } from '@server/db/schema';
|
import { sites, resources, targets, exitNodes } from '@server/db/schema';
|
||||||
import db from '@server/db';
|
import db from '@server/db';
|
||||||
import logger from '@server/logger';
|
import logger from '@server/logger';
|
||||||
|
import HttpCode from '@server/types/HttpCode';
|
||||||
|
import createHttpError from 'http-errors';
|
||||||
|
|
||||||
export const getConfig = async (req: Request, res: Response, next: NextFunction): Promise<void> => {
|
export const getConfig = async (req: Request, res: Response, next: NextFunction): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
|
@ -55,11 +57,7 @@ export const getConfig = async (req: Request, res: Response, next: NextFunction)
|
||||||
res.json(config);
|
res.json(config);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('Error querying database:', error);
|
logger.error('Error querying database:', error);
|
||||||
if (error instanceof DrizzleError) {
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
res.status(500).json({ error: 'Database query error', message: error.message });
|
|
||||||
} else {
|
|
||||||
next(error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,9 @@ import { DrizzleError, eq } from 'drizzle-orm';
|
||||||
import { sites, resources, targets, exitNodes } from '@server/db/schema';
|
import { sites, resources, targets, exitNodes } from '@server/db/schema';
|
||||||
import db from '@server/db';
|
import db from '@server/db';
|
||||||
import logger from '@server/logger';
|
import logger from '@server/logger';
|
||||||
|
import createHttpError from 'http-errors';
|
||||||
|
import HttpCode from '@server/types/HttpCode';
|
||||||
|
import response from "@server/utils/response";
|
||||||
|
|
||||||
interface PeerBandwidth {
|
interface PeerBandwidth {
|
||||||
publicKey: string;
|
publicKey: string;
|
||||||
|
@ -10,7 +13,7 @@ interface PeerBandwidth {
|
||||||
bytesOut: number;
|
bytesOut: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const receiveBandwidth = async (req: Request, res: Response, next: NextFunction): Promise<void> => {
|
export const receiveBandwidth = async (req: Request, res: Response, next: NextFunction): Promise<any> => {
|
||||||
try {
|
try {
|
||||||
const bandwidthData: PeerBandwidth[] = req.body;
|
const bandwidthData: PeerBandwidth[] = req.body;
|
||||||
|
|
||||||
|
@ -43,10 +46,16 @@ export const receiveBandwidth = async (req: Request, res: Response, next: NextFu
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
res.status(200).json({ message: 'Bandwidth data updated successfully' });
|
return response(res, {
|
||||||
|
data: {},
|
||||||
|
success: true,
|
||||||
|
error: false,
|
||||||
|
message: "Organization retrieved successfully",
|
||||||
|
status: HttpCode.OK,
|
||||||
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('Error updating bandwidth data:', error);
|
logger.error('Error updating bandwidth data:', error);
|
||||||
res.status(500).json({ error: 'Internal server error' });
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const createOrgSchema = z.object({
|
const createOrgSchema = z.object({
|
||||||
name: z.string().min(1).max(255),
|
name: z.string().min(1).max(255),
|
||||||
|
@ -49,16 +50,15 @@ export async function createOrg(req: Request, res: Response, next: NextFunction)
|
||||||
domain,
|
domain,
|
||||||
}).returning();
|
}).returning();
|
||||||
|
|
||||||
return res.status(HttpCode.CREATED).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: newOrg[0],
|
data: newOrg[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Organization created successfully",
|
message: "Organization created successfully",
|
||||||
status: HttpCode.CREATED,
|
status: HttpCode.CREATED,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const deleteOrgSchema = z.object({
|
const deleteOrgSchema = z.object({
|
||||||
orgId: z.string().transform(Number).pipe(z.number().int().positive())
|
orgId: z.string().transform(Number).pipe(z.number().int().positive())
|
||||||
|
@ -45,16 +46,15 @@ export async function deleteOrg(req: Request, res: Response, next: NextFunction)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: null,
|
data: null,
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Organization deleted successfully",
|
message: "Organization deleted successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const getOrgSchema = z.object({
|
const getOrgSchema = z.object({
|
||||||
orgId: z.string().transform(Number).pipe(z.number().int().positive())
|
orgId: z.string().transform(Number).pipe(z.number().int().positive())
|
||||||
|
@ -46,16 +47,15 @@ export async function getOrg(req: Request, res: Response, next: NextFunction): P
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: org[0],
|
data: org[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Organization retrieved successfully",
|
message: "Organization retrieved successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { sql, inArray } from 'drizzle-orm';
|
import { sql, inArray } from 'drizzle-orm';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const listOrgsSchema = z.object({
|
const listOrgsSchema = z.object({
|
||||||
limit: z.string().optional().transform(Number).pipe(z.number().int().positive().default(10)),
|
limit: z.string().optional().transform(Number).pipe(z.number().int().positive().default(10)),
|
||||||
|
@ -72,8 +73,7 @@ export async function listOrgs(req: Request, res: Response, next: NextFunction):
|
||||||
// userRole: req.userOrgRoleIds[org.orgId],
|
// userRole: req.userOrgRoleIds[org.orgId],
|
||||||
// }));
|
// }));
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: {
|
data: {
|
||||||
organizations,
|
organizations,
|
||||||
pagination: {
|
pagination: {
|
||||||
|
@ -86,9 +86,9 @@ export async function listOrgs(req: Request, res: Response, next: NextFunction):
|
||||||
error: false,
|
error: false,
|
||||||
message: "Organizations retrieved successfully",
|
message: "Organizations retrieved successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const updateOrgParamsSchema = z.object({
|
const updateOrgParamsSchema = z.object({
|
||||||
orgId: z.string().transform(Number).pipe(z.number().int().positive())
|
orgId: z.string().transform(Number).pipe(z.number().int().positive())
|
||||||
|
@ -65,16 +66,15 @@ export async function updateOrg(req: Request, res: Response, next: NextFunction)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: updatedOrg[0],
|
data: updatedOrg[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Organization updated successfully",
|
message: "Organization updated successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const createResourceParamsSchema = z.object({
|
const createResourceParamsSchema = z.object({
|
||||||
siteId: z.number().int().positive(),
|
siteId: z.number().int().positive(),
|
||||||
|
@ -64,16 +65,15 @@ export async function createResource(req: Request, res: Response, next: NextFunc
|
||||||
subdomain,
|
subdomain,
|
||||||
}).returning();
|
}).returning();
|
||||||
|
|
||||||
return res.status(HttpCode.CREATED).send(
|
|
||||||
response(res, {
|
response(res, {
|
||||||
data: newResource[0],
|
data: newResource[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Resource created successfully",
|
message: "Resource created successfully",
|
||||||
status: HttpCode.CREATED,
|
status: HttpCode.CREATED,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
// Define Zod schema for request parameters validation
|
// Define Zod schema for request parameters validation
|
||||||
const deleteResourceSchema = z.object({
|
const deleteResourceSchema = z.object({
|
||||||
|
@ -48,16 +49,15 @@ export async function deleteResource(req: Request, res: Response, next: NextFunc
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: null,
|
data: null,
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Resource deleted successfully",
|
message: "Resource deleted successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
// Define Zod schema for request parameters validation
|
// Define Zod schema for request parameters validation
|
||||||
const getResourceSchema = z.object({
|
const getResourceSchema = z.object({
|
||||||
|
@ -49,16 +50,15 @@ export async function getResource(req: Request, res: Response, next: NextFunctio
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: resource[0],
|
data: resource[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Resource retrieved successfully",
|
message: "Resource retrieved successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { sql, eq, and, or, inArray } from 'drizzle-orm';
|
import { sql, eq, and, or, inArray } from 'drizzle-orm';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const listResourcesParamsSchema = z.object({
|
const listResourcesParamsSchema = z.object({
|
||||||
siteId: z.coerce.number().int().positive().optional(),
|
siteId: z.coerce.number().int().positive().optional(),
|
||||||
|
@ -92,8 +93,7 @@ export async function listResources(req: RequestWithOrgAndRole, res: Response, n
|
||||||
const totalCountResult = await countQuery;
|
const totalCountResult = await countQuery;
|
||||||
const totalCount = totalCountResult[0].count;
|
const totalCount = totalCountResult[0].count;
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: {
|
data: {
|
||||||
resources: resourcesList,
|
resources: resourcesList,
|
||||||
pagination: {
|
pagination: {
|
||||||
|
@ -106,9 +106,9 @@ export async function listResources(req: RequestWithOrgAndRole, res: Response, n
|
||||||
error: false,
|
error: false,
|
||||||
message: "Resources retrieved successfully",
|
message: "Resources retrieved successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
// Define Zod schema for request parameters validation
|
// Define Zod schema for request parameters validation
|
||||||
const updateResourceParamsSchema = z.object({
|
const updateResourceParamsSchema = z.object({
|
||||||
|
@ -69,16 +70,15 @@ export async function updateResource(req: Request, res: Response, next: NextFunc
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: updatedResource[0],
|
data: updatedResource[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Resource updated successfully",
|
message: "Resource updated successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import fetch from 'node-fetch';
|
import fetch from 'node-fetch';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const API_BASE_URL = "http://localhost:3000";
|
const API_BASE_URL = "http://localhost:3000";
|
||||||
|
|
||||||
|
@ -65,17 +66,16 @@ export async function createSite(req: Request, res: Response, next: NextFunction
|
||||||
subnet,
|
subnet,
|
||||||
}).returning();
|
}).returning();
|
||||||
|
|
||||||
return res.status(HttpCode.CREATED).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: newSite[0],
|
data: newSite[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Site created successfully",
|
message: "Site created successfully",
|
||||||
status: HttpCode.CREATED,
|
status: HttpCode.CREATED,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,10 +95,9 @@ async function addPeer(peer: string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const data: any = await response.json();
|
const data: any = await response.json();
|
||||||
console.log('Peer added successfully:', data.status);
|
logger.info('Peer added successfully:', data.status);
|
||||||
return data;
|
return data;
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error('Error adding peer:', error.message);
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
|
|
||||||
const API_BASE_URL = "http://localhost:3000";
|
const API_BASE_URL = "http://localhost:3000";
|
||||||
|
@ -51,17 +52,16 @@ export async function deleteSite(req: Request, res: Response, next: NextFunction
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: null,
|
data: null,
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Site deleted successfully",
|
message: "Site deleted successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
// Define Zod schema for request parameters validation
|
// Define Zod schema for request parameters validation
|
||||||
const getSiteSchema = z.object({
|
const getSiteSchema = z.object({
|
||||||
|
@ -49,16 +50,15 @@ export async function getSite(req: Request, res: Response, next: NextFunction):
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: site[0],
|
data: site[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Site retrieved successfully",
|
message: "Site retrieved successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { sql, eq, and, or, inArray } from 'drizzle-orm';
|
import { sql, eq, and, or, inArray } from 'drizzle-orm';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const listSitesParamsSchema = z.object({
|
const listSitesParamsSchema = z.object({
|
||||||
orgId: z.string().optional().transform(Number).pipe(z.number().int().positive()),
|
orgId: z.string().optional().transform(Number).pipe(z.number().int().positive()),
|
||||||
|
@ -85,8 +86,7 @@ export async function listSites(req: Request, res: Response, next: NextFunction)
|
||||||
const totalCountResult = await countQuery;
|
const totalCountResult = await countQuery;
|
||||||
const totalCount = totalCountResult[0].count;
|
const totalCount = totalCountResult[0].count;
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: {
|
data: {
|
||||||
sites: sitesList,
|
sites: sitesList,
|
||||||
pagination: {
|
pagination: {
|
||||||
|
@ -99,9 +99,9 @@ export async function listSites(req: Request, res: Response, next: NextFunction)
|
||||||
error: false,
|
error: false,
|
||||||
message: "Sites retrieved successfully",
|
message: "Sites retrieved successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
// Define Zod schema for request parameters validation
|
// Define Zod schema for request parameters validation
|
||||||
const updateSiteParamsSchema = z.object({
|
const updateSiteParamsSchema = z.object({
|
||||||
|
@ -74,16 +75,15 @@ export async function updateSite(req: Request, res: Response, next: NextFunction
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: updatedSite[0],
|
data: updatedSite[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Site updated successfully",
|
message: "Site updated successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const createTargetParamsSchema = z.object({
|
const createTargetParamsSchema = z.object({
|
||||||
resourceId: z.string().uuid(),
|
resourceId: z.string().uuid(),
|
||||||
|
@ -56,16 +57,15 @@ export async function createTarget(req: Request, res: Response, next: NextFuncti
|
||||||
...targetData
|
...targetData
|
||||||
}).returning();
|
}).returning();
|
||||||
|
|
||||||
return res.status(HttpCode.CREATED).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: newTarget[0],
|
data: newTarget[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Target created successfully",
|
message: "Target created successfully",
|
||||||
status: HttpCode.CREATED,
|
status: HttpCode.CREATED,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const deleteTargetSchema = z.object({
|
const deleteTargetSchema = z.object({
|
||||||
targetId: z.string().transform(Number).pipe(z.number().int().positive())
|
targetId: z.string().transform(Number).pipe(z.number().int().positive())
|
||||||
|
@ -45,16 +46,15 @@ export async function deleteTarget(req: Request, res: Response, next: NextFuncti
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: null,
|
data: null,
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Target deleted successfully",
|
message: "Target deleted successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const getTargetSchema = z.object({
|
const getTargetSchema = z.object({
|
||||||
targetId: z.string().transform(Number).pipe(z.number().int().positive())
|
targetId: z.string().transform(Number).pipe(z.number().int().positive())
|
||||||
|
@ -46,16 +47,15 @@ export async function getTarget(req: Request, res: Response, next: NextFunction)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: target[0],
|
data: target[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Target retrieved successfully",
|
message: "Target retrieved successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { sql, eq } from 'drizzle-orm';
|
import { sql, eq } from 'drizzle-orm';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const listTargetsParamsSchema = z.object({
|
const listTargetsParamsSchema = z.object({
|
||||||
resourceId: z.string().optional()
|
resourceId: z.string().optional()
|
||||||
|
@ -86,10 +87,9 @@ export async function listTargets(req: Request, res: Response, next: NextFunctio
|
||||||
error: false,
|
error: false,
|
||||||
message: "Targets retrieved successfully",
|
message: "Targets retrieved successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "sadfdf"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const updateTargetParamsSchema = z.object({
|
const updateTargetParamsSchema = z.object({
|
||||||
targetId: z.string().transform(Number).pipe(z.number().int().positive())
|
targetId: z.string().transform(Number).pipe(z.number().int().positive())
|
||||||
|
@ -67,16 +68,15 @@ export async function updateTarget(req: Request, res: Response, next: NextFuncti
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: updatedTarget[0],
|
data: updatedTarget[0],
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "Target updated successfully",
|
message: "Target updated successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const deleteUserSchema = z.object({
|
const deleteUserSchema = z.object({
|
||||||
userId: z.string().uuid()
|
userId: z.string().uuid()
|
||||||
|
@ -45,16 +46,15 @@ export async function deleteUser(req: Request, res: Response, next: NextFunction
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: null,
|
data: null,
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "User deleted successfully",
|
message: "User deleted successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import response from "@server/utils/response";
|
||||||
import HttpCode from '@server/types/HttpCode';
|
import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const getUserSchema = z.object({
|
const getUserSchema = z.object({
|
||||||
userId: z.string().uuid()
|
userId: z.string().uuid()
|
||||||
|
@ -49,16 +50,15 @@ export async function getUser(req: Request, res: Response, next: NextFunction):
|
||||||
// Remove passwordHash from the response
|
// Remove passwordHash from the response
|
||||||
const { passwordHash: _, ...userWithoutPassword } = user[0];
|
const { passwordHash: _, ...userWithoutPassword } = user[0];
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: userWithoutPassword,
|
data: userWithoutPassword,
|
||||||
success: true,
|
success: true,
|
||||||
error: false,
|
error: false,
|
||||||
message: "User retrieved successfully",
|
message: "User retrieved successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import HttpCode from '@server/types/HttpCode';
|
||||||
import createHttpError from 'http-errors';
|
import createHttpError from 'http-errors';
|
||||||
import { sql } from 'drizzle-orm';
|
import { sql } from 'drizzle-orm';
|
||||||
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
||||||
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const listUsersSchema = z.object({
|
const listUsersSchema = z.object({
|
||||||
limit: z.string().optional().transform(Number).pipe(z.number().int().positive().default(10)),
|
limit: z.string().optional().transform(Number).pipe(z.number().int().positive().default(10)),
|
||||||
|
@ -46,8 +47,7 @@ export async function listUsers(req: Request, res: Response, next: NextFunction)
|
||||||
// Remove passwordHash from each user object
|
// Remove passwordHash from each user object
|
||||||
const usersWithoutPassword = usersList.map(({ passwordHash, ...userWithoutPassword }) => userWithoutPassword);
|
const usersWithoutPassword = usersList.map(({ passwordHash, ...userWithoutPassword }) => userWithoutPassword);
|
||||||
|
|
||||||
return res.status(HttpCode.OK).send(
|
return response(res, {
|
||||||
response(res, {
|
|
||||||
data: {
|
data: {
|
||||||
users: usersWithoutPassword,
|
users: usersWithoutPassword,
|
||||||
pagination: {
|
pagination: {
|
||||||
|
@ -60,9 +60,9 @@ export async function listUsers(req: Request, res: Response, next: NextFunction)
|
||||||
error: false,
|
error: false,
|
||||||
message: "Users retrieved successfully",
|
message: "Users retrieved successfully",
|
||||||
status: HttpCode.OK,
|
status: HttpCode.OK,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
logger.error(error);
|
||||||
|
return next(createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred..."));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
@tailwind base;
|
@tailwind base;
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
|
||||||
@layer base {
|
@layer base {
|
||||||
:root {
|
:root {
|
||||||
--background: 37 100% 100%;
|
--background: 37 100% 100%;
|
||||||
|
@ -24,6 +25,7 @@
|
||||||
--ring: 37 8% 51%;
|
--ring: 37 8% 51%;
|
||||||
--radius: 0rem;
|
--radius: 0rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark {
|
.dark {
|
||||||
--background: 37 50% 10%;
|
--background: 37 50% 10%;
|
||||||
--foreground: 37 5% 100%;
|
--foreground: 37 5% 100%;
|
||||||
|
@ -47,10 +49,12 @@
|
||||||
--radius: 0rem;
|
--radius: 0rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@layer base {
|
@layer base {
|
||||||
* {
|
* {
|
||||||
@apply border-border;
|
@apply border-border;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@apply bg-background text-foreground;
|
@apply bg-background text-foreground;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"lib": ["dom", "dom.iterable", "esnext"],
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"dom.iterable",
|
||||||
|
"esnext"
|
||||||
|
],
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
|
@ -14,9 +18,15 @@
|
||||||
"incremental": true,
|
"incremental": true,
|
||||||
"baseUrl": "src",
|
"baseUrl": "src",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@server/*": ["../server/*"],
|
"@server/*": [
|
||||||
"@app/*": ["*"],
|
"../server/*"
|
||||||
"@/*": ["./*"]
|
],
|
||||||
|
"@app/*": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"@/*": [
|
||||||
|
"./*"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
{
|
{
|
||||||
|
@ -24,6 +34,13 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
"include": [
|
||||||
"exclude": ["node_modules"]
|
"next-env.d.ts",
|
||||||
|
"**/*.ts",
|
||||||
|
"**/*.tsx",
|
||||||
|
".next/types/**/*.ts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue