feat: add delete user
This commit is contained in:
parent
4746374ce4
commit
caaefa72c5
11
app/routes/account/delete.tsx
Normal file
11
app/routes/account/delete.tsx
Normal 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("/");
|
||||
};
|
||||
|
|
@ -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>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 },
|
||||
|
|
|
|||
Loading…
Reference in a new issue