fix(admin-service): 修复通知查询时publishedAt为null的问题

问题:当 publishedAt 为 NULL(表示立即发布)时,Prisma 的
`publishedAt: { lte: now }` 条件不匹配,导致通知无法显示

修复:将查询条件改为 OR 逻辑:
- publishedAt 为 null(立即发布)
- publishedAt <= now(定时发布且已到时间)

影响的方法:
- findNotificationsForUser
- countUnreadForUser
- markAllAsRead

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-02 05:56:43 -08:00
parent fea0b42223
commit e2cf3c3d7e
1 changed files with 15 additions and 8 deletions

View File

@ -146,11 +146,13 @@ export class NotificationRepositoryImpl implements NotificationRepository {
const notifications = await this.prisma.notification.findMany({
where: {
isEnabled: true,
publishedAt: { lte: now },
OR: [{ expiresAt: null }, { expiresAt: { gt: now } }],
...(params.type && { type: params.type }),
// 目标用户筛选
AND: [
// publishedAt 为 null 表示立即发布,或者 publishedAt <= now
{ OR: [{ publishedAt: null }, { publishedAt: { lte: now } }] },
// expiresAt 为 null 表示永不过期,或者 expiresAt > now
{ OR: [{ expiresAt: null }, { expiresAt: { gt: now } }] },
// 目标用户筛选
{
OR: [
// ALL: 发给所有人
@ -204,13 +206,15 @@ export class NotificationRepositoryImpl implements NotificationRepository {
const count = await this.prisma.notification.count({
where: {
isEnabled: true,
publishedAt: { lte: now },
OR: [{ expiresAt: null }, { expiresAt: { gt: now } }],
readRecords: {
none: { userSerialNum },
},
// 目标用户筛选
AND: [
// publishedAt 为 null 表示立即发布,或者 publishedAt <= now
{ OR: [{ publishedAt: null }, { publishedAt: { lte: now } }] },
// expiresAt 为 null 表示永不过期,或者 expiresAt > now
{ OR: [{ expiresAt: null }, { expiresAt: { gt: now } }] },
// 目标用户筛选
{
OR: [
{ targetType: 'ALL' },
@ -265,12 +269,15 @@ export class NotificationRepositoryImpl implements NotificationRepository {
const unreadNotifications = await this.prisma.notification.findMany({
where: {
isEnabled: true,
publishedAt: { lte: now },
OR: [{ expiresAt: null }, { expiresAt: { gt: now } }],
readRecords: {
none: { userSerialNum },
},
AND: [
// publishedAt 为 null 表示立即发布,或者 publishedAt <= now
{ OR: [{ publishedAt: null }, { publishedAt: { lte: now } }] },
// expiresAt 为 null 表示永不过期,或者 expiresAt > now
{ OR: [{ expiresAt: null }, { expiresAt: { gt: now } }] },
// 目标用户筛选
{
OR: [
{ targetType: 'ALL' },