https://github.com/fabiodelllima/imoveis-api
https://github.com/fabiodelllima/imoveis-api
api-rest entity-relationship-diagram express jwt-authentication typeorm
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/fabiodelllima/imoveis-api
- Owner: fabiodelllima
- Created: 2023-11-10T22:10:07.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-10T22:21:11.000Z (over 1 year ago)
- Last Synced: 2025-01-31T22:23:17.496Z (4 months ago)
- Topics: api-rest, entity-relationship-diagram, express, jwt-authentication, typeorm
- Language: TypeScript
- Homepage:
- Size: 123 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Imóveis API
### Endpoints:
| Método | Endpoint | Responsabilidade | Autenticação |
| ------ | -------------------------- | ------------------------------------------------- | -------------------------------------- |
| POST | /users | Criação de usuário | Qualquer usuário, não necessita token |
| GET | /users | Lista todos os usuários | Apenas Admnistradores |
| PATCH | /users/:id | Atualiza um usuário | Apenas Admnistradores ou dono da conta |
| DELETE | /users/:id | Realiza um soft delete no usuário | Apenas Admnistradores |
| POST | /login | Gera o token de autenticação | Qualquer usuário, não necessita token |
| POST | /categories | Criação de categoria | Apenas Admnistradores |
| GET | /categories | Lista todas as categorias | Qualquer usuário, não necessita token |
| GET | /categories/:id/realEstate | Lista todos imóveis que pertencem a uma categoria | Qualquer usuário, não necessita token |
| POST | /realEstate | Criação de um imóvel | Apenas Admnistradores |
| GET | /realEstate | Lista todos os imóveis | Qualquer usuário, não necessita token |
| POST | /schedules | Agenda uma visita a um imóvel | Qualquer usuário, obrigatório token |
| GET | /schedules/realEstate/:id | lista todos os agendamentos de um imóvel | Apenas Admnistradores |
## Requisitos do Serviço
### POST - /users
- Rota para criação de usuário com os seguintes dados:
- **id**: number AUTOINCREMENT. Não deve ser passado, mas gerado pelo typeORM.
- **name**: string, máximo de 45 caracteres e obrigatório.
- **email**: string, máximo de 45 caracteres, obrigatório e único.
- **password**: string, máximo de 120 caracteres e obrigatório. Receberá uma string mas armazenará uma hash gerada com o **bcryptjs diretamente pela entidade do TypeORM**.
- **admin**: boolean, obrigatório e false por padrão.
- **createdAt**: Não deve ser passado, mas gerado pelo typeORM.
- **updatedAt**: Não deve ser passado, mas gerado pelo typeORM.
- **deletedAt**: Não deve ser passado, mas gerado pelo typeORM.
- A rota de criação deve retornar todos os dados, com **exceção da hash** de senha.
- Não podem ser cadastrados dois usuários com o mesmo **e-mail**.
- A rota **não precisa de autenticação** para ser acessada.### GET - /users
- A rota deve retornar todos os dados dos usuários, com **exceção da hash de senha**.
- A rota pode ser acessada apenas por usuários administradores.### PATCH - /users/:id
- A rota deve atualizar os dados do usuário.
- Não deve ser possível atualizar os campos **id** e **admin**.
- Apenas administradores podem atualizar qualquer usuário, usuários não-administradores podem apenas atualizar seu próprio usuário.### DELETE - /users/:id
- A rota deve realizar um soft delete do usuário.
- A rota pode ser acessada apenas por administradores.
- Não deve ser possível realizar um soft delete em um usuário já deletado.### POST - /login
- Rota de login recebendo **email** e **password**.
- O login deve validar se o usuário existe e validar se a senha está correta.
- Não deve ser possível realizar o login de um usuário marcado como deletado.
- A rota **não precisa de autenticação** para ser acessada.### POST - /categories
- Rota para criação de categorias com os seguintes dados:
- **id**: number AUTOINCREMENT. Não deve ser passado, mas gerado pelo **typeORM**.
- **name**: string, máximo de 45 caracteres, obrigatório e único.
- Não podem ser cadastradas duas categorias com o mesmo nome.
- A rota pode ser acessada apenas por usuários administradores.### GET - /categories
- Rota deve listar todas as categorias.
- A rota não precisa de autenticação para ser acessada.### GET - /categories/:id/realEstate
- Rota deve listar todos os imóveis que pertencem a uma categoria.
- A rota não precisa de autenticação para ser acessada.### POST - /realEstate
- Rota para criação de um imóvel com os seguintes dados:
- **id**: number AUTOINCREMENT. Não deve ser passado, mas gerado pelo TypeORM.
- **value**: decimal, precisão 12 e escala 2, obrigatório e 0 por padrão.
- Quando trabalhamos com decimal, ela pode ser um number ou string, leve isso em consideração na hora de tipar e validar.
- **size**: inteiro e obrigatório.
- **address**: um objeto com os seguintes dados:
- **street**: string, máximo de 45 caracteres e obrigatório.
- **zipCode**: string, máximo de 8 caracteres e obrigatório.
- **number**: number, inteiro, positivo e obrigatório.
- **city**: string, máximo de 20 caracteres e obrigatório.
- **state**: string, máximo de 2 caracteres e obrigatório.
- **categoryId**: number, inteiro e obrigatório.
- **sold**: Não deve ser passado, mas gerado no momento da validação dos dados no formato boolean com **false** por padrão.
- **createdAt**: Não deve ser passado, mas gerado pelo typeORM.
- **updatedAt**: Não deve ser passado, mas gerado pelo typeORM.
- Não podem ser cadastrados dois imóveis com o mesmo endereço.
- A rota pode ser acessada apenas por administradores.### GET - /realEstate
- Rota deve listar todos os imóveis.
- A rota não precisa de autenticação para ser acessada.### POST - /schedules
- Rota responsável pelo agendamento de uma visita a um imóvel com os seguintes dados:
- **id**: number AUTOINCREMENT. Não deve ser passado, mas gerado pelo **TypeORM**.
- **date**: string da data de agendamento da visita ao imóvel, no formato americano **AAAA-MM-DD**.
- **hour**: string do horário de agendamento da visita ao imóvel, no formato **HH:MM**.
- **realEstateId**: number, inteiro e obrigatório.
- **userId**: Não deve ser passado no body da requisição e sim pego através do token do usuário.
- Não deve ser possível agendar uma visita a um imóvel com a mesma data e hora.
- Não deve ser possível o mesmo **usuário** agendar uma visita a 2 imóveis diferentes com a mesma data e hora.
- Só deve ser possível agendar uma visita durante horário comercial (08:00 as 18:00).
- Só deve ser possível agendar uma visita durante dias úteis (segunda à sexta).
- A rota pode ser acessada tanto por usuários comuns quanto administradores.### GET - /schedules/realEstate/:id
- Rota deve listar todos os agendamentos de um imóvel.
- A rota pode ser acessada apenas por administradores.