mirror of
https://github.com/movie-web/backend.git
synced 2025-09-13 13:03:26 +00:00
101 lines
2.3 KiB
TypeScript
101 lines
2.3 KiB
TypeScript
import {
|
|
Bookmark,
|
|
bookmarkMetaSchema,
|
|
formatBookmark,
|
|
} from '@/db/models/Bookmark';
|
|
import { StatusError } from '@/services/error';
|
|
import { handle } from '@/services/handler';
|
|
import { makeRouter } from '@/services/router';
|
|
import { z } from 'zod';
|
|
|
|
export const userBookmarkRouter = makeRouter((app) => {
|
|
app.get(
|
|
'/users/:uid/bookmarks',
|
|
{
|
|
schema: {
|
|
params: z.object({
|
|
uid: z.string(),
|
|
}),
|
|
},
|
|
},
|
|
handle(async ({ auth, params, em }) => {
|
|
await auth.assert();
|
|
|
|
if (auth.user.id !== params.uid)
|
|
throw new StatusError('Cannot access other user information', 403);
|
|
|
|
const bookmarks = await em.find(Bookmark, {
|
|
userId: params.uid,
|
|
});
|
|
|
|
return bookmarks.map(formatBookmark);
|
|
}),
|
|
);
|
|
|
|
app.post(
|
|
'/users/:uid/bookmarks/:tmdbid',
|
|
{
|
|
schema: {
|
|
params: z.object({
|
|
uid: z.string(),
|
|
tmdbid: z.string(),
|
|
}),
|
|
body: z.object({
|
|
meta: bookmarkMetaSchema,
|
|
}),
|
|
},
|
|
},
|
|
handle(async ({ auth, params, body, em }) => {
|
|
await auth.assert();
|
|
|
|
if (auth.user.id !== params.uid)
|
|
throw new StatusError('Cannot modify user other than yourself', 403);
|
|
|
|
const oldBookmark = await em.findOne(Bookmark, {
|
|
userId: params.uid,
|
|
tmdbId: params.tmdbid,
|
|
});
|
|
if (oldBookmark) throw new StatusError('Already bookmarked', 400);
|
|
|
|
const bookmark = new Bookmark();
|
|
em.assign(bookmark, {
|
|
userId: params.uid,
|
|
tmdbId: params.tmdbid,
|
|
meta: body.meta,
|
|
updatedAt: new Date(),
|
|
});
|
|
|
|
await em.persistAndFlush(bookmark);
|
|
return formatBookmark(bookmark);
|
|
}),
|
|
);
|
|
|
|
app.delete(
|
|
'/users/:uid/bookmarks/:tmdbid',
|
|
{
|
|
schema: {
|
|
params: z.object({
|
|
uid: z.string(),
|
|
tmdbid: z.string(),
|
|
}),
|
|
},
|
|
},
|
|
handle(async ({ auth, params, em }) => {
|
|
await auth.assert();
|
|
|
|
if (auth.user.id !== params.uid)
|
|
throw new StatusError('Cannot modify user other than yourself', 403);
|
|
|
|
const bookmark = await em.findOne(Bookmark, {
|
|
userId: params.uid,
|
|
tmdbId: params.tmdbid,
|
|
});
|
|
|
|
if (!bookmark) return { tmdbId: params.tmdbid };
|
|
|
|
await em.removeAndFlush(bookmark);
|
|
return { tmdbId: params.tmdbid };
|
|
}),
|
|
);
|
|
});
|