feat: improve user serialization
This commit is contained in:
parent
4bebf4af4d
commit
77213340b6
2 changed files with 33 additions and 49 deletions
|
|
@ -10,11 +10,16 @@ export default class UserController {
|
|||
|
||||
// GET /users/@me
|
||||
async me({ auth }: HttpContext) {
|
||||
const user = auth.user!
|
||||
return {
|
||||
success: true,
|
||||
data: {
|
||||
...auth.user?.serialize(),
|
||||
email: auth.user!.email || '',
|
||||
...user.serialize(),
|
||||
firstName: user.firstName,
|
||||
lastName: user.lastName,
|
||||
email: user.email,
|
||||
preferences: user.preferences,
|
||||
pastStudentId: user.pastStudentId,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -52,7 +57,14 @@ export default class UserController {
|
|||
await user.save()
|
||||
return {
|
||||
success: true,
|
||||
data: user,
|
||||
data: {
|
||||
...user.serialize(),
|
||||
firstName: user.firstName,
|
||||
lastName: user.lastName,
|
||||
email: user.email,
|
||||
preferences: user.preferences,
|
||||
pastStudentId: user.pastStudentId,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -70,7 +82,14 @@ export default class UserController {
|
|||
return response.notFound({ message: 'User not found' })
|
||||
}
|
||||
|
||||
return { success: true, data: user }
|
||||
return {
|
||||
success: true,
|
||||
data: {
|
||||
...user.serialize(),
|
||||
preferences: user.preferences,
|
||||
pastStudentId: user.pastStudentId,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// POST /merge-student
|
||||
|
|
@ -81,6 +100,13 @@ export default class UserController {
|
|||
user.pastStudentId = pastStudentId
|
||||
await user.save()
|
||||
|
||||
return { success: true, data: user }
|
||||
return {
|
||||
success: true,
|
||||
data: {
|
||||
...user.serialize(),
|
||||
preferences: user.preferences,
|
||||
pastStudentId: user.pastStudentId,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,55 +1,14 @@
|
|||
import { DateTime } from 'luxon'
|
||||
import { BaseModel, column, computed } from '@adonisjs/lucid/orm'
|
||||
import { DbRememberMeTokensProvider } from '@adonisjs/auth/session'
|
||||
import { HttpContext } from '@adonisjs/core/http'
|
||||
|
||||
export default class User extends BaseModel {
|
||||
serializeExtras = true
|
||||
|
||||
serialize() {
|
||||
const ctx = HttpContext.get()
|
||||
|
||||
if (!ctx) {
|
||||
this.serializeExtras = false
|
||||
const serialized = super.serialize()
|
||||
delete serialized.pastStudentId
|
||||
delete serialized.extras
|
||||
return serialized
|
||||
}
|
||||
|
||||
const requestUrl = ctx.request.url()
|
||||
const isUsersRoute = requestUrl.startsWith('/users')
|
||||
const isMeRoute = requestUrl.includes('/users/@me')
|
||||
|
||||
this.serializeExtras = isUsersRoute
|
||||
|
||||
const serialized = super.serialize()
|
||||
if (!isUsersRoute) {
|
||||
delete serialized.pastStudentId
|
||||
delete serialized.extras
|
||||
}
|
||||
|
||||
if (isMeRoute) {
|
||||
console.log('Serializing full name for /users/@me route')
|
||||
serialized.firstName = this.firstName
|
||||
serialized.lastName = this.lastName
|
||||
}
|
||||
|
||||
if (this.serializeExtras) {
|
||||
serialized.preferences = this.preferences
|
||||
} else {
|
||||
delete serialized.preferences
|
||||
}
|
||||
|
||||
return serialized
|
||||
}
|
||||
|
||||
static rememberMeTokens = DbRememberMeTokensProvider.forModel(User)
|
||||
|
||||
@column({ isPrimary: true })
|
||||
declare id: number
|
||||
|
||||
@column()
|
||||
@column({ serializeAs: null })
|
||||
declare pastStudentId: number | null
|
||||
|
||||
@column()
|
||||
|
|
@ -72,9 +31,8 @@ export default class User extends BaseModel {
|
|||
@column({ serializeAs: null })
|
||||
declare extras: Record<string, any>
|
||||
|
||||
@computed()
|
||||
@computed({ serializeAs: null })
|
||||
get preferences(): { name: string; emoji: string; color: string }[] {
|
||||
if (!this.serializeExtras) return []
|
||||
return this.extras?.preferences || []
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue