mirror of
https://github.com/movie-web/backend.git
synced 2025-09-13 18:13:26 +00:00
Add bookmark import endpoint
This commit is contained in:
@@ -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',
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user