Some checks failed
CI / Scraper / Lint (pull_request) Successful in 9s
CI / UI / Build (push) Successful in 23s
CI / Scraper / Test (pull_request) Successful in 24s
CI / Scraper / Docker Push (pull_request) Has been skipped
CI / UI / Build (pull_request) Successful in 16s
CI / UI / Docker Push (pull_request) Has been skipped
CI / UI / Docker Push (push) Successful in 30s
iOS CI / Test (push) Has been cancelled
iOS CI / Build (push) Has been cancelled
iOS CI / Build (pull_request) Failing after 19m9s
iOS CI / Test (pull_request) Has been cancelled
/api/comments/[id] and /api/comments/[slug] were ambiguous dynamic segments at the same path level, causing a build error. Moved the vote handler to the singular /api/comment/ prefix and updated all callers (web + iOS).
34 lines
1000 B
TypeScript
34 lines
1000 B
TypeScript
import { json, error } from '@sveltejs/kit';
|
|
import type { RequestHandler } from './$types';
|
|
import { voteComment } from '$lib/server/pocketbase';
|
|
import { log } from '$lib/server/logger';
|
|
|
|
/**
|
|
* POST /api/comment/[id]/vote
|
|
* Body: { vote: 'up' | 'down' }
|
|
* Casts, changes, or toggles off a vote on a comment.
|
|
* Works for both authenticated and anonymous users (session-scoped).
|
|
* Returns the updated comment.
|
|
*/
|
|
export const POST: RequestHandler = async ({ params, request, locals }) => {
|
|
const { id } = params;
|
|
let body: { vote?: string };
|
|
try {
|
|
body = await request.json();
|
|
} catch {
|
|
error(400, 'Invalid JSON body');
|
|
}
|
|
|
|
if (body.vote !== 'up' && body.vote !== 'down') {
|
|
error(400, 'vote must be "up" or "down"');
|
|
}
|
|
|
|
try {
|
|
const updated = await voteComment(id, body.vote, locals.sessionId, locals.user?.id);
|
|
return json(updated);
|
|
} catch (e) {
|
|
log.error('api/comment/[id]/vote', 'voteComment failed', { id, err: String(e) });
|
|
error(500, 'Failed to record vote');
|
|
}
|
|
};
|