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() 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 @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 }