Modelo de Dados
Introducao ao documento
Este documento descreve o modelo de dados relacional observado nas migrations e no uso em runtime (models/controllers).
Versionamento
- Versao do documento: 1.0.0
- Ultima atualizacao: 2026-03-17
- Responsavel: GitHub Copilot
Referencial teorico
- Modelagem relacional
- Eloquent ORM (Laravel)
- Mermaid ER Diagram
Entidades principais
clients
- Campos: id, name, cpf (unique), email, phone_number, timestamps, soft deletes.
- Evidencia: database/migrations/2024_03_28_140439_create_clients_table.php:15
- Evidencia: database/migrations/2024_03_28_140439_create_clients_table.php:17
- Evidencia: database/migrations/2024_03_28_140439_create_clients_table.php:21
employees
- Campos: id, name, cpf (unique), email, phone_number, timestamps, soft deletes.
- Evidencia: database/migrations/2024_03_28_140440_create_employees_table.php:15
- Evidencia: database/migrations/2024_03_28_140440_create_employees_table.php:17
- Evidencia: database/migrations/2024_03_28_140440_create_employees_table.php:21
types
- Campos: id, name, timestamps, soft deletes.
- Dominio seedado: block, collective, individual, group.
- Evidencia: database/migrations/2024_03_28_140441_create_types_table.php:15
- Evidencia: database/seeders/AppointmentTypeSeeder.php:25
appointments
- Campos: start_time, finish_time, comments, additional_fields (json), class_id.
- Chaves: type_id (FK), client_id (FK nullable), employee_id (FK).
- timestamps e soft deletes.
- Evidencia: database/migrations/2024_03_28_140814_create_appointments_table.php:16
- Evidencia: database/migrations/2024_03_28_140814_create_appointments_table.php:19
- Evidencia: database/migrations/2024_03_28_140814_create_appointments_table.php:21
- Evidencia: database/migrations/2024_03_28_140814_create_appointments_table.php:22
- Evidencia: database/migrations/2024_03_28_140814_create_appointments_table.php:23
api_keys
- Campos: key (unique), description.
- Uso em middleware para autorizacao via header Authorization.
- Evidencia: database/migrations/2024_04_12_140223_create_api_keys_table.php:16
- Evidencia: app/Http/Middleware/ApiKeyMiddleware.php:39
jobs e cache
- jobs: persistencia de fila database.
- cache e cache_locks: persistencia de cache/locks em banco.
- Evidencia: database/migrations/2024_04_18_161748_create_jobs_table.php:14
- Evidencia: database/migrations/2024_04_24_014638_create_cache_table.php:14
- Evidencia: database/migrations/2024_04_24_014638_create_cache_table.php:20
RBAC
- Tabelas: roles, permissions, permission_role, role_user.
- Gate dinamico construido a partir de roles x permissions.
- Evidencia: database/migrations/2024_05_22_152956_create_roles_table.php:14
- Evidencia: database/migrations/2024_05_27_112644_create_permissions_table.php:14
- Evidencia: database/migrations/2024_05_27_114419_create_permission_role_pivot_table.php:14
- Evidencia: database/migrations/2024_05_27_114504_create_role_user_pivot_table.php:14
- Evidencia: app/Http/Middleware/AuthGates.php:16
Relacionamentos e cardinalidade
- appointments N:1 clients (nullable).
- appointments N:1 employees.
- appointments N:1 types.
- roles N:N permissions.
- users N:N roles.
- Evidencia: app/Models/Appointment.php:34
- Evidencia: app/Models/Appointment.php:42
- Evidencia: app/Models/Appointment.php:50
- Evidencia: app/Models/Role.php:29
- Evidencia: app/Models/User.php:38
Campos criticos
- Unicidade de CPF em clients/employees.
- API key unica.
- Soft delete aplicado a entidades de dominio e RBAC principal.
- Evidencia: database/migrations/2024_03_28_140439_create_clients_table.php:17
- Evidencia: database/migrations/2024_03_28_140440_create_employees_table.php:17
- Evidencia: database/migrations/2024_04_12_140223_create_api_keys_table.php:16
- Evidencia: database/migrations/2024_05_22_152956_create_roles_table.php:20
Constraints e enums praticos
- Tipos funcionais de agendamento sao controlados por dados na tabela types (nao enum SQL).
- Conflito de horario e regra de runtime (nao constraint SQL), com excecao para tipo group.
- Evidencia: database/seeders/AppointmentTypeSeeder.php:25
- Evidencia: app/Http/Controllers/AppointmentController.php:445
- Evidencia: app/Http/Controllers/AppointmentController.php:447
ERD Mermaid
Pendencias
- Foi identificado uso de relacao services() em controller admin de appointments sem definicao observada no model Appointment.
- Evidencia: app/Http/Controllers/Api/V1/Admin/AppointmentsApiController.php:18
- Evidencia: app/Models/Appointment.php:34
- O down() de permission_role usa nome permission_role_pivot, diferente do nome criado permission_role.
- Evidencia: database/migrations/2024_05_27_114419_create_permission_role_pivot_table.php:14
- Evidencia: database/migrations/2024_05_27_114419_create_permission_role_pivot_table.php:30