add quick answers

This commit is contained in:
ertprs
2021-09-05 22:30:57 -03:00
parent 85fe927385
commit 258b5db4a1
19 changed files with 2853 additions and 1789 deletions

View File

@@ -0,0 +1,26 @@
import AppError from "../../errors/AppError";
import QuickAnswer from "../../models/QuickAnswer";
interface Request {
shortcut: string;
message: string;
}
const CreateQuickAnswerService = async ({
shortcut,
message
}: Request): Promise<QuickAnswer> => {
const nameExists = await QuickAnswer.findOne({
where: { shortcut }
});
if (nameExists) {
throw new AppError("ERR__SHORTCUT_DUPLICATED");
}
const quickAnswer = await QuickAnswer.create({ shortcut, message });
return quickAnswer;
};
export default CreateQuickAnswerService;

View File

@@ -0,0 +1,16 @@
import QuickAnswer from "../../models/QuickAnswer";
import AppError from "../../errors/AppError";
const DeleteQuickAnswerService = async (id: string): Promise<void> => {
const quickAnswer = await QuickAnswer.findOne({
where: { id }
});
if (!quickAnswer) {
throw new AppError("ERR_NO_QUICK_ANSWER_FOUND", 404);
}
await quickAnswer.destroy();
};
export default DeleteQuickAnswerService;

View File

@@ -0,0 +1,45 @@
import { Sequelize } from "sequelize";
import QuickAnswer from "../../models/QuickAnswer";
interface Request {
searchParam?: string;
pageNumber?: string;
}
interface Response {
quickAnswers: QuickAnswer[];
count: number;
hasMore: boolean;
}
const ListQuickAnswerService = async ({
searchParam = "",
pageNumber = "1"
}: Request): Promise<Response> => {
const whereCondition = {
message: Sequelize.where(
Sequelize.fn("LOWER", Sequelize.col("message")),
"LIKE",
`%${searchParam.toLowerCase().trim()}%`
)
};
const limit = 20;
const offset = limit * (+pageNumber - 1);
const { count, rows: quickAnswers } = await QuickAnswer.findAndCountAll({
where: whereCondition,
limit,
offset,
order: [["message", "ASC"]]
});
const hasMore = count > offset + quickAnswers.length;
return {
quickAnswers,
count,
hasMore
};
};
export default ListQuickAnswerService;

View File

@@ -0,0 +1,14 @@
import QuickAnswer from "../../models/QuickAnswer";
import AppError from "../../errors/AppError";
const ShowQuickAnswerService = async (id: string): Promise<QuickAnswer> => {
const quickAnswer = await QuickAnswer.findByPk(id);
if (!quickAnswer) {
throw new AppError("ERR_NO_QUICK_ANSWERS_FOUND", 404);
}
return quickAnswer;
};
export default ShowQuickAnswerService;

View File

@@ -0,0 +1,40 @@
import QuickAnswer from "../../models/QuickAnswer";
import AppError from "../../errors/AppError";
interface QuickAnswerData {
shortcut?: string;
message?: string;
}
interface Request {
quickAnswerData: QuickAnswerData;
quickAnswerId: string;
}
const UpdateQuickAnswerService = async ({
quickAnswerData,
quickAnswerId
}: Request): Promise<QuickAnswer> => {
const { shortcut, message } = quickAnswerData;
const quickAnswer = await QuickAnswer.findOne({
where: { id: quickAnswerId },
attributes: ["id", "shortcut", "message"]
});
if (!quickAnswer) {
throw new AppError("ERR_NO_QUICK_ANSWERS_FOUND", 404);
}
await quickAnswer.update({
shortcut,
message
});
await quickAnswer.reload({
attributes: ["id", "shortcut", "message"]
});
return quickAnswer;
};
export default UpdateQuickAnswerService;