prisma: modelo Client + migração 20260527225728_add_client + seed dev (10 clientes)
api: GET /clients (list, busca, filtro atividade/financeiro, paginação) + GET /clients/:id
rep vê carteira própria; supervisor/admin vê tudo; activityStatus calculado de lastOrderAt
@sar/api-interface: ClientSummarySchema, ClientDetailSchema, ClientListResponseSchema
web: ClientsPage (tabela AntD, busca, filtro), DevLogin (token dev), authStore, Bearer no apiFetch
oq-4 resolvida: creditLimit gerenciado no SAR
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
42 lines
1.1 KiB
SQL
42 lines
1.1 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "FinancialStatus" AS ENUM ('regular', 'attention', 'blocked');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Client" (
|
|
"id" UUID NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"tradeName" TEXT,
|
|
"taxId" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"address" JSONB,
|
|
"financialStatus" "FinancialStatus" NOT NULL DEFAULT 'regular',
|
|
"creditLimit" DECIMAL(15,2),
|
|
"repId" TEXT NOT NULL,
|
|
"lastOrderAt" TIMESTAMP(3),
|
|
"lastOrderValue" DECIMAL(15,2),
|
|
"openOrdersCount" INTEGER NOT NULL DEFAULT 0,
|
|
"erpCode" TEXT,
|
|
"syncedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"deletedAt" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "Client_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Client_taxId_key" ON "Client"("taxId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Client_repId_idx" ON "Client"("repId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Client_taxId_idx" ON "Client"("taxId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Client_name_idx" ON "Client"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Client_deletedAt_idx" ON "Client"("deletedAt");
|