UNPKG

@anpdgovbr/shared-types

Version:

Biblioteca central de tipos TypeScript compartilhados para os projetos da ANPD (BETA)

291 lines (290 loc) 7.34 kB
"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, };