import { Schema } from "effect" import { Model } from "effect/schema" export const UserId = Schema.String.pipe(Schema.brand("UserId")) export type UserId = typeof UserId.Type // `Model.Class` derives variants for the database (`User`, `User.insert`, // `User.update`) and the JSON API (`User.json`, `User.jsonCreate`, // `User.jsonUpdate`) from a single field declaration. export class User extends Model.Class("User")({ // A UUID v4 primary key generated by the application on insert. It is // excluded from the `jsonCreate` / `jsonUpdate` variants, so API clients can // never set it. id: Model.UuidV4Insert(UserId), name: Schema.String, email: Schema.String, // Timestamps are managed by the model: set on insert, refreshed on update, // and also excluded from the JSON create / update variants. createdAt: Model.DateTimeInsert, updatedAt: Model.DateTimeUpdate }) {}