74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
| 
								 | 
							
								import { Op } from "sequelize";
							 | 
						||
| 
								 | 
							
								import * as Yup from "yup";
							 | 
						||
| 
								 | 
							
								import AppError from "../../errors/AppError";
							 | 
						||
| 
								 | 
							
								import Queue from "../../models/Queue";
							 | 
						||
| 
								 | 
							
								import ShowQueueService from "./ShowQueueService";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								interface QueueData {
							 | 
						||
| 
								 | 
							
								  name?: string;
							 | 
						||
| 
								 | 
							
								  color?: string;
							 | 
						||
| 
								 | 
							
								  greetingMessage?: string;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const UpdateQueueService = async (
							 | 
						||
| 
								 | 
							
								  queueId: number | string,
							 | 
						||
| 
								 | 
							
								  queueData: QueueData
							 | 
						||
| 
								 | 
							
								): Promise<Queue> => {
							 | 
						||
| 
								 | 
							
								  const { color, name } = queueData;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const queueSchema = Yup.object().shape({
							 | 
						||
| 
								 | 
							
								    name: Yup.string()
							 | 
						||
| 
								 | 
							
								      .min(2, "ERR_QUEUE_INVALID_NAME")
							 | 
						||
| 
								 | 
							
								      .test(
							 | 
						||
| 
								 | 
							
								        "Check-unique-name",
							 | 
						||
| 
								 | 
							
								        "ERR_QUEUE_NAME_ALREADY_EXISTS",
							 | 
						||
| 
								 | 
							
								        async value => {
							 | 
						||
| 
								 | 
							
								          if (value) {
							 | 
						||
| 
								 | 
							
								            const queueWithSameName = await Queue.findOne({
							 | 
						||
| 
								 | 
							
								              where: { name: value, id: { [Op.not]: queueId } }
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return !queueWithSameName;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      ),
							 | 
						||
| 
								 | 
							
								    color: Yup.string()
							 | 
						||
| 
								 | 
							
								      .required("ERR_QUEUE_INVALID_COLOR")
							 | 
						||
| 
								 | 
							
								      .test("Check-color", "ERR_QUEUE_INVALID_COLOR", async value => {
							 | 
						||
| 
								 | 
							
								        if (value) {
							 | 
						||
| 
								 | 
							
								          const colorTestRegex = /^#[0-9a-f]{3,6}$/i;
							 | 
						||
| 
								 | 
							
								          return colorTestRegex.test(value);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								      .test(
							 | 
						||
| 
								 | 
							
								        "Check-color-exists",
							 | 
						||
| 
								 | 
							
								        "ERR_QUEUE_COLOR_ALREADY_EXISTS",
							 | 
						||
| 
								 | 
							
								        async value => {
							 | 
						||
| 
								 | 
							
								          if (value) {
							 | 
						||
| 
								 | 
							
								            const queueWithSameColor = await Queue.findOne({
							 | 
						||
| 
								 | 
							
								              where: { color: value, id: { [Op.not]: queueId } }
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								            return !queueWithSameColor;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      )
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    await queueSchema.validate({ color, name });
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    throw new AppError(err.message);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const queue = await ShowQueueService(queueId);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  await queue.update(queueData);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return queue;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default UpdateQueueService;
							 |