52 lines
1.2 KiB
SQL
52 lines
1.2 KiB
SQL
-- name: CreateUserBonus :one
|
|
INSERT INTO user_bonuses (
|
|
name,
|
|
description,
|
|
user_id,
|
|
bonus_code,
|
|
reward_amount,
|
|
expires_at
|
|
)
|
|
VALUES ($1, $2, $3, $4, $5, $6)
|
|
RETURNING *;
|
|
-- name: GetAllUserBonuses :many
|
|
SELECT *
|
|
FROM user_bonuses;
|
|
-- name: GetUserBonusByID :one
|
|
SELECT *
|
|
FROM user_bonuses
|
|
WHERE id = $1;
|
|
-- name: GetBonusesByUserID :many
|
|
SELECT *
|
|
FROM user_bonuses
|
|
WHERE user_id = $1;
|
|
-- name: GetBonusStats :one
|
|
SELECT COUNT(*) AS total_bonuses,
|
|
COALESCE(SUM(reward_amount), 0)::bigint AS total_reward_earned,
|
|
COUNT(
|
|
CASE
|
|
WHEN is_claimed = true THEN 1
|
|
END
|
|
) AS claimed_bonuses,
|
|
COUNT(
|
|
CASE
|
|
WHEN expires_at > now() THEN 1
|
|
END
|
|
) AS expired_bonuses
|
|
FROM user_bonuses
|
|
JOIN users ON users.id = user_bonuses.user_id
|
|
WHERE (
|
|
company_id = sqlc.narg('company_id')
|
|
OR sqlc.narg('company_id') IS NULL
|
|
)
|
|
AND (
|
|
user_id = sqlc.narg('user_id')
|
|
OR sqlc.narg('user_id') IS NULL
|
|
);
|
|
-- name: UpdateUserBonus :exec
|
|
UPDATE user_bonuses
|
|
SET is_claimed = $2
|
|
WHERE id = $1;
|
|
-- name: DeleteUserBonus :exec
|
|
DELETE FROM user_bonuses
|
|
WHERE id = $1; |