Files
martial-master/database/martial-db/test_invite_code_generation.sql
宅房 1ca0f6a7f6
All checks were successful
continuous-integration/drone/push Build is passing
fix bugs
2025-12-12 13:49:00 +08:00

117 lines
3.2 KiB
SQL

-- =====================================================
-- 测试邀请码生成功能
-- 执行时间: 2025-12-12
-- =====================================================
USE blade;
-- =====================================================
-- 1. 插入测试数据
-- =====================================================
-- 为评委生成测试邀请码(使用现有字段)
INSERT INTO martial_judge_invite (
id, competition_id, judge_id, invite_code, role,
venue_id, projects, expire_time, is_used,
status, create_time
) VALUES (
1001, 1, 1, 'TEST01', 'judge',
1, '["女子组长拳","男子组陈氏太极拳"]',
DATE_ADD(NOW(), INTERVAL 30 DAY), 0,
1, NOW()
);
-- 为裁判长生成邀请码
INSERT INTO martial_judge_invite (
id, competition_id, judge_id, invite_code, role,
venue_id, projects, expire_time, is_used,
status, create_time
) VALUES (
1002, 1, 2, 'ADMIN1', 'chief_judge',
NULL, NULL,
DATE_ADD(NOW(), INTERVAL 30 DAY), 0,
1, NOW()
);
-- =====================================================
-- 2. 查询测试
-- =====================================================
-- 查询某个评委的有效邀请码
SELECT
ji.id,
ji.invite_code,
ji.role,
ji.expire_time,
ji.is_used,
ji.status,
j.name AS judge_name,
c.competition_name
FROM martial_judge_invite ji
LEFT JOIN martial_judge j ON ji.judge_id = j.id
LEFT JOIN martial_competition c ON ji.competition_id = c.id
WHERE ji.competition_id = 1
AND ji.judge_id = 1
AND ji.status = 1
AND ji.is_deleted = 0
AND ji.expire_time > NOW()
ORDER BY ji.create_time DESC
LIMIT 1;
-- 查询所有有效邀请码
SELECT
ji.id,
ji.invite_code,
ji.role,
j.name AS judge_name,
ji.expire_time,
ji.is_used,
CASE
WHEN ji.is_used = 1 THEN '已使用'
WHEN ji.expire_time < NOW() THEN '已过期'
WHEN ji.status = 0 THEN '已禁用'
ELSE '待使用'
END AS status_text
FROM martial_judge_invite ji
LEFT JOIN martial_judge j ON ji.judge_id = j.id
WHERE ji.competition_id = 1
AND ji.is_deleted = 0
ORDER BY ji.create_time DESC;
-- =====================================================
-- 3. 统计查询
-- =====================================================
-- 统计某个赛事的邀请码状态
SELECT
COUNT(*) AS total,
SUM(CASE WHEN is_used = 0 AND status = 1 AND expire_time > NOW() THEN 1 ELSE 0 END) AS available,
SUM(CASE WHEN is_used = 1 THEN 1 ELSE 0 END) AS used,
SUM(CASE WHEN expire_time <= NOW() THEN 1 ELSE 0 END) AS expired,
SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) AS disabled
FROM martial_judge_invite
WHERE competition_id = 1
AND is_deleted = 0;
-- =====================================================
-- 4. 验证邀请码唯一性
-- =====================================================
-- 检查邀请码是否重复
SELECT
invite_code,
COUNT(*) AS count
FROM martial_judge_invite
WHERE is_deleted = 0
GROUP BY invite_code
HAVING COUNT(*) > 1;
-- =====================================================
-- 5. 清理测试数据(可选)
-- =====================================================
-- 删除测试数据
-- DELETE FROM martial_judge_invite WHERE id IN (1001, 1002);
SELECT 'Test data inserted successfully!' AS status;