MIF_E31221222/sigap-website/prisma/schema.prisma

231 lines
7.9 KiB
Plaintext

generator client {
provider = "prisma-client-js"
previewFeatures = ["postgresqlExtensions"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
extensions = [pgcrypto, uuid_ossp(map: "uuid-ossp", schema: "extensions")]
}
model cities {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
geographic_id String? @db.Uuid
name String @db.VarChar(100)
code String @db.VarChar(10)
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
geographics geographics? @relation(fields: [geographic_id], references: [id])
crimes crimes[]
demographics demographics[]
districts districts[]
@@index([name])
}
model contact_messages {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
name String? @db.VarChar(255)
email String? @db.VarChar(255)
phone String? @db.VarChar(20)
message_type String? @db.VarChar(50)
message_type_label String? @db.VarChar(50)
message String?
status status_contact_messages @default(new)
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @db.Timestamptz(6)
}
model crime_cases {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
crime_id String? @db.Uuid
crime_category_id String? @db.Uuid
date DateTime @db.Timestamptz(6)
time DateTime @db.Timestamptz(6)
location String @db.VarChar(255)
latitude Float
longitude Float
description String
victim_count Int
status crime_status @default(new)
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
crime_categories crime_categories? @relation(fields: [crime_category_id], references: [id])
crimes crimes? @relation(fields: [crime_id], references: [id])
}
model crime_categories {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
name String @db.VarChar(255)
description String
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
crime_cases crime_cases[]
}
model crimes {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
district_id String? @db.Uuid
city_id String? @db.Uuid
year Int
number_of_crime Int
rate crime_rates @default(low)
heat_map Json?
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
crime_cases crime_cases[]
cities cities? @relation(fields: [city_id], references: [id])
districts districts? @relation(fields: [district_id], references: [id])
@@unique([city_id, year])
@@unique([district_id, year])
}
model demographics {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
district_id String? @db.Uuid
city_id String? @db.Uuid
province_id String? @db.Uuid
year Int
population Int
population_density Float
poverty_rate Float
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
cities cities? @relation(fields: [city_id], references: [id])
districts districts? @relation(fields: [district_id], references: [id])
@@unique([city_id, year])
@@unique([district_id, year])
}
model districts {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
city_id String @db.Uuid
name String @db.VarChar(100)
code String @db.VarChar(10)
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
crimes crimes[]
demographics demographics[]
cities cities @relation(fields: [city_id], references: [id], onDelete: Cascade)
geographics geographics?
@@index([name])
}
model geographics {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
district_id String? @unique @db.Uuid
latitude Float?
longitude Float?
land_area Float?
polygon Json?
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
cities cities[]
districts districts? @relation(fields: [district_id], references: [id])
}
model profiles {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
user_id String @unique @db.Uuid
avatar String? @db.VarChar(355)
username String? @unique @db.VarChar(255)
first_name String? @db.VarChar(255)
last_name String? @db.VarChar(255)
bio String? @db.VarChar
address Json? @db.Json
birth_date DateTime?
users users @relation(fields: [user_id], references: [id])
@@index([user_id])
@@index([username])
}
model users {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
roles_id String @db.Uuid
email String @unique @db.VarChar(255)
phone String? @unique @db.VarChar(20)
encrypted_password String? @db.VarChar(255)
invited_at DateTime? @db.Timestamptz(6)
confirmed_at DateTime? @db.Timestamptz(6)
email_confirmed_at DateTime? @db.Timestamptz(6)
recovery_sent_at DateTime? @db.Timestamptz(6)
last_sign_in_at DateTime? @db.Timestamptz(6)
app_metadata Json?
user_metadata Json?
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
banned_until DateTime? @db.Timestamptz(6)
is_anonymous Boolean @default(false)
profile profiles?
role roles @relation(fields: [roles_id], references: [id])
@@index([is_anonymous])
@@index([created_at])
@@index([updated_at])
}
model roles {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
name String @unique @db.VarChar(255)
description String?
permissions permissions[]
users users[]
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
}
model resources {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
name String @unique @db.VarChar(255)
type String?
description String?
instance_role String?
relations String?
attributes Json?
permissions permissions[]
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
}
model permissions {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
action String
resource_id String @db.Uuid
role_id String @db.Uuid
resource resources @relation(fields: [resource_id], references: [id])
role roles @relation(fields: [role_id], references: [id])
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @updatedAt @db.Timestamptz(6)
}
enum crime_rates {
low
medium
high
}
enum crime_status {
new
in_progress
resolved
}
// enum roles {
// admin
// staff
// user
// }
enum status_contact_messages {
new
read
replied
resolved
}