7.1. Autenticação (/auth)

Método Rota Proteção JWT Descrição
POST /auth/login Não Login de usuário.
POST /auth/refresh Não Atualização de token.

7.2. Usuários (/user)

Método Rota Proteção JWT Acesso
POST /user/register Não Público
POST /user/booking Sim Visitor, Organizer, Admin
GET /user/ Sim Admin
GET /user/:id Sim Admin
PUT /user/:id Sim Todos (restrito ao próprio usuário ou Admin)
DELETE /user/:id Sim Admin

7.3. Locais (/place)

Método Rota Proteção JWT Acesso
POST /place/ Sim Organizer, Admin
GET /place/ Sim Todos
GET /place/:id Sim Todos
PUT /place/:id Sim Organizer, Admin
DELETE /place/:id Sim Admin

7.4. Eventos (/event)

Método Rota Proteção JWT Acesso
POST /event/ Sim Organizer, Admin
GET /event/ Sim Todos
GET /event/:id Sim Todos
PUT /event/:id Sim Organizer, Admin
DELETE /event/:id Sim Organizer, Admin

7.5. Visitas Realizadas (/visited)

Método Rota Proteção JWT Acesso
POST /visited/ Sim Todos
GET /visited/ Sim Todos (Admin vê tudo)
GET /visited/user/:id Sim Visitor/Admin/Organizer
GET /visited/place/:id Sim Todos
PUT /visited/ Sim Todos
DELETE /visited/ Sim Organizer, Admin

8. Exemplos de Requisição (Corpo JSON)

Abaixo estão exemplos de corpos de requisição JSON esperados para algumas das principais operações de criação e atualização da API. O método HTTP e a rota estão indicados no título de cada exemplo.

8.1. Login de Usuário (POST /auth/login)

Utiliza LoginInfoDTO para autenticar um usuário.

Content-Type: application/json

{
  "email": "usuario@example.com",
  "password": "senhaSegura123"
}

8.2. Registrar Novo Usuário (POST /user/register)

Utiliza UserDTO para criar um novo usuário (visitor ou organizer).

Content-Type: application/json

{
  "name": "Nome Completo do Novo Usuário",
  "userLogin": {
    "email": "novo.usuario@example.com",
    "password": "outraSenhaSegura456"
  },
  "profilePick": "https://example.com/perfil.jpg",
  "role": "visitor" 
}

8.3. Atualizar Usuário (PUT /user/:id)

Utiliza UserDTO para atualizar os dados de um usuário existente. Substitua :id no título da rota pelo ID do usuário.

Content-Type: application/json

{
  "name": "Nome Atualizado do Usuário",
  "userLogin": {
    "email": "usuario.atualizado@example.com",
    "password": "novaSenhaSuperSegura789"
  },
  "profilePick": "https://example.com/nova_perfil.jpg",
  "role": "organizer"
}

8.4. Criar Local (POST /place/)

Utiliza PlaceDTO para registrar um novo local.

Content-Type: application/json

{
  "name": "Estação das Docas",
  "type": "cultural",
  "address": {
    "postalCode": "66010-020",
    "street": "Av. Boulevard Castilhos França",
    "numberHouse": 600,
    "complement": "Armazém 2"
  }
}

8.5. Atualizar Local (PUT /place/:id)

Utiliza PlaceDTO para atualizar um local existente. Substitua :id no título da rota pelo ID do local.

Content-Type: application/json

{
  "name": "Mercado Ver-o-Peso Renovado",
  "type": "market",
  "address": {
    "postalCode": "66010-030",
    "street": "Av. Boulevard Castilhos França",
    "numberHouse": 100,
    "complement": "Setor Peixes"
  }
}

8.6. Criar Evento (POST /event/)

Utiliza EventDTO para criar um novo evento.

Content-Type: application/json

{
  "title": "Festival Gastronômico Amazônico",
  "eventDate": "2025-11-10T18:00:00.000Z",
  "description": "Uma celebração dos sabores únicos da Amazônia na COP-30.",
  "place": "UUID-do-local-EstacaoDasDocas"
}

8.7. Atualizar Evento (PUT /event/:id)

Utiliza EventDTO para atualizar um evento existente. Substitua :id no título da rota pelo ID do evento.

Content-Type: application/json

{
  "title": "Festival Gastronômico Amazônico (Edição Especial COP-30)",
  "eventDate": "2025-11-12T19:00:00.000Z",
  "description": "Edição especial do festival, com foco em sustentabilidade e culinária local.",
  "place": "UUID-do-local-EstacaoDasDocas"
}

8.8. Agendar Visita em Evento (POST /user/booking)

Utiliza BookingDTO para que um usuário se inscreva em um evento.

Content-Type: application/json

{
  "eventId": "UUID-do-evento-FestivalAmazonico",
  "userId": "UUID-do-usuario-Visitante"
}

8.9. Registrar Visita a um Local (POST /visited/)

Utiliza VisitedDTO para marcar um local como visitado por um usuário em uma data específica.

Content-Type: application/json

{
  "userId": "UUID-do-usuario-Visitante",
  "placeId": "UUID-do-local-VerOPeso",
  "visitDate": "2025-10-20T10:30:00.000Z"
}

8.10. Atualizar Registro de Visita (PUT /visited/)

Utiliza VisitedDTO para atualizar a data de uma visita existente. A visita é identificada pela combinação de userId e placeId no corpo da requisição.

Content-Type: application/json

{
  "userId": "UUID-do-usuario-Visitante",
  "placeId": "UUID-do-local-VerOPeso",
  "visitDate": "2025-10-20T11:00:00.000Z" 
}