feat: enhance login process with IP capture and improved error handling

- Implemented an internal mutation for login that captures the user's IP address and user agent for better security and tracking.
- Enhanced the HTTP login endpoint to extract and log client IP, improving the overall authentication process.
- Added validation for IP addresses to ensure only valid formats are recorded, enhancing data integrity.
- Updated the login mutation to handle rate limiting and user status checks more effectively, providing clearer feedback on login attempts.
This commit is contained in:
2025-11-04 03:26:34 -03:00
parent f278ad4d17
commit c6c88f85a7
11 changed files with 3531 additions and 70 deletions

View File

@@ -151,11 +151,43 @@ export default defineSchema({
atestados: defineTable({
funcionarioId: v.id("funcionarios"),
tipo: v.union(
v.literal("atestado_medico"),
v.literal("declaracao_comparecimento")
),
dataInicio: v.string(),
dataFim: v.string(),
cid: v.string(),
descricao: v.string(),
}),
cid: v.optional(v.string()), // Apenas para atestado médico
observacoes: v.optional(v.string()),
documentoId: v.optional(v.id("_storage")),
criadoPor: v.id("usuarios"),
criadoEm: v.number(),
})
.index("by_funcionario", ["funcionarioId"])
.index("by_tipo", ["tipo"])
.index("by_data_inicio", ["dataInicio"])
.index("by_funcionario_and_tipo", ["funcionarioId", "tipo"]),
licencas: defineTable({
funcionarioId: v.id("funcionarios"),
tipo: v.union(
v.literal("maternidade"),
v.literal("paternidade")
),
dataInicio: v.string(),
dataFim: v.string(),
documentoId: v.optional(v.id("_storage")),
observacoes: v.optional(v.string()),
licencaOriginalId: v.optional(v.id("licencas")), // Para prorrogações
ehProrrogacao: v.boolean(),
criadoPor: v.id("usuarios"),
criadoEm: v.number(),
})
.index("by_funcionario", ["funcionarioId"])
.index("by_tipo", ["tipo"])
.index("by_data_inicio", ["dataInicio"])
.index("by_licenca_original", ["licencaOriginalId"])
.index("by_funcionario_and_tipo", ["funcionarioId", "tipo"]),
solicitacoesFerias: defineTable({
funcionarioId: v.id("funcionarios"),