2024-02-29 04:08:54 +00:00
import knex from './knex.js' ;
// import { curateStash } from './stashes.js';
export function curateUser ( user ) {
if ( ! user ) {
return null ;
}
const ability = [ ... ( user . role _abilities || [ ] ) , ... ( user . abilities || [ ] ) ] ;
const curatedUser = {
id : user . id ,
username : user . username ,
email : user . email ,
emailVerified : user . email _verified ,
identityVerified : user . identity _verified ,
ability ,
avatar : ` /media/avatars/ ${ user . id } _ ${ user . username } .png ` ,
createdAt : user . created _at ,
// stashes: user.stashes?.filter(Boolean).map((stash) => curateStash(stash)) || [],
} ;
return curatedUser ;
}
2024-02-29 05:00:12 +00:00
export async function fetchUser ( userId , options = { } ) {
2024-02-29 04:08:54 +00:00
const user = await knex ( 'users' )
. select ( knex . raw ( 'users.*, users_roles.abilities as role_abilities, COALESCE(json_agg(stashes ORDER BY stashes.created_at) FILTER (WHERE stashes.id IS NOT NULL), \'[]\') as stashes' ) )
. modify ( ( builder ) => {
if ( typeof userId === 'number' ) {
builder . where ( 'users.id' , userId ) ;
}
if ( typeof userId === 'string' ) {
2024-02-29 05:00:12 +00:00
builder . where ( knex . raw ( 'lower(users.username)' ) , userId . toLowerCase ( ) ) ;
if ( options . email ) {
builder . orWhere ( knex . raw ( 'lower(users.email)' ) , userId . toLowerCase ( ) ) ;
}
2024-02-29 04:08:54 +00:00
}
} )
. leftJoin ( 'users_roles' , 'users_roles.role' , 'users.role' )
. leftJoin ( 'stashes' , 'stashes.user_id' , 'users.id' )
. groupBy ( 'users.id' , 'users_roles.role' )
. first ( ) ;
2024-02-29 05:00:12 +00:00
if ( options . raw ) {
2024-02-29 04:08:54 +00:00
return user ;
}
return curateUser ( user ) ;
}