Yimaru-BackEnd/db/query/activity_logs.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;