Pular para o conteúdo principal

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