Pārlūkot izejas kodu

change the migration and review endpoints

gdias 2 nedēļas atpakaļ
vecāks
revīzija
0fd97660cf
4 mainītis faili ar 30 papildinājumiem un 80 dzēšanām
  1. 0 15
      controllers/HelloController.php
  2. 25 43
      migrations/migrations_v1.sql
  3. 0 1
      public/index.php
  4. 5 21
      rotas.md

+ 0 - 15
controllers/HelloController.php

@@ -1,15 +0,0 @@
-<?php
-
-namespace Controllers;
-
-use Libs\ResponseLib;
-use Psr\Http\Message\ServerRequestInterface;
-
-class HelloController
-{
-    public function __invoke(ServerRequestInterface $request)
-    {
-        $data = ["message" => "Hello World!"];
-        return ResponseLib::sendOk($data);
-    }
-}

+ 25 - 43
migrations/migrations_v1.sql

@@ -8,25 +8,23 @@ CREATE TABLE company (
     company_cnpj                       VARCHAR(14)  NOT NULL UNIQUE,
     company_logo                       TEXT NOT NULL,
     company_created_at                 TIMESTAMP NOT NULL DEFAULT NOW(),
-    company_deleted_at                 TIMESTAMP NOT NULL DEFAULT 'infinity'
+    company_deleted_at                 TIMESTAMP NOT NULL DEFAULT 'delete'
 );
 
 CREATE TABLE "user" (
     user_id                            SERIAL PRIMARY KEY,
-    company_id                         INT NOT NULL,
     user_name                          VARCHAR(100) NOT NULL,
     user_phone                         VARCHAR(20) NOT NULL,
     user_email                         VARCHAR(100) NOT NULL UNIQUE,
     user_role                          VARCHAR(10) NOT NULL,
     user_password                      VARCHAR(255) NOT NULL,
     user_created_at                    TIMESTAMP NOT NULL DEFAULT NOW(),
-    user_deleted_at                    TIMESTAMP NOT NULL DEFAULT 'infinity',
+    user_deleted_at                    TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_users_company FOREIGN KEY (company_id) REFERENCES company(company_id)
 );
 
 CREATE TABLE operator (
     operator_id                        SERIAL PRIMARY KEY,
-    company_id                         INT NOT NULL,
     operator_name                      VARCHAR(100) NOT NULL,
     operator_initials                  VARCHAR(5) NOT NULL,
     operator_email                     VARCHAR(100) NOT NULL,
@@ -35,7 +33,7 @@ CREATE TABLE operator (
     operator_status                    VARCHAR(30) NOT NULL DEFAULT 'Disponível',
     operator_available_for_escalation  BOOLEAN NOT NULL DEFAULT TRUE,
     operator_created_at                TIMESTAMP NOT NULL DEFAULT NOW(),
-    operator_deleted_at                TIMESTAMP NOT NULL DEFAULT 'infinity',
+    operator_deleted_at                TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_operators_company FOREIGN KEY (company_id) REFERENCES company(company_id)
 );
 
@@ -44,37 +42,34 @@ CREATE TABLE operator_channel (
     operator_id                        INT NOT NULL,
     operator_channel                   VARCHAR(20) NOT NULL,
     operator_channel_created_at        TIMESTAMP NOT NULL DEFAULT NOW(),
-    operator_channel_deleted_at        TIMESTAMP NOT NULL DEFAULT 'infinity',
+    operator_channel_deleted_at        TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_op_channel_operator FOREIGN KEY (operator_id) REFERENCES operator(operator_id)
 );
 
 CREATE TABLE sla_config (
     sla_config_id                      SERIAL PRIMARY KEY,
-    company_id                         INT NOT NULL,
     sla_config_department              VARCHAR(20) NOT NULL,
     sla_config_response_hours          INT NOT NULL DEFAULT 2,
     sla_config_resolution_hours        INT NOT NULL DEFAULT 24,
     sla_config_updated_at              TIMESTAMP NOT NULL DEFAULT NOW(),
-    sla_config_deleted_at              TIMESTAMP NOT NULL DEFAULT 'infinity',
+    sla_config_deleted_at              TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_sla_company FOREIGN KEY (company_id) REFERENCES company(company_id),
     CONSTRAINT uq_sla_dept UNIQUE (company_id, sla_config_department)
 );
 
 CREATE TABLE sku (
     sku_id                             SERIAL PRIMARY KEY,
-    company_id                         INT NOT NULL,
     sku_name                           VARCHAR(100) NOT NULL,
     sku_value                          DECIMAL(12,2) NOT NULL,
     sku_sold                           INT NOT NULL DEFAULT 0,
     sku_line                           VARCHAR(50) NOT NULL,
     sku_created_at                     TIMESTAMP NOT NULL DEFAULT NOW(),
-    sku_deleted_at                     TIMESTAMP NOT NULL DEFAULT 'infinity',
+    sku_deleted_at                     TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_skus_company FOREIGN KEY (company_id) REFERENCES company(company_id)
 );
 
 CREATE TABLE integration (
-    integration_id                     SERIAL PRIMARY KEY,
-    company_id                         INT NOT NULL,
+    integration_id                     SERIAL PRIMARY KEY,    
     integration_provider               VARCHAR(30) NOT NULL,
     integration_account_id             TEXT NOT NULL,
     integration_external_account_id    TEXT NOT NULL,
@@ -87,7 +82,7 @@ CREATE TABLE integration (
     integration_last_error             TEXT NOT NULL,
     integration_created_at             TIMESTAMP NOT NULL DEFAULT NOW(),
     integration_updated_at             TIMESTAMP NOT NULL DEFAULT NOW(),
-    integration_deleted_at             TIMESTAMP NOT NULL DEFAULT 'infinity',
+    integration_deleted_at             TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_integrations_company FOREIGN KEY (company_id) REFERENCES company(company_id)
 );
 
@@ -98,7 +93,6 @@ CREATE TABLE integration (
 
 CREATE TABLE client (
     client_id                          SERIAL PRIMARY KEY,
-    company_id                         INT NOT NULL,
     client_provider_id                 TEXT NOT NULL,
     client_phone                       VARCHAR(20) NOT NULL,
     client_name                        VARCHAR(100) NOT NULL,
@@ -106,14 +100,13 @@ CREATE TABLE client (
     client_segment                     VARCHAR(100) NOT NULL,
     client_is_registered               BOOLEAN NOT NULL DEFAULT FALSE,
     client_created_at                  TIMESTAMP NOT NULL DEFAULT NOW(),
-    client_deleted_at                  TIMESTAMP NOT NULL DEFAULT 'infinity',
+    client_deleted_at                  TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_clients_company FOREIGN KEY (company_id) REFERENCES company(company_id),
     CONSTRAINT uq_client_phone_company UNIQUE (company_id, client_phone)
 );
 
 CREATE TABLE conversation (
     conversation_id                    SERIAL PRIMARY KEY,
-    company_id                         INT NOT NULL,
     integration_id                     INT NOT NULL,
     operator_id                        INT NOT NULL,
     client_id                          INT NOT NULL,
@@ -132,7 +125,7 @@ CREATE TABLE conversation (
     conversation_ticket_value          DECIMAL(12,2) NOT NULL,
     conversation_conversion_chance     INT NOT NULL,
     conversation_optimum_window        VARCHAR(20) NOT NULL,
-    conversation_deleted_at            TIMESTAMP NOT NULL DEFAULT 'infinity',
+    conversation_deleted_at            TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_conv_company FOREIGN KEY (company_id) REFERENCES company(company_id),
     CONSTRAINT fk_conv_integration FOREIGN KEY (integration_id) REFERENCES integration(integration_id),
     CONSTRAINT fk_conv_operator FOREIGN KEY (operator_id) REFERENCES operator(operator_id),
@@ -157,7 +150,7 @@ CREATE TABLE message (
     message_is_event                   BOOLEAN NOT NULL DEFAULT FALSE,
     message_event_type                 INT NOT NULL,
     message_sent_at                    TIMESTAMP NOT NULL DEFAULT NOW(),
-    message_deleted_at                 TIMESTAMP NOT NULL DEFAULT 'infinity',
+    message_deleted_at                 TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_msg_conversation FOREIGN KEY (conversation_id) REFERENCES conversation(conversation_id),
     CONSTRAINT fk_quoted_message FOREIGN KEY (quoted_message_id) REFERENCES message(message_id)
 );
@@ -172,7 +165,7 @@ CREATE TABLE message_attachment (
     attachment_file_name               VARCHAR(255) NOT NULL,
     attachment_size                    BIGINT NOT NULL,
     attachment_created_at              TIMESTAMP NOT NULL DEFAULT NOW(),
-    attachment_deleted_at              TIMESTAMP NOT NULL DEFAULT 'infinity',
+    attachment_deleted_at              TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_attachment_message FOREIGN KEY (message_id) REFERENCES message(message_id)
 );
 
@@ -183,7 +176,7 @@ CREATE TABLE message_reaction (
     reaction_value                     VARCHAR(20) NOT NULL,
     reaction_is_sender                 BOOLEAN NOT NULL DEFAULT FALSE,
     reaction_created_at                TIMESTAMP NOT NULL DEFAULT NOW(),
-    reaction_deleted_at                TIMESTAMP NOT NULL DEFAULT 'infinity',
+    reaction_deleted_at                TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_reaction_message FOREIGN KEY (message_id) REFERENCES message(message_id)
 );
 
@@ -194,7 +187,7 @@ CREATE TABLE conversation_participant (
     participant_name                   VARCHAR(100) NOT NULL,
     participant_is_admin               BOOLEAN NOT NULL DEFAULT FALSE,
     participant_created_at             TIMESTAMP NOT NULL DEFAULT NOW(),
-    participant_deleted_at             TIMESTAMP NOT NULL DEFAULT 'infinity',
+    participant_deleted_at             TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_participant_conversation FOREIGN KEY (conversation_id) REFERENCES conversation(conversation_id)
 );
 
@@ -207,7 +200,7 @@ CREATE TABLE webhook_event (
     webhook_event_processed            BOOLEAN NOT NULL DEFAULT FALSE,
     webhook_event_received_at          TIMESTAMP NOT NULL DEFAULT NOW(),
     webhook_event_processed_at         TIMESTAMP NOT NULL,
-    webhook_event_deleted_at           TIMESTAMP NOT NULL DEFAULT 'infinity',
+    webhook_event_deleted_at           TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_webhook_integration FOREIGN KEY (integration_id) REFERENCES integration(integration_id)
 );
 
@@ -219,33 +212,32 @@ CREATE TABLE webhook_event (
 CREATE TABLE conversation_analysis (
     analysis_id                                SERIAL PRIMARY KEY,
     conversation_id                            INT NOT NULL UNIQUE,
-    company_id                                 INT NOT NULL,
+    
     conversation_analysis_sentiment            VARCHAR(20) NOT NULL,
     conversation_analysis_sentiment_score      NUMERIC(3,2) NOT NULL,
     conversation_analysis_aspect               VARCHAR(50) NOT NULL,
     conversation_analysis_sub_aspect           VARCHAR(100) NOT NULL,
     conversation_analysis_analyzed_at          TIMESTAMP NOT NULL DEFAULT NOW(),
-    conversation_analysis_deleted_at           TIMESTAMP NOT NULL DEFAULT 'infinity',
+    conversation_analysis_deleted_at           TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_analysis_conv FOREIGN KEY (conversation_id) REFERENCES conversation(conversation_id),
     CONSTRAINT fk_analysis_company FOREIGN KEY (company_id) REFERENCES company(company_id)
 );
 
 CREATE TABLE aspect_feedback (
     aspect_feedback_id                         SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
+    
     conversation_id                            INT NOT NULL,
     aspect_feedback_aspect                     VARCHAR(50) NOT NULL,
     aspect_feedback_sentiment                  VARCHAR(20) NOT NULL,
     aspect_feedback_text                       TEXT NOT NULL,
     aspect_feedback_created_at                 TIMESTAMP NOT NULL DEFAULT NOW(),
-    aspect_feedback_deleted_at                 TIMESTAMP NOT NULL DEFAULT 'infinity',
+    aspect_feedback_deleted_at                 TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_af_company FOREIGN KEY (company_id) REFERENCES company(company_id),
     CONSTRAINT fk_af_conv FOREIGN KEY (conversation_id) REFERENCES conversation(conversation_id)
 );
 
 CREATE TABLE emotion_snapshot (
     emotion_id                                 SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     emotion_snapshot_date                      DATE NOT NULL,
     emotion_happiness                          NUMERIC(5,2) NOT NULL DEFAULT 0,
     emotion_sadness                            NUMERIC(5,2) NOT NULL DEFAULT 0,
@@ -261,18 +253,16 @@ CREATE TABLE emotion_snapshot (
 
 CREATE TABLE public_opinion (
     opinion_id                                 SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     conversation_id                            INT NOT NULL,
     opinion_is_positive                        BOOLEAN NOT NULL,
     opinion_classified_at                      TIMESTAMP NOT NULL DEFAULT NOW(),
-    opinion_deleted_at                         TIMESTAMP NOT NULL DEFAULT 'infinity',
+    opinion_deleted_at                         TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_opinion_company FOREIGN KEY (company_id) REFERENCES company(company_id),
     CONSTRAINT fk_opinion_conv FOREIGN KEY (conversation_id) REFERENCES conversation(conversation_id)
 );
 
 CREATE TABLE alert (
     alert_id                                   SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     client_id                                  INT NOT NULL,
     alert_type                                 VARCHAR(20) NOT NULL,
     alert_priority                             VARCHAR(10) NOT NULL,
@@ -281,19 +271,18 @@ CREATE TABLE alert (
     alert_tips                                 TEXT NOT NULL,
     alert_is_resolved                          BOOLEAN NOT NULL DEFAULT FALSE,
     alert_created_at                           TIMESTAMP NOT NULL DEFAULT NOW(),
-    alert_deleted_at                           TIMESTAMP NOT NULL DEFAULT 'infinity',
+    alert_deleted_at                           TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_alert_company FOREIGN KEY (company_id) REFERENCES company(company_id),
     CONSTRAINT fk_alert_client FOREIGN KEY (client_id) REFERENCES client(client_id)
 );
 
 CREATE TABLE ai_action (
     ai_action_id                               SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     ai_action_idea                             TEXT NOT NULL,
     ai_action_is_accepted                      BOOLEAN NOT NULL,
     ai_action_created_at                       TIMESTAMP NOT NULL DEFAULT NOW(),
     ai_action_responded_at                     TIMESTAMP NOT NULL,
-    ai_action_deleted_at                       TIMESTAMP NOT NULL DEFAULT 'infinity',
+    ai_action_deleted_at                       TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_ai_action_company FOREIGN KEY (company_id) REFERENCES company(company_id)
 );
 
@@ -304,7 +293,6 @@ CREATE TABLE ai_action (
 
 CREATE TABLE persona (
     persona_id                                 SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     persona_name                               VARCHAR(100) NOT NULL,
     persona_type                               VARCHAR(50) NOT NULL DEFAULT 'O PERFIL',
     persona_description                        TEXT NOT NULL,
@@ -315,7 +303,7 @@ CREATE TABLE persona (
     persona_expansion_strategy                 TEXT NOT NULL,
     persona_engagement_strategy                TEXT NOT NULL,
     persona_created_at                         TIMESTAMP NOT NULL DEFAULT NOW(),
-    persona_deleted_at                         TIMESTAMP NOT NULL DEFAULT 'infinity',
+    persona_deleted_at                         TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_personas_company FOREIGN KEY (company_id) REFERENCES company(company_id)
 );
 
@@ -324,19 +312,18 @@ CREATE TABLE client_persona (
     client_id                                  INT NOT NULL,
     persona_id                                 INT NOT NULL,
     client_persona_assigned_at                 TIMESTAMP NOT NULL DEFAULT NOW(),
-    client_persona_deleted_at                  TIMESTAMP NOT NULL DEFAULT 'infinity',
+    client_persona_deleted_at                  TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_cp_client FOREIGN KEY (client_id) REFERENCES client(client_id),
     CONSTRAINT fk_cp_persona FOREIGN KEY (persona_id) REFERENCES persona(persona_id)
 );
 
 CREATE TABLE best_action (
     best_action_id                             SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     persona_id                                 INT NOT NULL,
     best_action_type                           VARCHAR(20) NOT NULL,
     best_action_idea                           TEXT NOT NULL,
     best_action_created_at                     TIMESTAMP NOT NULL DEFAULT NOW(),
-    best_action_deleted_at                     TIMESTAMP NOT NULL DEFAULT 'infinity',
+    best_action_deleted_at                     TIMESTAMP NOT NULL DEFAULT 'delete',
     CONSTRAINT fk_ba_company FOREIGN KEY (company_id) REFERENCES company(company_id),
     CONSTRAINT fk_ba_persona FOREIGN KEY (persona_id) REFERENCES persona(persona_id)
 );
@@ -348,7 +335,6 @@ CREATE TABLE best_action (
 
 CREATE TABLE volume_snapshot (
     volume_id                                  SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     volume_snapshot_date                       DATE NOT NULL,
     volume_channel                             VARCHAR(20) NOT NULL,
     volume_message_count                       INT NOT NULL DEFAULT 0,
@@ -359,7 +345,6 @@ CREATE TABLE volume_snapshot (
 
 CREATE TABLE sentiment_evolution (
     evolution_id                               SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     evolution_snapshot_date                    DATE NOT NULL,
     evolution_sentiment_score                  NUMERIC(3,2) NOT NULL,
     CONSTRAINT fk_evo_company FOREIGN KEY (company_id) REFERENCES company(company_id),
@@ -368,7 +353,6 @@ CREATE TABLE sentiment_evolution (
 
 CREATE TABLE playbooks_monitor (
     playbook_id                                SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     playbook_snapshot_date                     DATE NOT NULL,
     playbook_new_detected                      INT NOT NULL DEFAULT 0,
     playbook_converted                         INT NOT NULL DEFAULT 0,
@@ -379,7 +363,6 @@ CREATE TABLE playbooks_monitor (
 
 CREATE TABLE operator_daily_stats (
     stat_id                                    SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     operator_id                                INT NOT NULL,
     operator_stat_date                         DATE NOT NULL,
     operator_attendances_count                 INT NOT NULL DEFAULT 0,
@@ -393,7 +376,6 @@ CREATE TABLE operator_daily_stats (
 
 CREATE TABLE kpi_snapshot (
     kpi_id                                     SERIAL PRIMARY KEY,
-    company_id                                 INT NOT NULL,
     kpi_snapshot_date                          DATE NOT NULL,
     kpi_current_sales                          DECIMAL(12,2) NOT NULL DEFAULT 0,
     kpi_avg_ticket                             DECIMAL(12,2) NOT NULL DEFAULT 0,

+ 0 - 1
public/index.php

@@ -25,7 +25,6 @@ $app = new App();
 $authJwt = new JwtAuthMiddleware();
 
 // Rotas versionadas sob /v1 para permitir evolução sem quebrar clientes existentes.
-$app->get('/v1/jwthelloworld', $authJwt, \Controllers\HelloController::class);
 $app->get('/v1/me', $authJwt, \Controllers\MeController::class);
 $app->get('/v1/dashboard/overview', $authJwt, \Controllers\DashboardOverviewController::class);
 $app->get('/v1/interactions', $authJwt, \Controllers\InteractionsController::class);

+ 5 - 21
rotas.md

@@ -1053,21 +1053,8 @@ Mas **não há modelagem explícita** para preferências de notificação e conf
 
 ### Backend precisa entregar
 
-- `POST /user/get`
-- `POST /me`
 - `POST /me/change-password`
 
-#### `POST /me`
-
-Request:
-
-```json
-{
-  "user_name": "Admin",
-  "user_phone": "5511999999999"
-}
-```
-
 #### `POST /me/change-password`
 
 Request:
@@ -1106,9 +1093,7 @@ Essa tela pode continuar **100% estática** no frontend, se preferir.
 
 ## Prioridade 0 — obrigatórias para integrar o app
 
-- `POST /login`
-- `POST /user/get`
-- `POST /me`
+- `POST /login` X
 - `POST /me/change-password`
 
 ## Prioridade 1 — telas mais centrais do produto
@@ -1181,7 +1166,7 @@ Como o frontend atual está em Svelte e usa muitos objetos de tela prontos, o ca
 - Portanto, além de criar as rotas do backend, será necessário integrar o frontend com:
   - `fetch`/client HTTP;
   - persistência de token;
-  - carregamento inicial com `POST /user/get`;
+  - carregamento inicial a partir do JWT já recebido no login;
   - tratamento de `401`.
 - Como o frontend usa `adapter-static`, o consumo da API será **client-side**.
 - Isso significa que o backend provavelmente precisará de:
@@ -1213,10 +1198,9 @@ Como o frontend atual está em Svelte e usa muitos objetos de tela prontos, o ca
 ## Melhor ordem de implementação
 
 1. autenticação real no frontend;
-2. `/user/get`;
-3. dashboard principal;
-4. interações;
-5. analytics/sentiment;
+2. dashboard principal;
+3. interações;
+4. analytics/sentiment;
 6. agentes;
 7. SLA;
 8. personas/evolução/executivo;