datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

model User {
  uuid                String       @id @default(uuid()) @db.Uuid

  email               Email?       @relation("mainEmail")
  phoneNumber         PhoneNumber? @relation("mainPhoneNumber")

  reserveEmails       Email[]       @relation("reserveEmails")
  reservePhoneNumbers PhoneNumber[] @relation("reservePhoneNumbers")

  extendedData        Json          @default("{}") @db.JsonB

  createdAt           DateTime      @db.Timestamp(3)
  updatedAt           DateTime      @db.Timestamp(3)
}

model Email {
  uuid                String        @id @default(uuid()) @db.Uuid

  email               String        @unique @db.VarChar(256)

  userUuid            String?       @unique @db.Uuid
  user                User?         @relation("mainEmail", fields: [userUuid], references: [uuid])

  userUuidReserve     String?       @db.Uuid
  userReserve         User?         @relation("reserveEmails", fields: [userUuidReserve], references: [uuid])

  createdAt           DateTime      @db.Timestamp(3)
  updatedAt           DateTime      @db.Timestamp(3)
}

model PhoneNumber {
  uuid                String        @id @default(uuid()) @db.Uuid

  phoneNumber         String        @unique @db.VarChar(20)

  userUuid            String?       @unique @db.Uuid
  user                User?         @relation("mainPhoneNumber", fields: [userUuid], references: [uuid])

  userUuidReserve     String?       @db.Uuid
  userReserve         User?         @relation("reservePhoneNumbers", fields: [userUuidReserve], references: [uuid])

  createdAt           DateTime      @db.Timestamp(3)
  updatedAt           DateTime      @db.Timestamp(3)
}
