refactor(api): replace URLSearchParams param with structured object in listMessages

This commit is contained in:
MythEclipse
2026-06-03 20:29:34 +07:00
parent 67daea2f52
commit a39c7a91c2
2 changed files with 22 additions and 11 deletions
@@ -29,8 +29,9 @@ export function useMessages() {
const [cursor, setCursor] = useState<string | null>(null); const [cursor, setCursor] = useState<string | null>(null);
const [hasMore, setHasMore] = useState(false); const [hasMore, setHasMore] = useState(false);
const currentGuild = useRef<string | null>(null); const currentGuild = useRef<string | null>(null);
const currentChannel = useRef<string | undefined>(undefined);
const fetchMessages = useCallback(async (guildId?: string) => { const fetchMessages = useCallback(async (guildId?: string, channelId?: string) => {
if (!guildId) { if (!guildId) {
setMessages([]); setMessages([]);
setCursor(null); setCursor(null);
@@ -38,14 +39,15 @@ export function useMessages() {
return []; return [];
} }
currentGuild.current = guildId; currentGuild.current = guildId;
currentChannel.current = channelId;
setLoading(true); setLoading(true);
setError(null); setError(null);
try { try {
const params = new URLSearchParams({ const result = await listMessages({
limit: String(PAGE_SIZE),
guildId, guildId,
channelId,
limit: PAGE_SIZE,
}); });
const result = await listMessages(params);
if (currentGuild.current === guildId) { if (currentGuild.current === guildId) {
setMessages(result.data); setMessages(result.data);
setCursor(result.nextCursor); setCursor(result.nextCursor);
@@ -65,12 +67,12 @@ export function useMessages() {
if (!cursor || !currentGuild.current || loadingMore) return; if (!cursor || !currentGuild.current || loadingMore) return;
setLoadingMore(true); setLoadingMore(true);
try { try {
const params = new URLSearchParams({ const result = await listMessages({
limit: String(PAGE_SIZE),
guildId: currentGuild.current, guildId: currentGuild.current,
channelId: currentChannel.current,
cursor, cursor,
limit: PAGE_SIZE,
}); });
const result = await listMessages(params);
setMessages((prev) => [...prev, ...result.data]); setMessages((prev) => [...prev, ...result.data]);
setCursor(result.nextCursor); setCursor(result.nextCursor);
setHasMore(!!result.nextCursor); setHasMore(!!result.nextCursor);
+13 -4
View File
@@ -151,10 +151,19 @@ export type DashboardTab = "live" | "messages" | "analytics";
// ─── Messages ──────────────────────────────────────────────────────────────── // ─── Messages ────────────────────────────────────────────────────────────────
export function listMessages( export function listMessages(params: {
params: URLSearchParams, guildId: string;
): Promise<PageResult<MessageRecord>> { channelId?: string;
return request<PageResult<MessageRecord>>(`/api/messages?${params}`); limit?: number;
cursor?: string;
}): Promise<PageResult<MessageRecord>> {
const sp = new URLSearchParams({
guildId: params.guildId,
limit: String(params.limit ?? 100),
...(params.channelId && { channelId: params.channelId }),
...(params.cursor && { cursor: params.cursor }),
});
return request<PageResult<MessageRecord>>(`/api/messages?${sp}`);
} }
export function listReview( export function listReview(