Files
alrahma_sunday_school_api/apps/api/src/modules/auth/auth.presenter.ts
T
2026-06-11 03:22:12 -04:00

87 lines
2.0 KiB
TypeScript

type EmployeeWithCompany = {
id: string
email: string
firstName: string
lastName: string
role: string
preferredLanguage?: string | null
companyId: string
company: {
name: string
slug: string
}
}
type CompanySignupResult = {
company: {
id: string
name: string
slug: string
}
trialEndAt: Date
emailDelivery?: unknown
}
type RenterProfile = {
id: string
firstName: string
lastName: string
email: string
phone: string | null
preferredLocale: string | null
preferredCurrency: string | null
emailVerified: boolean
savedCompanies: Array<{ companyId: string }>
}
type SavedCompany = {
id: string
brand: {
displayName: string | null
subdomain: string | null
logoUrl: string | null
} | null
}
export function presentEmployeeSession(employee: EmployeeWithCompany, token?: string) {
const data = {
employee: {
id: employee.id,
email: employee.email,
firstName: employee.firstName,
lastName: employee.lastName,
role: employee.role,
preferredLanguage: employee.preferredLanguage,
companyId: employee.companyId,
companyName: employee.company.name,
companySlug: employee.company.slug,
},
}
return token ? { token, ...data } : data
}
export function presentCompanySignup(result: CompanySignupResult) {
return {
companyId: result.company.id,
companyName: result.company.name,
slug: result.company.slug,
invitationId: null,
trialEndsAt: result.trialEndAt.toISOString(),
nextStep: 'workspace_created',
emailDelivery: result.emailDelivery ?? { attempted: false, success: false, error: null },
}
}
export function presentRenterProfile(renter: RenterProfile, companies: SavedCompany[]) {
const companyMap = new Map(companies.map((company) => [company.id, company]))
return {
...renter,
savedCompanies: renter.savedCompanies.map((savedCompany) => ({
id: savedCompany.companyId,
brand: companyMap.get(savedCompany.companyId)?.brand ?? null,
})),
}
}