40 lines
1.5 KiB
SQL
40 lines
1.5 KiB
SQL
-- name: CreateActivityLog :one
|
|
INSERT INTO activity_logs (
|
|
actor_id, actor_role, action, resource_type, resource_id,
|
|
message, metadata, ip_address, user_agent
|
|
) VALUES (
|
|
sqlc.narg('actor_id'), sqlc.narg('actor_role'),
|
|
@action, @resource_type, sqlc.narg('resource_id'),
|
|
sqlc.narg('message'), COALESCE(sqlc.narg('metadata'), '{}'::jsonb),
|
|
sqlc.narg('ip_address'), sqlc.narg('user_agent')
|
|
)
|
|
RETURNING *;
|
|
|
|
-- name: ListActivityLogs :many
|
|
SELECT
|
|
COUNT(*) OVER() AS total_count,
|
|
al.id,
|
|
al.actor_id,
|
|
al.actor_role,
|
|
al.action,
|
|
al.resource_type,
|
|
al.resource_id,
|
|
al.message,
|
|
al.metadata,
|
|
al.ip_address,
|
|
al.user_agent,
|
|
al.created_at
|
|
FROM activity_logs al
|
|
WHERE
|
|
(sqlc.narg('filter_actor_id')::bigint IS NULL OR al.actor_id = sqlc.narg('filter_actor_id'))
|
|
AND (sqlc.narg('filter_action')::text IS NULL OR al.action = sqlc.narg('filter_action'))
|
|
AND (sqlc.narg('filter_resource_type')::text IS NULL OR al.resource_type = sqlc.narg('filter_resource_type'))
|
|
AND (sqlc.narg('filter_resource_id')::bigint IS NULL OR al.resource_id = sqlc.narg('filter_resource_id'))
|
|
AND (sqlc.narg('filter_after')::timestamptz IS NULL OR al.created_at >= sqlc.narg('filter_after'))
|
|
AND (sqlc.narg('filter_before')::timestamptz IS NULL OR al.created_at <= sqlc.narg('filter_before'))
|
|
ORDER BY al.created_at DESC
|
|
LIMIT @log_limit OFFSET @log_offset;
|
|
|
|
-- name: GetActivityLogByID :one
|
|
SELECT * FROM activity_logs WHERE id = $1;
|