MCPcopy Index your code
hub / github.com/DeepNotesApp/DeepNotes / deleteUser

Function deleteUser

apps/manager/src/index.ts:117–289  ·  view source on GitHub ↗
(userId: string)

Source from the content-addressed store, hash-verified

115}
116
117async function deleteUser(userId: string) {
118 await dataAbstraction().transaction(async (dtrx) => {
119 // Check if any group has more than one member
120
121 const memberships = await GroupMemberModel.query(dtrx.trx)
122 .where('group_members.user_id', userId)
123 .leftJoin(
124 GroupMemberModel.query(dtrx.trx)
125 .groupBy('group_id')
126 .select('group_id')
127 .count('* as member_count')
128 .as('member_counts'),
129 'group_members.group_id',
130 'member_counts.group_id',
131 )
132 .leftJoin(
133 GroupMemberModel.query(dtrx.trx)
134 .where('role', 'owner')
135 .groupBy('group_id')
136 .select('group_id')
137 .count('* as owner_count')
138 .as('owner_counts'),
139 'group_members.group_id',
140 'owner_counts.group_id',
141 )
142 .select(
143 'group_members.group_id',
144 raw('COALESCE(member_counts.member_count, 0) as member_count'),
145 raw('COALESCE(owner_counts.owner_count, 0) as owner_count'),
146 );
147
148 if (
149 memberships.some(
150 (count) =>
151 (count as any).member_count > 1 && (count as any).owner_count <= 1,
152 )
153 ) {
154 throw {
155 message:
156 'Some groups would be left without an owner. Transfer ownership before deleting your account.',
157 code: 'BAD_REQUEST',
158 };
159 }
160
161 const idsOfGroupsToDelete = memberships
162 .filter((membership) => (membership as any).member_count <= 1)
163 .map((membership) => membership.group_id);
164
165 // Get all user data
166
167 const [
168 groupPageIds,
169 invitations,
170 requests,
171 visitedPageIds,
172 sessions,
173 user,
174 ] = await Promise.all([

Callers 1

handleCommandFunction · 0.85

Calls 5

decryptUserEmailFunction · 0.90
transactionMethod · 0.80
patchMethod · 0.80
delMethod · 0.80
deleteMethod · 0.45

Tested by

no test coverage detected