feat: add delete user

This commit is contained in:
Nicola Zambello 2022-02-14 17:55:13 +01:00
parent 4746374ce4
commit caaefa72c5
3 changed files with 54 additions and 0 deletions

View file

@ -0,0 +1,11 @@
import type { ActionFunction, LoaderFunction } from "remix";
import { redirect } from "remix";
import { deleteUser } from "~/utils/session.server";
export const action: ActionFunction = async ({ request }) => {
return deleteUser(request);
};
export const loader: LoaderFunction = async () => {
return redirect("/");
};

View file

@ -353,6 +353,34 @@ export default function AccountPreferencesRoute() {
</button>
</div>
</Form>
<div className="flex justify-center align-center mt-6">
<label
htmlFor="delete-user-modal"
className="btn btn-error modal-button"
>
Delete user
</label>
</div>
<input type="checkbox" id="delete-user-modal" className="modal-toggle" />
<div className="modal">
<div className="modal-box absolute left-[10%] right-[10%] top-[40%] w-[80%] rounded-lg">
<p>
Do you really want to delete your account? All your data will be
permanently deleted.
</p>
<div className="modal-action">
<Form action="/account/delete" method="post">
<button type="submit" className="btn btn-error">
Delete
</button>
</Form>
<label htmlFor="delete-user-modal" className="btn">
Cancel
</label>
</div>
</div>
</div>
</>
);
}

View file

@ -68,6 +68,21 @@ export async function updateUser({ id, ...data }: UpdateUserForm) {
return user;
}
export async function deleteUser(request: Request) {
const userId = await getUserId(request);
if (!userId) return null;
const deletedUser = await db.user.delete({ where: { id: userId } });
if (!deletedUser) return null;
const session = await storage.getSession(request.headers.get("Cookie"));
return redirect("/", {
headers: {
"Set-Cookie": await storage.destroySession(session),
},
});
}
export async function login({ username, password }: LoginForm) {
const user = await db.user.findUnique({
where: { username },