implement update user, update password and delete account
This commit is contained in:
72
app/settings/api/queue/delete-user-data.ts
Normal file
72
app/settings/api/queue/delete-user-data.ts
Normal file
@ -0,0 +1,72 @@
|
||||
import { Queue } from "quirrel/blitz";
|
||||
|
||||
import db, { MembershipRole } from "../../../../db";
|
||||
import appLogger from "../../../../integrations/logger";
|
||||
|
||||
const logger = appLogger.child({ queue: "delete-user-data" });
|
||||
|
||||
type Payload = {
|
||||
userId: string;
|
||||
};
|
||||
|
||||
const deleteUserData = Queue<Payload>("api/queue/delete-user-data", async ({ userId }) => {
|
||||
const user = await db.user.findFirst({
|
||||
where: { id: userId },
|
||||
include: {
|
||||
memberships: {
|
||||
include: {
|
||||
organization: {
|
||||
include: { memberships: { include: { user: true } } },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
if (!user) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (user.memberships[0]!.role) {
|
||||
case MembershipRole.OWNER: {
|
||||
const organization = user.memberships[0]!.organization;
|
||||
const where = { organizationId: organization.id };
|
||||
await Promise.all<unknown>([
|
||||
db.notificationSubscription.deleteMany({ where }),
|
||||
db.phoneCall.deleteMany({ where }),
|
||||
db.message.deleteMany({ where }),
|
||||
db.processingPhoneNumber.deleteMany({ where }),
|
||||
]);
|
||||
await db.phoneNumber.deleteMany({ where });
|
||||
|
||||
const orgMembers = organization.memberships
|
||||
.map((membership) => membership.user!)
|
||||
.filter((user) => user !== null);
|
||||
await Promise.all(
|
||||
orgMembers.map((member) =>
|
||||
Promise.all([
|
||||
db.token.deleteMany({ where: { userId: member.id } }),
|
||||
db.session.deleteMany({ where: { userId: member.id } }),
|
||||
db.membership.deleteMany({ where: { userId: member.id } }),
|
||||
db.user.delete({ where: { id: member.id } }),
|
||||
]),
|
||||
),
|
||||
);
|
||||
await db.organization.delete({ where: { id: organization.id } });
|
||||
break;
|
||||
}
|
||||
case MembershipRole.USER: {
|
||||
await Promise.all([
|
||||
db.token.deleteMany({ where: { userId: user.id } }),
|
||||
db.session.deleteMany({ where: { userId: user.id } }),
|
||||
db.user.delete({ where: { id: user.id } }),
|
||||
db.membership.deleteMany({ where: { userId: user.id } }),
|
||||
]);
|
||||
break;
|
||||
}
|
||||
case MembershipRole.ADMIN:
|
||||
// nothing to do here?
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
export default deleteUserData;
|
28
app/settings/api/queue/notify-email-change.ts
Normal file
28
app/settings/api/queue/notify-email-change.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import { Queue } from "quirrel/blitz";
|
||||
|
||||
import appLogger from "../../../../integrations/logger";
|
||||
import { sendEmail } from "../../../../integrations/ses";
|
||||
|
||||
const logger = appLogger.child({ queue: "notify-email-change" });
|
||||
|
||||
type Payload = {
|
||||
oldEmail: string;
|
||||
newEmail: string;
|
||||
};
|
||||
|
||||
const notifyEmailChangeQueue = Queue<Payload>("api/queue/notify-email-change", async ({ oldEmail, newEmail }) => {
|
||||
await Promise.all([
|
||||
sendEmail({
|
||||
recipients: [oldEmail],
|
||||
subject: "",
|
||||
body: "",
|
||||
}),
|
||||
sendEmail({
|
||||
recipients: [newEmail],
|
||||
subject: "",
|
||||
body: "",
|
||||
}),
|
||||
]);
|
||||
});
|
||||
|
||||
export default notifyEmailChangeQueue;
|
Reference in New Issue
Block a user