MIF_E31221222/sigap-website/src/models/users/users.model.ts

148 lines
4.4 KiB
TypeScript

import { z } from "zod";
import { AuthError } from "@supabase/supabase-js";
const timestampSchema = z.union([z.string(), z.date()]).nullable();
// const AppMetadataSchema = z
// .object({
// provider: z.string(),
// providers: z.array(z.string()),
// })
// .nullable();
// const UserMetadataSchema = z.object({
// email_verified: z.boolean().optional(),
// });
// const IdentityDataSchema = z.object({
// email: z.string().email(),
// email_verified: z.boolean(),
// phone_verified: z.boolean(),
// sub: z.string(),
// });
// const IdentitySchema = z.object({
// identity_id: z.string(),
// id: z.string(),
// user_id: z.string(),
// identity_data: IdentityDataSchema,
// provider: z.string(),
// last_sign_in_at: timestampSchema,
// created_at: timestampSchema,
// updated_at: timestampSchema,
// email: z.string().email(),
// });
export const UserSchema = z.object({
id: z.string(),
role: z.string().optional(),
email: z.string().email().optional(),
email_confirmed_at: z.union([z.string(), z.date()]).nullable().optional(),
password_hash: z.string().nullable().optional(),
invited_at: z.union([z.string(), z.date()]).nullable().optional(),
phone: z.string().nullable().optional(),
confirmed_at: z.union([z.string(), z.date()]).nullable().optional(),
recovery_sent_at: z.union([z.string(), z.date()]).nullable().optional(),
last_sign_in_at: z.union([z.string(), z.date()]).nullable().optional(),
created_at: z.union([z.string(), z.date()]).nullable().optional(),
updated_at: z.union([z.string(), z.date()]).nullable().optional(),
is_anonymous: z.boolean().optional(),
banned_until: z.union([z.string(), z.date()]).nullable().optional(),
profile: z
.object({
id: z.string().optional(),
user_id: z.string(),
avatar: z.string().nullable().optional(),
username: z.string().nullable().optional(),
first_name: z.string().nullable().optional(),
last_name: z.string().nullable().optional(),
bio: z.string().nullable().optional(),
address: z.any().nullable().optional(),
birth_date: z.union([z.string(), z.date()]).nullable().optional(),
})
.nullable()
.optional(),
});
export type User = z.infer<typeof UserSchema>;
export const ProfileSchema = z.object({
id: z.string(),
user_id: z.string(),
avatar: z.string().optional(),
username: z.string().optional(),
first_name: z.string().optional(),
last_name: z.string().optional(),
bio: z.string(),
address: z.string().optional(),
birth_date: z.string().optional(),
});
export type Profile = z.infer<typeof ProfileSchema>;
export const CreateUserParamsSchema = z.object({
email: z.string().email(),
password: z.string(),
phone: z.string().optional(),
user_metadata: z.record(z.any()).optional(),
email_confirm: z.boolean().optional(),
});
export type CreateUserParams = z.infer<typeof CreateUserParamsSchema>;
export const UpdateUserParamsSchema = z.object({
email: z.string().email().optional(),
email_confirmed_at: z.boolean().optional(),
password_hash: z.string().optional(),
role: z.enum(["user", "staff", "admin"]).optional(),
phone: z.string().optional(),
phone_confirmed_at: z.boolean().optional(),
invited_at: z.union([z.string(), z.date()]).optional(),
confirmed_at: z.union([z.string(), z.date()]).optional(),
recovery_sent_at: z.union([z.string(), z.date()]).optional(),
last_sign_in_at: z.union([z.string(), z.date()]).optional(),
created_at: z.union([z.string(), z.date()]).optional(),
updated_at: z.union([z.string(), z.date()]).optional(),
is_anonymous: z.boolean().optional(),
user_metadata: z.record(z.any()).optional(),
app_metadata: z.record(z.any()).optional(),
profile: z
.object({
id: z.string().optional(),
user_id: z.string(),
avatar: z.string().optional(),
username: z.string().optional(),
first_name: z.string().optional(),
last_name: z.string().optional(),
bio: z.string().optional(),
address: z.any().optional(),
birth_date: z.date().optional(),
})
.optional(),
});
export type UpdateUserParams = z.infer<typeof UpdateUserParamsSchema>;
export const InviteUserParamsSchema = z.object({
email: z.string().email(),
});
export type InviteUserParams = z.infer<typeof InviteUserParamsSchema>;
export type UserResponse =
| {
data: {
user: User;
};
error: null;
}
| {
data: {
user: null;
};
error: AuthError;
};