mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-15 18:53:06 +00:00
Qualquer pessoa visível ganha/perde Assessora, Lidera e Aliada em pela lista: a primeira cidade cria a entidade (conta staff sem credenciais utilizáveis / liderança / dobradinha), a última remove da tabela com confirmação destrutiva (manifest: votos+convites da liderança, conta+ autorias+assessorado da assessora; dobradinha sem diálogo). Saída destrutiva por escopo: assessor encerra Lidera/Aliada com a capacidade inteira na carteira; Assessora segue coordenação/candidato. Escritas person-centric por contactId com extração dos deltas B34/B37 e da cascata de conta (deleteCampaignUserAccount, nextFreeStubCampaignEmail, matchers de conflito) — sem twin. commitGuard/commitWithNullOwner/ extraFormFields como opt-ins no RelationChipCell. Corrige bug latente C116 (célula Assessora nunca salvava — contactId faltava no FormData). Sem migration. Int: 28, unit: 6, e2e: +2.
23 lines
873 B
TypeScript
23 lines
873 B
TypeScript
import 'server-only'
|
|
|
|
import {
|
|
STATE_DEPUTY_CONFLICT_MESSAGE,
|
|
STATE_DEPUTY_STAFF_MESSAGE,
|
|
} from '@/lib/schemas/stateDeputy'
|
|
import type { StaffEntityPolicy } from '@/utilities/campaignEntityActions'
|
|
|
|
/**
|
|
* C128 — shared dobradinha identity-conflict policy. Was private to
|
|
* `actions/stateDeputy.ts`; the person lifecycle
|
|
* (`setPersonStateDeputyMunicipalitiesRecord`) creates dobradinhas too, and
|
|
* the `contact`/`slug` unique violations must map to the same safe message in
|
|
* both surfaces. Lives outside the 'use server' module because a plain const
|
|
* cannot be re-exported from one (Next.js allows only async function exports
|
|
* there).
|
|
*/
|
|
|
|
export const stateDeputyPolicy: StaffEntityPolicy = {
|
|
staffMessage: STATE_DEPUTY_STAFF_MESSAGE,
|
|
conflictPattern: /state_deputy_(contact|slug)|duplicate key/i,
|
|
conflictMessage: STATE_DEPUTY_CONFLICT_MESSAGE,
|
|
}
|