@anpdgovbr/shared-types
Version:
Biblioteca central de tipos TypeScript compartilhados para os projetos da ANPD (BETA)
291 lines (290 loc) • 7.34 kB
JavaScript
"use strict";
/**
* @fileoverview
* Constantes e configurações padrão do sistema.
*
* @remarks
* Este módulo centraliza valores constantes utilizados em todo o sistema,
* incluindo limites de paginação, formatos de data, configurações de validação, etc.
*
* @module base/constants
* @public
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.CACHE_CONFIG = exports.ERROR_MESSAGES = exports.REGEX_PATTERNS = exports.AUDIT_CONFIG = exports.HTTP_STATUS = exports.DATE_FORMATS = exports.STRING_LIMITS = exports.SORT_ORDER = exports.PAGINATION_LIMITS = void 0;
/**
* Constantes relacionadas à paginação de resultados.
*
* @remarks
* Utilize estas constantes para garantir limites consistentes em todas as APIs.
*
* @example
* ```typescript
* const pageSize = Math.min(requestedSize, PAGINATION_LIMITS.MAX_PAGE_SIZE)
* ```
*/
exports.PAGINATION_LIMITS = {
/**
* Tamanho mínimo de página permitido.
*/
MIN_PAGE_SIZE: 1,
/**
* Tamanho máximo de página permitido (evita sobrecarga).
*/
MAX_PAGE_SIZE: 100,
/**
* Tamanho padrão de página quando não especificado.
*/
DEFAULT_PAGE_SIZE: 20,
/**
* Número mínimo de página permitido.
*/
MIN_PAGE: 1,
/**
* Número máximo sugerido de páginas a serem buscadas de uma vez.
*/
MAX_SAFE_PAGE: 10000,
};
/**
* Constantes relacionadas a ordenação de resultados.
*
* @example
* ```typescript
* const direction = SORT_ORDER.ASCENDING
* ```
*/
exports.SORT_ORDER = {
/**
* Ordenação crescente (A-Z, 0-9, antigo→novo).
*/
ASCENDING: "ASC",
/**
* Ordenação decrescente (Z-A, 9-0, novo→antigo).
*/
DESCENDING: "DESC",
};
/**
* Constantes relacionadas a validação de strings.
*
* @example
* ```typescript
* if (nome.length > STRING_LIMITS.MAX_NAME_LENGTH) {
* throw new Error("Nome muito longo")
* }
* ```
*/
exports.STRING_LIMITS = {
/**
* Comprimento máximo padrão para campos de nome.
*/
MAX_NAME_LENGTH: 255,
/**
* Comprimento máximo para descrições curtas.
*/
MAX_SHORT_DESCRIPTION_LENGTH: 500,
/**
* Comprimento máximo para descrições longas/textos.
*/
MAX_LONG_DESCRIPTION_LENGTH: 5000,
/**
* Comprimento máximo para campos de email.
*/
MAX_EMAIL_LENGTH: 255,
/**
* Comprimento mínimo para senhas.
*/
MIN_PASSWORD_LENGTH: 8,
/**
* Comprimento máximo para senhas.
*/
MAX_PASSWORD_LENGTH: 128,
/**
* Comprimento mínimo para busca (search).
*/
MIN_SEARCH_LENGTH: 2,
};
/**
* Formatos de data comuns utilizados no sistema.
*
* @remarks
* Use estas constantes com bibliotecas de formatação como `date-fns` ou `dayjs`.
*
* @example
* ```typescript
* import { format } from "date-fns"
* const dataFormatada = format(new Date(), DATE_FORMATS.ISO_DATE)
* ```
*/
exports.DATE_FORMATS = {
/**
* Formato ISO 8601 completo com timezone (ex: 2024-01-15T14:30:00.000Z).
*/
ISO_DATETIME: "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
/**
* Formato ISO 8601 apenas data (ex: 2024-01-15).
*/
ISO_DATE: "yyyy-MM-dd",
/**
* Formato brasileiro de data (ex: 15/01/2024).
*/
BR_DATE: "dd/MM/yyyy",
/**
* Formato brasileiro de data e hora (ex: 15/01/2024 14:30).
*/
BR_DATETIME: "dd/MM/yyyy HH:mm",
/**
* Formato brasileiro de data e hora completa (ex: 15/01/2024 14:30:45).
*/
BR_DATETIME_FULL: "dd/MM/yyyy HH:mm:ss",
/**
* Formato apenas hora (ex: 14:30:45).
*/
TIME: "HH:mm:ss",
/**
* Formato hora curta (ex: 14:30).
*/
TIME_SHORT: "HH:mm",
};
/**
* Constantes relacionadas ao status HTTP comuns.
*
* @remarks
* Embora frameworks forneçam constantes HTTP, manter uma lista aqui
* garante consistência na documentação e facilita testes.
*
* @example
* ```typescript
* if (response.status === HTTP_STATUS.OK) {
* // Processar resposta
* }
* ```
*/
exports.HTTP_STATUS = {
OK: 200,
CREATED: 201,
NO_CONTENT: 204,
BAD_REQUEST: 400,
UNAUTHORIZED: 401,
FORBIDDEN: 403,
NOT_FOUND: 404,
CONFLICT: 409,
UNPROCESSABLE_ENTITY: 422,
INTERNAL_SERVER_ERROR: 500,
};
/**
* Constantes relacionadas a auditoria e logs.
*
* @example
* ```typescript
* const retentionDays = AUDIT_CONFIG.DEFAULT_RETENTION_DAYS
* ```
*/
exports.AUDIT_CONFIG = {
/**
* Período padrão de retenção de logs de auditoria (em dias).
*/
DEFAULT_RETENTION_DAYS: 365,
/**
* Número máximo de entradas de log a serem retornadas por consulta.
*/
MAX_LOG_ENTRIES: 1000,
/**
* Prefixo padrão para IDs de requisição.
*/
REQUEST_ID_PREFIX: "req-",
/**
* Prefixo padrão para IDs de trace.
*/
TRACE_ID_PREFIX: "trace-",
};
/**
* Constantes relacionadas a expressões regulares de validação.
*
* @example
* ```typescript
* if (REGEX_PATTERNS.EMAIL.test(email)) {
* console.log("Email válido")
* }
* ```
*/
exports.REGEX_PATTERNS = {
/**
* Padrão para validação de email.
*/
EMAIL: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
/**
* Padrão para validação de CPF (apenas números).
*/
CPF: /^\d{11}$/,
/**
* Padrão para validação de CNPJ (apenas números).
*/
CNPJ: /^\d{14}$/,
/**
* Padrão para validação de telefone brasileiro (com DDD).
*/
TELEFONE_BR: /^\d{10,11}$/,
/**
* Padrão para validação de CEP brasileiro.
*/
CEP: /^\d{8}$/,
/**
* Padrão para validação de UUID v4.
*/
UUID_V4: /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,
/**
* Padrão para validação de URL.
*/
URL: /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$/,
};
/**
* Mensagens de erro padrão do sistema.
*
* @remarks
* Centralize mensagens de erro aqui para facilitar internacionalização futura.
*
* @example
* ```typescript
* throw new Error(ERROR_MESSAGES.NOT_FOUND)
* ```
*/
exports.ERROR_MESSAGES = {
NOT_FOUND: "Recurso não encontrado",
UNAUTHORIZED: "Não autorizado",
FORBIDDEN: "Acesso negado",
VALIDATION_ERROR: "Erro de validação",
INTERNAL_ERROR: "Erro interno do servidor",
INVALID_CREDENTIALS: "Credenciais inválidas",
EXPIRED_TOKEN: "Token expirado",
INVALID_TOKEN: "Token inválido",
ENTITY_ALREADY_EXISTS: "Entidade já existe",
ENTITY_IN_USE: "Entidade está em uso e não pode ser removida",
INVALID_PAGE_SIZE: "Tamanho de página inválido",
INVALID_PAGE_NUMBER: "Número de página inválido",
};
/**
* Configurações relacionadas a cache.
*
* @example
* ```typescript
* const ttl = CACHE_CONFIG.DEFAULT_TTL_SECONDS
* ```
*/
exports.CACHE_CONFIG = {
/**
* TTL padrão para cache (em segundos) - 5 minutos.
*/
DEFAULT_TTL_SECONDS: 300,
/**
* TTL curto para cache (em segundos) - 1 minuto.
*/
SHORT_TTL_SECONDS: 60,
/**
* TTL longo para cache (em segundos) - 1 hora.
*/
LONG_TTL_SECONDS: 3600,
/**
* TTL muito longo para cache (em segundos) - 24 horas.
*/
VERY_LONG_TTL_SECONDS: 86400,
};