package components import ( "context" "fmt" "time" ) // AuditLogEntry represents an audit log entry for display type AuditLogEntry struct { ID uint Action string EntityType string EntityID uint Username string UserID uint Timestamp time.Time Details map[string]interface{} DetailsSummary string } type AuditLogsData struct { Logs []AuditLogEntry TotalPages int CurrentPage int TotalRecords int FilterAction string FilterEntity string FilterUser string FilterDateFrom string FilterDateTo string } // AdminAuditLogs renders the audit logs page templ AdminAuditLogs(ctx context.Context, data AuditLogsData) { @LayoutWithContext("Audit Logs", ctx) {

Audit Logs

Export Logs

Filter Logs

Clear Filters

Audit Log Entries

Total entries: {fmt.Sprint(data.TotalRecords)}
if len(data.Logs) == 0 { } else { for _, log := range data.Logs { } }
Timestamp User Action Entity Details
No audit logs found matching your filters.
{log.Timestamp.Format("2006-01-02 15:04:05")} {log.Username} {log.Action} {log.EntityType} (ID: {fmt.Sprint(log.EntityID)})
if data.TotalPages > 1 {
Showing page {fmt.Sprint(data.CurrentPage)} of {fmt.Sprint(data.TotalPages)}
if data.CurrentPage > 1 { Previous } if data.CurrentPage < data.TotalPages { Next }
}
} } // Helper functions func getActionClass(action string) string { baseClass := "px-2 py-1 text-xs rounded-full " switch action { case "create": return baseClass + "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300" case "update": return baseClass + "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300" case "delete": return baseClass + "bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300" case "login": return baseClass + "bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-300" case "logout": return baseClass + "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-300" default: return baseClass + "bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300" } } func buildPaginationURL(data AuditLogsData, page int) templ.SafeURL { url := fmt.Sprintf("/admin/audit?page=%d", page) if data.FilterAction != "" { url += fmt.Sprintf("&action=%s", data.FilterAction) } if data.FilterEntity != "" { url += fmt.Sprintf("&entity=%s", data.FilterEntity) } if data.FilterUser != "" { url += fmt.Sprintf("&user=%s", data.FilterUser) } if data.FilterDateFrom != "" { url += fmt.Sprintf("&date_from=%s", data.FilterDateFrom) } if data.FilterDateTo != "" { url += fmt.Sprintf("&date_to=%s", data.FilterDateTo) } return templ.SafeURL(url) }