Gerando CRUD para Request no CrazyStack Node.js
Nesta aula, você aprenderá como criar as funcionalidades básicas de um CRUD (Create, Read, Update e Delete) para o recurso "Request". O objetivo é que você possa aplicar o mesmo padrão utilizado na criação do CRUD de "Categoria" e assim, possa desenvolver CRUDs para outros recursos da aplicação com facilidade. Serão criadas as seguintes interfaces de repositório:
- addRequestRepository
- loadRequestRepository
- loadRequestByPageRepository
- deleteRequestRepository
- updateRequestRepository
Além disso, serão criados os seguintes casos de uso:
- addRequest
- loadRequest
- loadRequestByPage
- deleteRequest
- updateRequest
Você também poderá aplicar as técnicas de validação de dados e tratamento de erros aprendidas nas aulas anteriores. Ao final desta aula, você terá uma base sólida para o desenvolvimento de futuros recursos da aplicação.
import { FidelityData } from "@/slices/fidelity/entities";
import { OrderData } from "@/slices/order/entities";
import { RecurrenceData } from "@/slices/recurrence/entities";
import { RideData } from "@/slices/ride/entities";
export type RequestData = {
_id?: string;
createdById: string;
name: string;
active?: boolean;
createdAt?: Date;
updatedAt?: Date;
message: string;
serviceId: string;
ownerId: string;
clientId: string;
clientUserId?: string;
professionalId: string;
status: number;
createdForId: string;
updatedById?: string | null;
updatedByRole?: string | null;
read: boolean;
push: boolean;
email: boolean;
haveDelivery?: boolean;
haveRecurrence?: boolean;
haveFidelity?: boolean;
haveRide?: boolean;
fidelity?: FidelityData;
ride?: RideData;
recurrence?: RecurrenceData;
order?: OrderData;
initDate: string;
endDate: string;
cancelledAt?: Date | null;
};
export type RequestPaginated = {
requests: RequestData[];
total: number;
};
export class RequestEntity {
createdById: string;
name: string;
active?: boolean;
createdAt?: Date;
updatedAt?: Date;
message: string;
serviceId: string;
ownerId: string;
clientId: string;
clientUserId?: string;
professionalId: string;
status: number;
createdForId: string;
updatedById?: string | null;
updatedByRole?: string | null;
read: boolean;
push: boolean;
email: boolean;
haveDelivery?: boolean;
haveRecurrence?: boolean;
haveFidelity?: boolean;
haveRide?: boolean;
fidelity?: FidelityData;
ride?: RideData;
recurrence?: RecurrenceData;
order?: OrderData;
initDate: string;
endDate: string;
cancelledAt?: Date | null;
constructor(data: RequestData) {
this.createdById = data.createdById;
this.name = data.name;
this.active = false;
this.createdAt = new Date();
this.updatedAt = new Date();
this.message = data.message;
this.serviceId = data.serviceId;
this.ownerId = data.ownerId;
this.clientId = data.clientId;
this.clientUserId = data.clientUserId;
this.professionalId = data.professionalId;
this.status = 0;
this.createdForId = data.createdForId;
this.read = false;
this.push = data.push;
this.email = data.email;
this.haveDelivery = data.haveDelivery;
this.haveRecurrence = data.haveRecurrence;
this.haveFidelity = data.haveFidelity;
this.haveRide = data.haveRide;
this.initDate = data.initDate;
this.endDate = data.endDate;
this.cancelledAt = data.cancelledAt;
this.fidelity = data.fidelity;
this.recurrence = data.recurrence;
this.order = data.order;
this.ride = data.ride;
this.updatedById = null;
this.updatedByRole = null;
}
}
O uso da classe RequestEntity é importante na aplicação pois ela representa a entidade de requisição do sistema. Ela contém informações como os ids de quem criou e atualizou a requisição, informações de contato, status, data de criação e atualização, entre outros. Essas informações são usadas em diferentes partes do sistema, como para mostrar ao usuário as requisições pendentes ou para manter registro das requisições realizadas. A classe também possibilita que sejam incluídos outros objetos como FidelityData, RecurrenceData, RideData e OrderData, que podem ser usados para armazenar informações adicionais relacionadas à requisição.
createdById: ID do usuário que criou a requisição. name: Nome da requisição. active: Indica se a requisição está ativa ou não. Valor padrão é "false". createdAt: Data e hora em que a requisição foi criada. Valor padrão é a data e hora atuais. updatedAt: Data e hora em que a requisição foi atualizada. Valor padrão é a data e hora atuais. message: Mensagem associada à requisição. serviceId: ID do serviço relacionado à requisição. ownerId: ID do proprietário relacionado à requisição. clientId: ID do cliente relacionado à requisição. clientUserId: ID do usuário do cliente relacionado à requisição. professionalId: ID do profissional relacionado à requisição. status: Status da requisição. O valor padrão é 0. createdForId: ID da pessoa para quem a requisição foi criada. updatedById: ID do usuário que atualizou a requisição. O valor padrão é "null". updatedByRole: Papel do usuário que atualizou a requisição. O valor padrão é "null". read: Indica se a requisição foi lida ou não. Valor padrão é "false". push: Indica se uma notificação push deve ser enviada para o cliente quando a requisição for atualizada. email: Indica se um e-mail deve ser enviado para o cliente quando a requisição for atualizada. haveDelivery: Indica se a requisição tem entrega associada. haveRecurrence: Indica se a requisição tem recorrência associada. haveFidelity: Indica se a requisição tem programa de fidelidade associado. haveRide: Indica se a requisição tem transporte associado. fidelity: Dados do programa de fidelidade associado à requisição. ride: Dados do transporte associado à requisição. recurrence: Dados da recorrência associada à requisição. order: Dados da ordem associada à requisição. initDate: Data inicial da requisição. endDate: Data final da requisição. cancelledAt: Data e hora em que a requisição foi cancelada. O valor padrão é "null".