api/app/models/user.ts
2026-02-24 23:52:28 +01:00

66 lines
1.6 KiB
TypeScript

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 || !ctx.request.url().startsWith('/users')) {
this.serializeExtras = false
const serialized = super.serialize()
delete serialized.pastStudentId
delete serialized.extras
return serialized
}
this.serializeExtras = true
return {
...super.serialize(),
preferences: this.preferences,
}
}
static rememberMeTokens = DbRememberMeTokensProvider.forModel(User)
@column({ isPrimary: true })
declare id: number
@column()
declare pastStudentId: number | null
@column()
declare className: string
@column({ serializeAs: null })
declare firstName: string
@column({ serializeAs: null })
declare lastName: string
@computed()
get fullName() {
return `${this.firstName} ${this.lastName}`
}
@column({ serializeAs: null })
declare email: string
@column({ serializeAs: null })
declare extras: Record<string, any>
@computed()
get preferences(): { name: string; emoji: string; color: string }[] {
if (!this.serializeExtras) return []
return this.extras?.preferences || []
}
@column.dateTime({ autoCreate: true })
declare createdAt: DateTime
@column.dateTime({ autoCreate: true, autoUpdate: true })
declare updatedAt: DateTime | null
}