carga
This commit is contained in:
197
backend/src/controllers/QuickMessageController.ts
Normal file
197
backend/src/controllers/QuickMessageController.ts
Normal file
@@ -0,0 +1,197 @@
|
||||
import * as Yup from "yup";
|
||||
import { Request, Response } from "express";
|
||||
import { getIO } from "../libs/socket";
|
||||
|
||||
import ListService from "../services/QuickMessageService/ListService";
|
||||
import CreateService from "../services/QuickMessageService/CreateService";
|
||||
import ShowService from "../services/QuickMessageService/ShowService";
|
||||
import UpdateService from "../services/QuickMessageService/UpdateService";
|
||||
import DeleteService from "../services/QuickMessageService/DeleteService";
|
||||
import FindService from "../services/QuickMessageService/FindService";
|
||||
|
||||
import QuickMessage from "../models/QuickMessage";
|
||||
|
||||
import { head } from "lodash";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
import AppError from "../errors/AppError";
|
||||
|
||||
type IndexQuery = {
|
||||
searchParam: string;
|
||||
pageNumber: string;
|
||||
userId: string | number;
|
||||
};
|
||||
|
||||
type StoreData = {
|
||||
shortcode: string;
|
||||
message: string;
|
||||
userId: number | number;
|
||||
};
|
||||
|
||||
type FindParams = {
|
||||
companyId: string;
|
||||
userId: string;
|
||||
};
|
||||
|
||||
export const index = async (req: Request, res: Response): Promise<Response> => {
|
||||
const { searchParam, pageNumber, userId } = req.query as IndexQuery;
|
||||
const { companyId } = req.user;
|
||||
|
||||
const { records, count, hasMore } = await ListService({
|
||||
searchParam,
|
||||
pageNumber,
|
||||
companyId,
|
||||
userId
|
||||
});
|
||||
|
||||
return res.json({ records, count, hasMore });
|
||||
};
|
||||
|
||||
export const store = async (req: Request, res: Response): Promise<Response> => {
|
||||
const { companyId } = req.user;
|
||||
const data = req.body as StoreData;
|
||||
|
||||
const schema = Yup.object().shape({
|
||||
shortcode: Yup.string().required(),
|
||||
message: Yup.string().required()
|
||||
});
|
||||
|
||||
try {
|
||||
await schema.validate(data);
|
||||
} catch (err: any) {
|
||||
throw new AppError(err.message);
|
||||
}
|
||||
|
||||
const record = await CreateService({
|
||||
...data,
|
||||
companyId,
|
||||
userId: req.user.id
|
||||
});
|
||||
|
||||
const io = getIO();
|
||||
io.to(`company-${companyId}-mainchannel`).emit(`company-${companyId}-quickmessage`, {
|
||||
action: "create",
|
||||
record
|
||||
});
|
||||
|
||||
return res.status(200).json(record);
|
||||
};
|
||||
|
||||
export const show = async (req: Request, res: Response): Promise<Response> => {
|
||||
const { id } = req.params;
|
||||
|
||||
const record = await ShowService(id);
|
||||
|
||||
return res.status(200).json(record);
|
||||
};
|
||||
|
||||
export const update = async (
|
||||
req: Request,
|
||||
res: Response
|
||||
): Promise<Response> => {
|
||||
const data = req.body as StoreData;
|
||||
const { companyId } = req.user;
|
||||
|
||||
const schema = Yup.object().shape({
|
||||
shortcode: Yup.string().required(),
|
||||
message: Yup.string().required()
|
||||
});
|
||||
|
||||
try {
|
||||
await schema.validate(data);
|
||||
} catch (err: any) {
|
||||
throw new AppError(err.message);
|
||||
}
|
||||
|
||||
const { id } = req.params;
|
||||
|
||||
const record = await UpdateService({
|
||||
...data,
|
||||
userId: req.user.id,
|
||||
id,
|
||||
});
|
||||
|
||||
const io = getIO();
|
||||
io.to(`company-${companyId}-mainchannel`).emit(`company-${companyId}-quickmessage`, {
|
||||
action: "update",
|
||||
record
|
||||
});
|
||||
|
||||
return res.status(200).json(record);
|
||||
};
|
||||
|
||||
export const remove = async (
|
||||
req: Request,
|
||||
res: Response
|
||||
): Promise<Response> => {
|
||||
const { id } = req.params;
|
||||
const { companyId } = req.user;
|
||||
|
||||
await DeleteService(id);
|
||||
|
||||
const io = getIO();
|
||||
io.to(`company-${companyId}-mainchannel`).emit(`company-${companyId}-quickmessage`, {
|
||||
action: "delete",
|
||||
id
|
||||
});
|
||||
|
||||
return res.status(200).json({ message: "Contact deleted" });
|
||||
};
|
||||
|
||||
export const findList = async (
|
||||
req: Request,
|
||||
res: Response
|
||||
): Promise<Response> => {
|
||||
const params = req.query as FindParams;
|
||||
const records: QuickMessage[] = await FindService(params);
|
||||
|
||||
return res.status(200).json(records);
|
||||
};
|
||||
|
||||
export const mediaUpload = async (
|
||||
req: Request,
|
||||
res: Response
|
||||
): Promise<Response> => {
|
||||
const { id } = req.params;
|
||||
const files = req.files as Express.Multer.File[];
|
||||
const file = head(files);
|
||||
|
||||
try {
|
||||
const quickmessage = await QuickMessage.findByPk(id);
|
||||
|
||||
quickmessage.update ({
|
||||
mediaPath: file.filename,
|
||||
mediaName: file.originalname
|
||||
});
|
||||
|
||||
return res.send({ mensagem: "Arquivo Anexado" });
|
||||
} catch (err: any) {
|
||||
throw new AppError(err.message);
|
||||
}
|
||||
};
|
||||
|
||||
export const deleteMedia = async (
|
||||
req: Request,
|
||||
res: Response
|
||||
): Promise<Response> => {
|
||||
const { id } = req.params;
|
||||
const { companyId } = req.user
|
||||
|
||||
try {
|
||||
const quickmessage = await QuickMessage.findByPk(id);
|
||||
const filePath = path.resolve("public","quickMessage",quickmessage.mediaName);
|
||||
const fileExists = fs.existsSync(filePath);
|
||||
if (fileExists) {
|
||||
fs.unlinkSync(filePath);
|
||||
}
|
||||
quickmessage.update ({
|
||||
mediaPath: null,
|
||||
mediaName: null
|
||||
});
|
||||
|
||||
return res.send({ mensagem: "Arquivo Excluído" });
|
||||
} catch (err: any) {
|
||||
throw new AppError(err.message);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user