UI-UX/src/app/api/me/signin/route.ts

64 lines
1.6 KiB
TypeScript

import { prisma } from "@/lib/prisma";
import { getCurrentUser } from "@/lib/current-user";
import { ok, ERR, sanitizeBigInt } from "@/lib/api-response";
/**
* POST /api/me/signin
* 用户每日签到 · 记录连续签到天数。
* 已取消每日票数额度概念,签到不再向票数余额发放奖励。
*/
export async function POST() {
try {
const user = await getCurrentUser();
if (!user) return ERR.UNAUTHORIZED();
const today = startOfDay();
const yesterday = new Date(today);
yesterday.setDate(yesterday.getDate() - 1);
// 已签到则直接返回
const existing = await prisma.signIn.findUnique({
where: { userId_date: { userId: user.id, date: today } },
});
if (existing) {
return ok(
sanitizeBigInt({
alreadySigned: true,
streak: existing.streak,
}),
);
}
// 查询昨日签到判断连签
const yest = await prisma.signIn.findUnique({
where: { userId_date: { userId: user.id, date: yesterday } },
});
const streak = yest ? yest.streak + 1 : 1;
const result = await prisma.signIn.create({
data: {
userId: user.id,
date: today,
streak,
bonusVotes: 0, // 保留字段,但不再发放
},
});
return ok(
sanitizeBigInt({
alreadySigned: false,
streak: result.streak,
}),
);
} catch (e) {
console.error("[POST /api/me/signin]", e);
return ERR.INTERNAL();
}
}
function startOfDay(d = new Date()): Date {
const x = new Date(d);
x.setHours(0, 0, 0, 0);
return x;
}