Files
bot-pontos/backend/internal/domain/audit.go
2026-10-30 23:25:38 -03:00

86 lines
3.1 KiB
Go

package domain
import "time"
type AuditSource string
const (
SourceTelegram AuditSource = "telegram"
SourceWeb AuditSource = "web"
SourceWorker AuditSource = "worker"
SourceCLI AuditSource = "cli"
)
// Tipos de evento gravados em audit_logs.
const (
EventUserRegistered = "user_registered"
EventUserActivated = "user_activated"
EventUserDisabled = "user_disabled"
EventBotAdminChanged = "bot_admin_changed"
EventScheduleChanged = "schedule_changed"
EventUserWindowChanged = "user_window_changed"
EventCredentialsChanged = "credentials_changed"
EventCredentialsTested = "credentials_tested"
EventNotificationsEnabled = "notifications_enabled"
EventNotificationsDisabled = "notifications_disabled"
EventNotificationsPausedAPI = "notifications_paused_api_failure"
EventPointAPIFailure = "point_api_failure"
EventPointAPIOutageStarted = "point_api_outage_started"
EventPointAPIOutageEnded = "point_api_outage_ended"
EventInvalidPointHistory = "invalid_point_history"
EventInvalidWorkday = "invalid_workday_calculation"
EventNotificationScheduled = "notification_scheduled"
EventNotificationSent = "notification_sent"
EventNotificationFailed = "notification_failed"
EventNotificationExpired = "notification_expired"
EventNotificationCancelled = "notification_cancelled"
EventNotificationResent = "notification_resent"
EventInterruptedSending = "notification_interrupted"
EventDayNoPoints = "day_no_points"
EventDayNotWorked = "day_not_worked"
EventDayResumed = "day_resumed"
EventHolidaySyncFailed = "holiday_sync_failed"
EventHolidaySynced = "holiday_synced"
EventHolidayAdded = "holiday_added"
EventHolidayRemoved = "holiday_removed"
EventSettingsChanged = "settings_changed"
EventWebLogin = "web_login"
EventWebLoginFailed = "web_login_failed"
EventWebLogout = "web_logout"
EventWebAccountCreated = "web_account_created"
EventWebAccountChanged = "web_account_changed"
EventWebAccountDeleted = "web_account_deleted"
EventWebPasswordReset = "web_password_reset"
EventRetentionApplied = "retention_applied"
EventEncryptionKeyRotated = "encryption_key_rotated"
EventTelegramFailure = "telegram_failure"
EventScheduleWindowViolation = "schedule_window_violation"
)
// AuditEntry é um evento a ser gravado. Details nunca deve conter segredos.
type AuditEntry struct {
Source AuditSource
ActorUserID *int64
ActorAccount *int64
TargetUserID *int64
EventType string
Success bool
Details map[string]any
}
// AuditLog é um evento lido do banco, com nomes para exibição.
type AuditLog struct {
ID int64
OccurredAt time.Time
Source AuditSource
ActorUserID *int64
ActorUserName *string
ActorAccount *int64
ActorUsername *string
TargetUserID *int64
TargetUserName *string
EventType string
Success bool
Details map[string]any
}