Add bookmark import endpoint

This commit is contained in:
William Oldham
2023-11-18 19:57:03 +00:00
parent 787c8a96d6
commit f54b4f6553

View File

@@ -6,8 +6,14 @@ import {
import { StatusError } from '@/services/error'; import { StatusError } from '@/services/error';
import { handle } from '@/services/handler'; import { handle } from '@/services/handler';
import { makeRouter } from '@/services/router'; import { makeRouter } from '@/services/router';
import { randomUUID } from 'crypto';
import { z } from 'zod'; import { z } from 'zod';
const bookmarkDataSchema = z.object({
tmdbId: z.string(),
meta: bookmarkMetaSchema,
});
export const userBookmarkRouter = makeRouter((app) => { export const userBookmarkRouter = makeRouter((app) => {
app.get( app.get(
'/users/:uid/bookmarks', '/users/:uid/bookmarks',
@@ -40,9 +46,7 @@ export const userBookmarkRouter = makeRouter((app) => {
uid: z.string(), uid: z.string(),
tmdbid: z.string(), tmdbid: z.string(),
}), }),
body: z.object({ body: bookmarkDataSchema,
meta: bookmarkMetaSchema,
}),
}, },
}, },
handle(async ({ auth, params, body, em }) => { handle(async ({ auth, params, body, em }) => {
@@ -70,6 +74,40 @@ export const userBookmarkRouter = makeRouter((app) => {
}), }),
); );
app.put(
'/users/:uid/bookmarks',
{
schema: {
params: z.object({
uid: z.string(),
}),
body: z.array(bookmarkDataSchema),
},
},
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 bookmarks = await em.upsertMany(
Bookmark,
body.map((item) => ({
userId: params.uid,
tmdbId: item.tmdbId,
meta: item.meta,
updatedAt: new Date(),
})),
{
onConflictFields: ['tmdbId', 'userId'],
},
);
await em.flush();
return bookmarks.map(formatBookmark);
}),
);
app.delete( app.delete(
'/users/:uid/bookmarks/:tmdbid', '/users/:uid/bookmarks/:tmdbid',
{ {