fix(public): distinguish unavailable data from empty results and missing pages
This commit is contained in:
1 parent
db4acbb46e
commit
445ef13846
16 files changed
+608
-169
No files matched your search
@@ -1,3 +1,4 @@
|
||||
import { publicReadFailure } from "./public-read";
|
||||
import "server-only";
|
||||
import { and, asc, count, desc, eq, gt, inArray, or } from "drizzle-orm";
|
||||
import {
|
||||
@@ -65,7 +66,7 @@ export async function loadUserDashboard(userId: number) {
|
||||
.from(Rooms)
|
||||
.orderBy(desc(Rooms.id))
|
||||
.limit(6)
|
||||
.catch(() => null),
|
||||
.catch(publicReadFailure("dashboard.rooms")),
|
||||
db
|
||||
.select({
|
||||
badgeCode: UsersBadges.badgeCode,
|
||||
@@ -74,7 +75,7 @@ export async function loadUserDashboard(userId: number) {
|
||||
.from(UsersBadges)
|
||||
.where(and(eq(UsersBadges.userId, userId), gt(UsersBadges.slotId, 0)))
|
||||
.orderBy(asc(UsersBadges.slotId))
|
||||
.catch(() => []),
|
||||
.catch(publicReadFailure("dashboard.badges")),
|
||||
db
|
||||
.select({
|
||||
achievementScore: UsersSettings.achievementScore,
|
||||
@@ -83,19 +84,19 @@ export async function loadUserDashboard(userId: number) {
|
||||
.from(UsersSettings)
|
||||
.where(eq(UsersSettings.userId, userId))
|
||||
.limit(1)
|
||||
.catch(() => []),
|
||||
.catch(publicReadFailure("dashboard.settings")),
|
||||
db
|
||||
.select({ value: count() })
|
||||
.from(MessengerOffline)
|
||||
.where(eq(MessengerOffline.userId, userId))
|
||||
.catch(() => null),
|
||||
.catch(publicReadFailure("dashboard.unread")),
|
||||
db
|
||||
.select({ referralsTotal: UserReferrals.referralsTotal })
|
||||
.from(UserReferrals)
|
||||
.where(eq(UserReferrals.userId, userId))
|
||||
.orderBy(desc(UserReferrals.id))
|
||||
.limit(1)
|
||||
.catch(() => []),
|
||||
.catch(publicReadFailure("dashboard.referrals")),
|
||||
db
|
||||
.select({
|
||||
id: User.id,
|
||||
@@ -124,7 +125,7 @@ export async function loadUserDashboard(userId: number) {
|
||||
eq(MessengerFriendships.userTwoId, userId),
|
||||
),
|
||||
)
|
||||
.catch(() => []),
|
||||
.catch(publicReadFailure("dashboard.friends")),
|
||||
db
|
||||
.select({ type: UsersCurrency.type, amount: UsersCurrency.amount })
|
||||
.from(UsersCurrency)
|
||||
@@ -134,13 +135,13 @@ export async function loadUserDashboard(userId: number) {
|
||||
inArray(UsersCurrency.type, [0, 5]),
|
||||
),
|
||||
)
|
||||
.catch(() => null),
|
||||
.catch(publicReadFailure("dashboard.currency")),
|
||||
]);
|
||||
|
||||
// Each friendship can have two directional rows; expose users, not edges.
|
||||
const uniqueFriends = [
|
||||
...new Map(
|
||||
friends
|
||||
(friends ?? [])
|
||||
.filter((friend) => friend.id !== userId)
|
||||
.map((friend) => [friend.id, friend]),
|
||||
).values(),
|
||||
@@ -155,8 +156,11 @@ export async function loadUserDashboard(userId: number) {
|
||||
currencySettings,
|
||||
alertRaw,
|
||||
recentRooms,
|
||||
badges,
|
||||
userSettingsRows,
|
||||
badges: badges ?? [],
|
||||
badgesUnavailable: badges === null,
|
||||
userSettingsRows: userSettingsRows ?? [],
|
||||
userSettingsUnavailable: userSettingsRows === null,
|
||||
friendsUnavailable: friends === null,
|
||||
friendCountRows: [{ value: uniqueFriends.length }],
|
||||
unreadCountRows,
|
||||
referralsRows,
|
||||
|
||||
Reference in new issue
Block a user