This repository has been archived on 2024-10-29. You can view files and clone it, but cannot push or open issues or pull requests.
Files
api/src/models/User.ts

96 lines
2.6 KiB
TypeScript

import type { User } from '@prisma/client'
import type { Static } from '@sinclair/typebox'
import { Type } from '@sinclair/typebox'
import type { AuthenticationStrategy } from './OAuth.js'
import { strategiesTypebox } from './OAuth.js'
import { userSettingsSchema } from './UserSettings.js'
import { date, id } from './utils.js'
export interface UserJWT {
id: number
currentStrategy: AuthenticationStrategy
}
export interface UserRefreshJWT extends UserJWT {
tokenUUID: string
}
export interface UserRequest {
current: User
currentStrategy: AuthenticationStrategy
accessToken: string
}
export const userSchema = {
id,
name: Type.String({ minLength: 1, maxLength: 30 }),
email: Type.String({ minLength: 1, maxLength: 254, format: 'email' }),
password: Type.String({ minLength: 1 }),
logo: Type.String({ minLength: 1, format: 'uri-reference' }),
status: Type.String({ minLength: 1, maxLength: 50 }),
biography: Type.String({ minLength: 1, maxLength: 160 }),
website: Type.String({
minLength: 1,
maxLength: 255,
format: 'uri'
}),
isConfirmed: Type.Boolean({ default: false }),
temporaryToken: Type.String(),
temporaryExpirationToken: Type.String({ format: 'date-time' }),
createdAt: date.createdAt,
updatedAt: date.updatedAt
}
export const userPublicWithoutSettingsSchema = {
id,
name: userSchema.name,
email: Type.Union([userSchema.email, Type.Null()]),
logo: Type.Union([userSchema.logo, Type.Null()]),
status: Type.Union([userSchema.status, Type.Null()]),
biography: Type.Union([userSchema.biography, Type.Null()]),
website: Type.Union([userSchema.website, Type.Null()]),
isConfirmed: userSchema.isConfirmed,
createdAt: date.createdAt,
updatedAt: date.updatedAt
}
export const userPublicSchema = {
...userPublicWithoutSettingsSchema,
settings: Type.Object(userSettingsSchema)
}
export const userCurrentSchema = Type.Object({
user: Type.Object({
...userPublicSchema,
currentStrategy: Type.Union([...strategiesTypebox]),
strategies: Type.Array(Type.Union([...strategiesTypebox]))
})
})
export const bodyUserSchema = Type.Object({
email: userSchema.email,
name: userSchema.name,
password: userSchema.password,
theme: userSettingsSchema.theme,
language: userSettingsSchema.language
})
export type BodyUserSchemaType = Static<typeof bodyUserSchema>
export const userExample: User = {
id: 1,
name: 'Divlo',
email: 'contact@divlo.fr',
password: 'somepassword',
logo: null,
status: null,
biography: null,
website: null,
isConfirmed: true,
temporaryToken: 'temporaryUUIDtoken',
temporaryExpirationToken: new Date(),
createdAt: new Date(),
updatedAt: new Date()
}