mirror of
https://github.com/movie-web/backend.git
synced 2025-09-13 18:13:26 +00:00
64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import { Bookmark } from '@/db/models/Bookmark';
|
|
import { ProgressItem } from '@/db/models/ProgressItem';
|
|
import { Session } from '@/db/models/Session';
|
|
import { User } from '@/db/models/User';
|
|
import { UserSettings } from '@/db/models/UserSettings';
|
|
import { StatusError } from '@/services/error';
|
|
import { handle } from '@/services/handler';
|
|
import { makeRouter } from '@/services/router';
|
|
import { z } from 'zod';
|
|
|
|
export const userDeleteRouter = makeRouter((app) => {
|
|
app.delete(
|
|
'/users/:uid',
|
|
{
|
|
schema: {
|
|
params: z.object({
|
|
uid: z.string(),
|
|
}),
|
|
},
|
|
},
|
|
handle(async ({ auth, params, em }) => {
|
|
await auth.assert();
|
|
|
|
const user = await em.findOne(User, { id: params.uid });
|
|
if (!user) throw new StatusError('User does not exist', 404);
|
|
|
|
if (auth.user.id !== user.id)
|
|
throw new StatusError('Cannot delete user other than yourself', 403);
|
|
|
|
// delete data
|
|
await em
|
|
.createQueryBuilder(Bookmark)
|
|
.delete()
|
|
.where({
|
|
userId: user.id,
|
|
})
|
|
.execute();
|
|
await em
|
|
.createQueryBuilder(ProgressItem)
|
|
.delete()
|
|
.where({
|
|
userId: user.id,
|
|
})
|
|
.execute();
|
|
await em
|
|
.createQueryBuilder(UserSettings)
|
|
.delete()
|
|
.where({
|
|
id: user.id,
|
|
})
|
|
.execute();
|
|
|
|
// delete account & login sessions
|
|
const sessions = await em.find(Session, { user: user.id });
|
|
await em.remove([user, ...sessions]);
|
|
await em.flush();
|
|
|
|
return {
|
|
id: user.id,
|
|
};
|
|
}),
|
|
);
|
|
});
|