import { isUndefined, pick } from "lodash" import { User, UserPreference } from "@/models" import BaseSerializer from "@/serializers/base-serializer" import { ShowSerializer as UserPreferenceShowSerializer, type UserPreferenceShowView, } from "@/serializers/user-preferences/show-serializer" export type UserShowView = Pick< User, "id" | "email" | "firstName" | "lastName" | "displayName" | "roles" | "createdAt" | "updatedAt" > & { preferences?: UserPreferenceShowView[] } export class ShowSerializer extends BaseSerializer { perform(): UserShowView { const { userPreferences } = this.record const serializedUserPreferences = isUndefined(userPreferences) ? undefined : this.serializeUserPreferences(userPreferences) return { ...pick(this.record, [ "id", "email", "firstName", "lastName", "displayName", "roles", "createdAt", "updatedAt", ]), preferences: serializedUserPreferences, } } private serializeUserPreferences(userPreferences: UserPreference[]) { return userPreferences.map((userPreference) => UserPreferenceShowSerializer.perform(userPreference) ) } } export default ShowSerializer