chore(xo-server/user): use builtin (un)serialize

This commit is contained in:
Julien Fontanet 2023-10-23 15:58:51 +02:00
parent 5a9812c492
commit f1fa811e5c
2 changed files with 24 additions and 34 deletions

View File

@ -6,25 +6,23 @@ import { parseProp } from './utils.mjs'
// =================================================================== // ===================================================================
const serialize = user => {
let tmp
return {
...user,
authProviders: isEmpty((tmp = user.authProviders)) ? undefined : JSON.stringify(tmp),
groups: isEmpty((tmp = user.groups)) ? undefined : JSON.stringify(tmp),
preferences: isEmpty((tmp = user.preferences)) ? undefined : JSON.stringify(tmp),
}
}
const deserialize = user => ({
permission: 'none',
...user,
authProviders: parseProp('user', user, 'authProviders', undefined),
groups: parseProp('user', user, 'groups', []),
preferences: parseProp('user', user, 'preferences', {}),
})
export class Users extends Collection { export class Users extends Collection {
_serialize(user) {
let tmp
user.authProviders = isEmpty((tmp = user.authProviders)) ? undefined : JSON.stringify(tmp)
user.groups = isEmpty((tmp = user.groups)) ? undefined : JSON.stringify(tmp)
user.preferences = isEmpty((tmp = user.preferences)) ? undefined : JSON.stringify(tmp)
}
_unserialize(user) {
if (user.permission === undefined) {
user.permission = 'none'
}
user.authProviders = parseProp('user', user, 'authProviders', undefined)
user.groups = parseProp('user', user, 'groups', [])
user.preferences = parseProp('user', user, 'preferences', {})
}
async create(properties) { async create(properties) {
const { email } = properties const { email } = properties
@ -34,14 +32,6 @@ export class Users extends Collection {
} }
// Adds the user to the collection. // Adds the user to the collection.
return /* await */ this.add(serialize(properties)) return /* await */ this.add(properties)
}
async save(user) {
return /* await */ this.update(serialize(user))
}
async get(properties) {
return (await super.get(properties)).map(deserialize)
} }
} }

View File

@ -53,7 +53,7 @@ export default class {
if (!isEmpty(conflictUsers)) { if (!isEmpty(conflictUsers)) {
await Promise.all(conflictUsers.map(({ id }) => id !== userId && this.deleteUser(id))) await Promise.all(conflictUsers.map(({ id }) => id !== userId && this.deleteUser(id)))
} }
return usersDb.save(user) return usersDb.update(user)
}) })
) )
) )
@ -196,7 +196,7 @@ export default class {
user.email = user.name user.email = user.name
delete user.name delete user.name
await this._users.save(user) await this._users.update(user)
} }
// Merge this method in getUser() when plain objects. // Merge this method in getUser() when plain objects.
@ -390,7 +390,7 @@ export default class {
user.groups = addToArraySet(user.groups, groupId) user.groups = addToArraySet(user.groups, groupId)
group.users = addToArraySet(group.users, userId) group.users = addToArraySet(group.users, userId)
await Promise.all([this._users.save(user), this._groups.update(group)]) await Promise.all([this._users.update(user), this._groups.update(group)])
} }
async _removeUserFromGroup(userId, group) { async _removeUserFromGroup(userId, group) {
@ -400,7 +400,7 @@ export default class {
async _removeGroupFromUser(groupId, user) { async _removeGroupFromUser(groupId, user) {
user.groups = removeFromArraySet(user.groups, groupId) user.groups = removeFromArraySet(user.groups, groupId)
return this._users.save(user) return this._users.update(user)
} }
async removeUserFromGroup(userId, groupId) { async removeUserFromGroup(userId, groupId) {
@ -438,10 +438,10 @@ export default class {
group.users = userIds group.users = userIds
const saveUser = ::this._users.save const updateUser = ::this._users.update
await Promise.all([ await Promise.all([
Promise.all(newUsers.map(saveUser)), Promise.all(newUsers.map(updateUser)),
Promise.all(oldUsers.map(saveUser)), Promise.all(oldUsers.map(updateUser)),
this._groups.update(group), this._groups.update(group),
]) ])
} }