Este é um desafio técnico que consiste em desenvolver uma API REST para gerenciar agendamentos de motoristas. A API deve permitir a criação, listagem e atualização de agendamentos com regras de negócio específicas, e o desafio incentiva a utilização de TDD (Test-Driven Development) com testes unitários já fornecidos.
A API deve permitir a criação de um agendamento com os seguintes dados:
- Data e hora do agendamento
- Número do contrato
- Nome do motorista
- CPF do motorista
- Placa do caminhão
O agendamento criado terá um status inicial de pendente.
- Não é possível agendar mais de um motorista por hora.
- Motoristas com agendamentos
pendenteouatrasadonão podem receber novos agendamentos.
A API permite alterar o status de um agendamento para concluído ou cancelado.
- Não é possível alterar o status de um agendamento
concluídoparacancelado. - Não é possível alterar o status de um agendamento
cancelado.
A API fornece uma rota para listar todos os agendamentos e também permite aplicar filtros:
- Data: Filtrar agendamentos de um dia específico.
- Status: Filtrar agendamentos pelo status (
pendente,concluído,atrasado,cancelado). - CPF do motorista: Filtrar agendamentos de um motorista específico.
A API fornece uma rota para excluir todos os agendamentos que possuem mais de 3 dias.
- Agendamentos com mais de 3 dias de idade serão removidos.
-
POST
/api/agendamentosExemplo de body:
{ "dataHora": "2024-09-15T10:00:00Z", "numeroContrato": "CT123", "motoristaNome": "João", "motoristaCpf": "12345678900", "placaCaminhao": "ABC-1234" }
-
PATCH
/api/agendamentos/:id/statusExemplo de body:
{ "status": "concluido" }
-
GET
/api/agendamentosFiltros (opcionais) via query params:
data: Filtrar por data (ISO format, ex:2024-09-15)status: Filtrar por status (ex:pendente,concluido)motoristaCpf: Filtrar por CPF do motorista (ex:12345678900)
Exemplo:
GET /api/agendamentos?data=2024-09-15&status=pendente&motoristaCpf=12345678900
-
DELETE
/api/agendamentos/antigosExclui todos os agendamentos que possuem mais de 3 dias.
Exemplo de resposta:
{ "message": "Agendamentos com mais de 3 dias foram removidos" }
- Node.js v16 ou superior
- Yarn v1 (classic)
- Clone o repositório:
git clone https://github.com/BrendhaLuizaB/teste-back.git
- Instale as dependências:
npm install
- Inicie o servidor de desenvolvimento:
npm start
- Execute os testes:
npm test
A API estará disponível em http://localhost:3000.
O projeto já contém testes unitários implementados com Jest para validar as regras de negócio. Para executar os testes:
npm testOs testes cobrem:
- Criação de agendamentos, com validações das regras.
- Alteração de status dos agendamentos, com restrições.
- Listagem de agendamentos, com aplicação de filtros (data, status, CPF do motorista).
- Exclusão de agendamentos com mais de 3 dias.
src/
│
├── domain/
│ ├── entities/
│ ├── repositories/
│ └── dtos/
│
├── application/
│ ├── useCases/
│ │ ├── criarAgendamento.ts
│ │ ├── alterarAgendamento.ts
│ │ ├── removerAgendamento.ts
│ │ └── listarAgendamentos.ts
│ └── validators/
│ └── agendamentoValidator.ts
│
├── infrastructure/
│ └── persistence/
│ └── agendamentoRepositoryPrisma.ts
│
├── interfaces/
│ ├── controllers/
│ └── routes/
│
├── main/
│ └── app.ts
│
├── shared/
│ ├── errors/
│ │ └── AppError.ts
│ └── utils/
│ └── formatDate.ts
│
├── generated/
│
└── tests/
└── agendamento.test.ts
├── package.json
├── tsconfig.json
└── README.md
- Node.js
- Express.js
- TypeScript
- Jest para testes unitários
- date-fns para manipulação de datas
Este projeto é um desafio técnico projetado para validar as habilidades em Node.js, Express, TypeScript e o uso de TDD. O desafio foi elaborado com o objetivo de avaliar o conhecimento de boas práticas de desenvolvimento, como a criação de testes, refatoração e o uso correto de serviços e controladores.