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".