Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions ReadmeFeatures/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Documentação das Features

Esta pasta contém a documentação detalhada das funcionalidades implementadas no projeto API Viagem.

## 📁 Estrutura da Documentação

### 🔐 Sistema de Roles
- **[ROLE_API_DOCUMENTATION.md](./ROLE_API_DOCUMENTATION.md)** - Documentação completa da API de gerenciamento de roles
- **[USER_ROLE_RELATIONSHIP.md](./USER_ROLE_RELATIONSHIP.md)** - Documentação do relacionamento entre usuários e roles

## 🚀 Features Implementadas

### 1. Sistema de Roles
- ✅ Modelo Role com enum RoleType (USER, ADMIN)
- ✅ CRUD completo para roles
- ✅ Endpoints REST para gerenciamento
- ✅ Validações e tratamento de exceções

### 2. Relacionamento User-Role
- ✅ Relacionamento Many-to-Many entre User e Role
- ✅ Atribuição automática de role padrão (USER) para novos usuários
- ✅ Endpoints para gerenciar roles de usuários
- ✅ Métodos utilitários para verificação de permissões

## 📋 Como Usar

### Criando Roles
```bash
# Criar role USER
curl -X POST http://localhost:8080/api/roles \
-H "Content-Type: application/json" \
-d '{"name": "USER", "description": "Usuário comum"}'

# Criar role ADMIN
curl -X POST http://localhost:8080/api/roles \
-H "Content-Type: application/json" \
-d '{"name": "ADMIN", "description": "Administrador"}'
```

### Gerenciando Roles de Usuários
```bash
# Promover usuário a administrador
curl -X POST http://localhost:8080/api/users/{userId}/roles/ADMIN

# Verificar se usuário é admin
curl -X GET http://localhost:8080/api/users/{userId}/has-role/ADMIN

# Listar usuários administradores
curl -X GET http://localhost:8080/api/users/admins
```

## 🔧 Arquitetura

### Camadas Implementadas
- **Model**: Role, RoleType, relacionamento com User
- **Repository**: RoleRepository, métodos adicionais no UserRepository
- **Service**: RoleService, UserRoleService
- **Controller**: RoleController, UserRoleController
- **DTO**: RoleRequestDTO, RoleResponseDTO

### Padrões Utilizados
- **Repository Pattern**: Para acesso a dados
- **Service Layer**: Para lógica de negócio
- **DTO Pattern**: Para transferência de dados
- **REST API**: Endpoints padronizados

## 📊 Banco de Dados

### Tabelas Criadas
- `roles` - Armazena as roles do sistema
- `user_roles` - Tabela de relacionamento Many-to-Many

### Relacionamentos
- User ↔ Role (Many-to-Many)
- Tabela intermediária: user_roles

## 🔒 Segurança

### Implementações de Segurança
- Validação de dados com Bean Validation
- Tratamento de exceções personalizadas
- Verificação de permissões antes de operações
- Atribuição automática de role padrão

### Próximos Passos de Segurança
- [ ] Implementar middleware de autenticação
- [ ] Adicionar logs de auditoria
- [ ] Implementar cache para consultas de roles
- [ ] Criar sistema de hierarquia de roles

## 📈 Próximas Features

- [ ] Sistema de permissões granular
- [ ] Middleware de autorização
- [ ] Logs de auditoria para mudanças de roles
- [ ] Interface web para gerenciamento de roles
- [ ] Sistema de convites para roles administrativas

---

**Última atualização**: $(date)
**Versão**: 1.0.0
165 changes: 165 additions & 0 deletions ReadmeFeatures/ROLE_API_DOCUMENTATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
# Documentação da API de Roles

## Visão Geral
Esta API permite gerenciar roles no sistema, incluindo as roles de **USER** e **ADMIN**.

## Endpoints Disponíveis

### 1. Buscar Todas as Roles
```http
GET /api/roles
```

**Resposta de Sucesso (200):**
```json
[
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "USER",
"description": "Usuário comum do sistema",
"createdAt": "2024-01-01T10:00:00Z",
"updatedAt": "2024-01-01T10:00:00Z"
},
{
"id": "123e4567-e89b-12d3-a456-426614174001",
"name": "ADMIN",
"description": "Administrador com acesso total ao sistema",
"createdAt": "2024-01-01T10:00:00Z",
"updatedAt": "2024-01-01T10:00:00Z"
}
]
```

### 2. Buscar Role por ID
```http
GET /api/roles/{id}
```

**Parâmetros:**
- `id` (UUID): ID único da role

**Resposta de Sucesso (200):**
```json
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "USER",
"description": "Usuário comum do sistema",
"createdAt": "2024-01-01T10:00:00Z",
"updatedAt": "2024-01-01T10:00:00Z"
}
```

**Resposta de Erro (404):**
```json
Role não encontrada
```

### 3. Buscar Role por Nome
```http
GET /api/roles/name/{name}
```

**Parâmetros:**
- `name` (RoleType): USER ou ADMIN

**Exemplo:**
```http
GET /api/roles/name/USER
```

### 4. Cadastrar Nova Role
```http
POST /api/roles
```

**Body (JSON):**
```json
{
"name": "USER",
"description": "Usuário comum do sistema"
}
```

**Resposta de Sucesso (201):**
```json
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "USER",
"description": "Usuário comum do sistema",
"createdAt": "2024-01-01T10:00:00Z",
"updatedAt": "2024-01-01T10:00:00Z"
}
```

**Resposta de Erro (400):**
```json
Role já existe com o tipo: USER
```

### 5. Atualizar Role
```http
PUT /api/roles/{id}
```

**Body (JSON):**
```json
{
"name": "USER",
"description": "Descrição atualizada"
}
```

### 6. Deletar Role por ID
```http
DELETE /api/roles/{id}
```

**Resposta de Sucesso (204):**
```
Sem conteúdo
```

### 7. Deletar Role por Nome
```http
DELETE /api/roles/name/{name}
```

**Exemplo:**
```http
DELETE /api/roles/name/USER
```

## Tipos de Role Disponíveis

- **USER**: Usuário comum do sistema
- **ADMIN**: Administrador com acesso total ao sistema

## Códigos de Status HTTP

- **200**: Sucesso
- **201**: Criado com sucesso
- **204**: Deletado com sucesso (sem conteúdo)
- **400**: Requisição inválida (role já existe, dados inválidos)
- **404**: Role não encontrada

## Exemplo de Uso com cURL

### Cadastrar Role USER:
```bash
curl -X POST http://localhost:8080/api/roles \
-H "Content-Type: application/json" \
-d '{
"name": "USER",
"description": "Usuário comum do sistema"
}'
```

### Buscar Todas as Roles:
```bash
curl -X GET http://localhost:8080/api/roles
```

### Deletar Role por Nome:
```bash
curl -X DELETE http://localhost:8080/api/roles/name/USER
```
Loading