Skip to content

Commit 81bf7cf

Browse files
committed
Fixing delete user
1 parent 3446722 commit 81bf7cf

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

src/controller/registry-user.controller/registry-user.controller.js

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,16 +178,13 @@ async function updateUser (req, res, next) {
178178

179179
async function deleteUser (req, res, next) {
180180
try {
181-
const userRepo = req.ctx.repositories.getUserRepository()
182-
const orgRepo = req.ctx.repositories.getOrgRepository()
183-
const registryUserRepo = req.ctx.repositories.getRegistryUserRepository()
181+
const userRepo = req.ctx.repositories.getBaseUserRepository()
182+
const orgRepo = req.ctx.repositories.getBaseOrgRepository()
184183
const userUUID = req.ctx.params.identifier
185184

186-
const user = await registryUserRepo.findOneByUUID(userUUID)
187-
188-
// TODO: check permissions
185+
const user = await userRepo.findOneByUUID(userUUID)
189186

190-
await registryUserRepo.deleteByUUID(userUUID)
187+
await userRepo.deleteByUUID(userUUID)
191188

192189
const payload = {
193190
action: 'delete_registry_user',

src/repositories/baseUserRepository.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,34 @@ class BaseUserRepository extends BaseRepository {
125125
return user || null
126126
}
127127

128+
/**
129+
* Delete a user by UUID from both BaseUser and RegistryUser collections,
130+
* and remove the user reference from any organizations.
131+
*
132+
* @param {string} uuid - The UUID of the user to delete.
133+
* @param {object} options - Mongoose options for the delete operations.
134+
* @returns {Promise<number>} Number of deleted documents (should be 1 if successful).
135+
*/
136+
async deleteUserByUUID (uuid, options = {}) {
137+
// Delete from BaseUser collection
138+
const deleteResult = await BaseUser.deleteOne({ UUID: uuid }, options)
139+
140+
// Delete from RegistryUser collection
141+
await RegistryUser.deleteOne({ UUID: uuid }, options)
142+
143+
// Remove user from any organization’s users and admins arrays
144+
const orgs = await BaseOrgModel.find({ $or: [{ users: uuid }, { admins: uuid }] })
145+
for (const org of orgs) {
146+
org.users = org.users.filter(u => u !== uuid)
147+
if (Array.isArray(org.admins)) {
148+
org.admins = org.admins.filter(a => a !== uuid)
149+
}
150+
await org.save({ options })
151+
}
152+
153+
return deleteResult.deletedCount
154+
}
155+
128156
async getUserUUID (username, orgShortname, options = {}, isLegacyObject = false) {
129157
const user = await this.findOneByUsernameAndOrgShortname(username, orgShortname, options, isLegacyObject)
130158
if (user) {

0 commit comments

Comments
 (0)