mirror of
https://github.com/sussy-code/backend.git
synced 2026-04-20 00:12:03 +00:00
Add bookmark import endpoint
This commit is contained in:
parent
787c8a96d6
commit
f54b4f6553
1 changed files with 41 additions and 3 deletions
|
|
@ -6,8 +6,14 @@ import {
|
|||
import { StatusError } from '@/services/error';
|
||||
import { handle } from '@/services/handler';
|
||||
import { makeRouter } from '@/services/router';
|
||||
import { randomUUID } from 'crypto';
|
||||
import { z } from 'zod';
|
||||
|
||||
const bookmarkDataSchema = z.object({
|
||||
tmdbId: z.string(),
|
||||
meta: bookmarkMetaSchema,
|
||||
});
|
||||
|
||||
export const userBookmarkRouter = makeRouter((app) => {
|
||||
app.get(
|
||||
'/users/:uid/bookmarks',
|
||||
|
|
@ -40,9 +46,7 @@ export const userBookmarkRouter = makeRouter((app) => {
|
|||
uid: z.string(),
|
||||
tmdbid: z.string(),
|
||||
}),
|
||||
body: z.object({
|
||||
meta: bookmarkMetaSchema,
|
||||
}),
|
||||
body: bookmarkDataSchema,
|
||||
},
|
||||
},
|
||||
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(
|
||||
'/users/:uid/bookmarks/:tmdbid',
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue