refactor(api): filter api endpoints cleaned up, also added logging here
This commit is contained in:
parent
22c35ae1da
commit
57311fab1e
@ -1,9 +1,14 @@
|
||||
import { Request, Response } from "express";
|
||||
import prisma, { Prisma } from "@server/prisma";
|
||||
import { datatableRequest } from "@server/controllers/guild/api/dt.module";
|
||||
import { getLogger } from "@server/../log";
|
||||
|
||||
const logger = getLogger(__filename);
|
||||
|
||||
// TODO: this doesn't account for guild ID or permissions
|
||||
export const get = async (request: Request, response: Response) => {
|
||||
logger.info(`Getting filter: ${request.query.id}`);
|
||||
|
||||
if (!request.query.id) {
|
||||
response.status(400).json({ error: "missing 'id' query" });
|
||||
return;
|
||||
@ -22,90 +27,83 @@ export const get = async (request: Request, response: Response) => {
|
||||
};
|
||||
|
||||
export const post = async (request: Request, response: Response) => {
|
||||
const guildId = request.params.guildId;
|
||||
const { name, value, matching_algorithm, is_insensitive, is_whitelist } = request.body;
|
||||
logger.info(`Posting filter: ${request.body.value} - ${request.params.guildId}`);
|
||||
|
||||
let filter;
|
||||
const body = {
|
||||
...request.body,
|
||||
is_insensitive: request.body.is_insensitive === "on",
|
||||
is_whitelist: request.body.is_whitelist === "on"
|
||||
};
|
||||
|
||||
const createInputData: Prisma.FilterUncheckedCreateInput = {
|
||||
guild_id: body.guild_id,
|
||||
name: body.name,
|
||||
value: body.value,
|
||||
matching_algorithm: body.matching_algorithm,
|
||||
is_insensitive: body.is_insensitive,
|
||||
is_whitelist: body.is_whitelist
|
||||
};
|
||||
|
||||
try {
|
||||
filter = await prisma.filter.create({
|
||||
data: {
|
||||
name: name,
|
||||
guild_id: guildId,
|
||||
value: value,
|
||||
matching_algorithm: matching_algorithm,
|
||||
is_insensitive: is_insensitive === "on",
|
||||
is_whitelist: is_whitelist === "on"
|
||||
}
|
||||
});
|
||||
const createResponse = await prisma.filter.create({ data: createInputData });
|
||||
response.status(201).json(createResponse);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
const isPrismaError = error instanceof Prisma.PrismaClientKnownRequestError;
|
||||
response.status(500).json({ error: isPrismaError ? error.message : error });
|
||||
}
|
||||
catch (error) {
|
||||
console.error(error);
|
||||
if (error instanceof Prisma.PrismaClientKnownRequestError) {
|
||||
response.status(500).json({ error: error.message });
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
response.status(201).json(filter);
|
||||
};
|
||||
|
||||
export const patch = async (request: Request, response: Response) => {
|
||||
const guildId = request.params.guildId;
|
||||
const { id, name, value, matching_algorithm, is_insensitive, is_whitelist } = request.body;
|
||||
logger.info(`Patching filter: ${request.body.id} - ${request.params.guild_id}`);
|
||||
|
||||
let filter;
|
||||
const body = {
|
||||
...request.body,
|
||||
is_insensitive: request.body.is_insensitive === "on",
|
||||
is_whitelist: request.body.is_whitelist === "on"
|
||||
};
|
||||
|
||||
const updateInputData: Prisma.FilterUncheckedUpdateInput = {
|
||||
id: Number(body.id),
|
||||
guild_id: body.guild_id,
|
||||
name: body.name,
|
||||
value: body.value,
|
||||
matching_algorithm: body.matching_algorithm,
|
||||
is_insensitive: body.is_insensitive,
|
||||
is_whitelist: body.is_whitelist
|
||||
};
|
||||
|
||||
try {
|
||||
filter = await prisma.filter.update({
|
||||
where: { id: Number(id) },
|
||||
data: {
|
||||
name: name,
|
||||
guild_id: guildId,
|
||||
value: value,
|
||||
matching_algorithm: matching_algorithm,
|
||||
is_insensitive: is_insensitive === "on",
|
||||
is_whitelist: is_whitelist === "on"
|
||||
}
|
||||
});
|
||||
const updateArgs = { where: { id: Number(body.id) }, data: updateInputData };
|
||||
const updateResponse = await prisma.filter.update(updateArgs);
|
||||
response.status(200).json(updateResponse);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
const isPrismaError = error instanceof Prisma.PrismaClientKnownRequestError;
|
||||
response.status(500).json({ error: isPrismaError ? error.message : error });
|
||||
}
|
||||
catch (error) {
|
||||
console.error(error);
|
||||
if (error instanceof Prisma.PrismaClientKnownRequestError) {
|
||||
response.status(500).json({ error: error.message });
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
response.status(201).json(filter);
|
||||
};
|
||||
}
|
||||
|
||||
export const del = async (request: Request, response: Response) => {
|
||||
let { ids } = request.body;
|
||||
const guildId = request.params.guildId;
|
||||
logger.info(`Deleting filter(s): ${request.body.ids} - ${request.params.guildId}`);
|
||||
|
||||
if (!ids || !Array.isArray(ids)) {
|
||||
response.status(400).json({ error: "invalid request body" });
|
||||
const ids = request.body.ids?.map((id: string) => Number(id));
|
||||
|
||||
if (!ids) {
|
||||
response.status(400).json({ error: "Couldn't parse ID's from request body" });
|
||||
return;
|
||||
}
|
||||
|
||||
ids = ids.map(id => Number(id));
|
||||
|
||||
try {
|
||||
await prisma.filter.deleteMany({ where: {
|
||||
id: { in: ids },
|
||||
guild_id: guildId
|
||||
}});
|
||||
}
|
||||
catch (error) {
|
||||
console.error(error);
|
||||
if (error instanceof Prisma.PrismaClientKnownRequestError) {
|
||||
response.status(500).json({ error: error.message });
|
||||
return;
|
||||
}
|
||||
}
|
||||
const deleteArgs = { where: { guild_id: request.params.guildId, id: { in: ids } } };
|
||||
await prisma.feed.deleteMany(deleteArgs);
|
||||
response.status(204).send();
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
const isPrismaError = error instanceof Prisma.PrismaClientKnownRequestError;
|
||||
response.status(500).json({ error: isPrismaError ? error.message : error });
|
||||
|
||||
response.status(204).json(null);
|
||||
}
|
||||
};
|
||||
|
||||
export const datatable = async (request: Request, response: Response) => {
|
||||
@ -120,13 +118,10 @@ export const datatable = async (request: Request, response: Response) => {
|
||||
};
|
||||
|
||||
export const select = async (request: Request, response: Response) => {
|
||||
const guildId = request.params.guildId;
|
||||
const { search } = request.query;
|
||||
|
||||
const data = await prisma.filter.findMany({
|
||||
where: {
|
||||
guild_id: guildId,
|
||||
name: { contains: `${search}` }
|
||||
guild_id: request.params.guildId,
|
||||
name: { contains: `${request.query.search}` }
|
||||
}
|
||||
});
|
||||
|
||||
@ -139,7 +134,7 @@ export const select = async (request: Request, response: Response) => {
|
||||
title: filter.name
|
||||
}));
|
||||
|
||||
response.json(modifiedResults);
|
||||
response.status(200).json(modifiedResults);
|
||||
};
|
||||
|
||||
export default { get, post, patch, del, datatable, select };
|
Loading…
x
Reference in New Issue
Block a user