initial commit
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
612
prisma/schema.prisma
Normal file
612
prisma/schema.prisma
Normal file
@@ -0,0 +1,612 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "mysql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model attendance {
|
||||
id Int @id @default(autoincrement())
|
||||
user_id Int
|
||||
shift_date DateTime @db.Date
|
||||
arrival_time DateTime? @db.DateTime(0)
|
||||
arrival_lat Decimal? @db.Decimal(10, 8)
|
||||
arrival_lng Decimal? @db.Decimal(11, 8)
|
||||
arrival_accuracy Decimal? @db.Decimal(10, 2)
|
||||
arrival_address String? @db.VarChar(500)
|
||||
break_start DateTime? @db.DateTime(0)
|
||||
break_end DateTime? @db.DateTime(0)
|
||||
departure_time DateTime? @db.DateTime(0)
|
||||
departure_lat Decimal? @db.Decimal(10, 8)
|
||||
departure_lng Decimal? @db.Decimal(11, 8)
|
||||
departure_accuracy Decimal? @db.Decimal(10, 2)
|
||||
departure_address String? @db.VarChar(500)
|
||||
notes String? @db.Text
|
||||
project_id Int?
|
||||
leave_type attendance_leave_type? @default(work)
|
||||
leave_hours Decimal? @db.Decimal(4, 2)
|
||||
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
users users @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "attendance_ibfk_1")
|
||||
attendance_project_logs attendance_project_logs[]
|
||||
|
||||
@@index([user_id, shift_date], map: "idx_attendance_user_date")
|
||||
@@index([user_id, departure_time], map: "idx_attendance_user_departure")
|
||||
@@index([project_id], map: "idx_project_id")
|
||||
}
|
||||
|
||||
model attendance_project_logs {
|
||||
id Int @id @default(autoincrement())
|
||||
attendance_id Int
|
||||
project_id Int
|
||||
started_at DateTime? @db.DateTime(0)
|
||||
ended_at DateTime? @db.DateTime(0)
|
||||
hours Int? @db.UnsignedInt
|
||||
minutes Int? @db.UnsignedInt
|
||||
attendance attendance @relation(fields: [attendance_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
||||
|
||||
@@index([attendance_id], map: "idx_attendance_project_logs_aid")
|
||||
@@index([project_id], map: "idx_project_id")
|
||||
@@index([started_at], map: "idx_started_at")
|
||||
}
|
||||
|
||||
model audit_logs {
|
||||
id Int @id @default(autoincrement())
|
||||
user_id Int?
|
||||
username String? @db.VarChar(100)
|
||||
user_ip String? @db.VarChar(45)
|
||||
action String @db.VarChar(100)
|
||||
entity_type String? @db.VarChar(50)
|
||||
entity_id Int?
|
||||
description String? @db.Text
|
||||
old_values String? @db.LongText
|
||||
new_values String? @db.LongText
|
||||
user_agent String? @db.Text
|
||||
session_id String? @db.VarChar(128)
|
||||
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
|
||||
@@index([created_at], map: "idx_audit_log_created")
|
||||
@@index([action], map: "idx_audit_logs_action")
|
||||
@@index([created_at], map: "idx_audit_logs_created")
|
||||
@@index([entity_type, entity_id, created_at], map: "idx_audit_logs_entity")
|
||||
@@index([user_id, created_at], map: "idx_audit_logs_user_created")
|
||||
@@fulltext([description], map: "idx_audit_search")
|
||||
}
|
||||
|
||||
model bank_accounts {
|
||||
id Int @id @default(autoincrement())
|
||||
account_name String? @db.VarChar(255)
|
||||
bank_name String? @db.VarChar(255)
|
||||
account_number String? @db.VarChar(50)
|
||||
iban String? @db.VarChar(50)
|
||||
bic String? @db.VarChar(20)
|
||||
currency String? @default("CZK") @db.VarChar(10)
|
||||
is_default Boolean? @default(false)
|
||||
position Int? @default(0)
|
||||
created_at DateTime? @default(now()) @db.DateTime(0)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
}
|
||||
|
||||
model company_settings {
|
||||
id Int @id @default(autoincrement())
|
||||
company_name String? @db.VarChar(255)
|
||||
street String? @db.VarChar(255)
|
||||
city String? @db.VarChar(255)
|
||||
postal_code String? @db.VarChar(20)
|
||||
country String? @db.VarChar(100)
|
||||
company_id String? @db.VarChar(50)
|
||||
vat_id String? @db.VarChar(50)
|
||||
custom_fields String? @db.LongText
|
||||
logo_data Bytes?
|
||||
quotation_prefix String? @db.VarChar(20)
|
||||
default_currency String? @default("CZK") @db.VarChar(10)
|
||||
default_vat_rate Decimal? @default(21.00) @db.Decimal(5, 2)
|
||||
uuid String? @db.VarChar(36)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
is_deleted Boolean? @default(false)
|
||||
sync_version Int? @default(0)
|
||||
order_type_code String? @db.VarChar(10)
|
||||
invoice_type_code String? @db.VarChar(10)
|
||||
require_2fa Boolean @default(false)
|
||||
}
|
||||
|
||||
model customers {
|
||||
id Int @id @default(autoincrement())
|
||||
name String @db.VarChar(255)
|
||||
street String? @db.VarChar(255)
|
||||
city String? @db.VarChar(255)
|
||||
postal_code String? @db.VarChar(20)
|
||||
country String? @db.VarChar(100)
|
||||
company_id String? @db.VarChar(50)
|
||||
vat_id String? @db.VarChar(50)
|
||||
custom_fields String? @db.LongText
|
||||
created_at DateTime? @default(now()) @db.DateTime(0)
|
||||
uuid String? @db.VarChar(36)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
sync_version Int? @default(0)
|
||||
invoices invoices[]
|
||||
orders orders[]
|
||||
projects projects[]
|
||||
quotations quotations[]
|
||||
}
|
||||
|
||||
model invoice_items {
|
||||
id Int @id @default(autoincrement())
|
||||
invoice_id Int
|
||||
description String? @db.VarChar(500)
|
||||
quantity Decimal? @default(1.000) @db.Decimal(12, 3)
|
||||
unit String? @db.VarChar(20)
|
||||
unit_price Decimal? @default(0.00) @db.Decimal(12, 2)
|
||||
vat_rate Decimal? @default(21.00) @db.Decimal(5, 2)
|
||||
position Int? @default(0)
|
||||
invoices invoices @relation(fields: [invoice_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "invoice_items_ibfk_1")
|
||||
|
||||
@@index([invoice_id], map: "invoice_id")
|
||||
}
|
||||
|
||||
model invoices {
|
||||
id Int @id @default(autoincrement())
|
||||
invoice_number String? @db.VarChar(50)
|
||||
order_id Int?
|
||||
customer_id Int?
|
||||
status String? @default("issued") @db.VarChar(30)
|
||||
currency String? @default("CZK") @db.VarChar(10)
|
||||
vat_rate Decimal? @default(21.00) @db.Decimal(5, 2)
|
||||
apply_vat Boolean? @default(true)
|
||||
payment_method String? @db.VarChar(50)
|
||||
constant_symbol String? @db.VarChar(20)
|
||||
bank_name String? @db.VarChar(255)
|
||||
bank_swift String? @db.VarChar(20)
|
||||
bank_iban String? @db.VarChar(50)
|
||||
bank_account String? @db.VarChar(50)
|
||||
issue_date DateTime? @db.Date
|
||||
due_date DateTime? @db.Date
|
||||
tax_date DateTime? @db.Date
|
||||
paid_date DateTime? @db.Date
|
||||
issued_by String? @db.VarChar(255)
|
||||
notes String? @db.Text
|
||||
internal_notes String? @db.Text
|
||||
created_at DateTime? @default(now()) @db.DateTime(0)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
invoice_items invoice_items[]
|
||||
orders orders? @relation(fields: [order_id], references: [id], onUpdate: NoAction, map: "invoices_ibfk_1")
|
||||
customers customers? @relation(fields: [customer_id], references: [id], onUpdate: NoAction, map: "invoices_ibfk_2")
|
||||
|
||||
@@index([customer_id], map: "customer_id")
|
||||
@@index([due_date], map: "idx_invoices_due_date")
|
||||
@@index([status, issue_date], map: "idx_invoices_status_issue")
|
||||
@@index([order_id], map: "order_id")
|
||||
}
|
||||
|
||||
model item_templates {
|
||||
id Int @id @default(autoincrement())
|
||||
name String? @db.VarChar(255)
|
||||
description String? @db.Text
|
||||
default_price Decimal? @default(0.00) @db.Decimal(12, 2)
|
||||
category String? @db.VarChar(100)
|
||||
uuid String? @db.VarChar(36)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
is_deleted Boolean? @default(false)
|
||||
sync_version Int? @default(0)
|
||||
}
|
||||
|
||||
model leave_balances {
|
||||
id Int @id @default(autoincrement())
|
||||
user_id Int
|
||||
year Int
|
||||
vacation_total Decimal? @default(160.00) @db.Decimal(5, 2)
|
||||
vacation_used Decimal? @default(0.00) @db.Decimal(5, 2)
|
||||
sick_used Decimal? @default(0.00) @db.Decimal(5, 2)
|
||||
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
users users @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "leave_balances_ibfk_1")
|
||||
|
||||
@@unique([user_id, year], map: "idx_leave_balances_user_year")
|
||||
}
|
||||
|
||||
model leave_requests {
|
||||
id Int @id @default(autoincrement())
|
||||
user_id Int
|
||||
leave_type leave_requests_leave_type
|
||||
date_from DateTime @db.Date
|
||||
date_to DateTime @db.Date
|
||||
total_hours Decimal @db.Decimal(5, 2)
|
||||
total_days Int
|
||||
notes String? @db.Text
|
||||
status leave_requests_status? @default(pending)
|
||||
reviewer_id Int?
|
||||
reviewer_note String? @db.Text
|
||||
reviewed_at DateTime? @db.DateTime(0)
|
||||
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
users_leave_requests_user_idTousers users @relation("leave_requests_user_idTousers", fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "leave_requests_ibfk_1")
|
||||
users_leave_requests_reviewer_idTousers users? @relation("leave_requests_reviewer_idTousers", fields: [reviewer_id], references: [id], onUpdate: NoAction, map: "leave_requests_ibfk_2")
|
||||
|
||||
@@index([user_id, status], map: "idx_leave_requests_user_status")
|
||||
@@index([status], map: "idx_status")
|
||||
@@index([reviewer_id], map: "reviewer_id")
|
||||
}
|
||||
|
||||
model number_sequences {
|
||||
id Int @id @default(autoincrement())
|
||||
type String? @db.VarChar(50)
|
||||
year Int?
|
||||
last_number Int? @default(0)
|
||||
}
|
||||
|
||||
model order_items {
|
||||
id Int @id @default(autoincrement())
|
||||
order_id Int
|
||||
description String? @db.VarChar(500)
|
||||
item_description String? @db.Text
|
||||
quantity Decimal? @default(1.000) @db.Decimal(12, 3)
|
||||
unit String? @db.VarChar(20)
|
||||
unit_price Decimal? @default(0.00) @db.Decimal(12, 2)
|
||||
is_included_in_total Boolean? @default(true)
|
||||
position Int? @default(0)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
orders orders @relation(fields: [order_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "order_items_ibfk_1")
|
||||
|
||||
@@index([order_id], map: "order_id")
|
||||
}
|
||||
|
||||
model order_sections {
|
||||
id Int @id @default(autoincrement())
|
||||
order_id Int
|
||||
title String? @db.VarChar(500)
|
||||
title_cz String? @db.VarChar(500)
|
||||
content String? @db.Text
|
||||
position Int? @default(0)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
orders orders @relation(fields: [order_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "order_sections_ibfk_1")
|
||||
|
||||
@@index([order_id], map: "order_id")
|
||||
}
|
||||
|
||||
model orders {
|
||||
id Int @id @default(autoincrement())
|
||||
order_number String? @db.VarChar(50)
|
||||
customer_order_number String? @db.VarChar(100)
|
||||
attachment_data Bytes?
|
||||
attachment_name String? @db.VarChar(255)
|
||||
quotation_id Int?
|
||||
customer_id Int?
|
||||
status String? @default("prijata") @db.VarChar(30)
|
||||
currency String? @default("CZK") @db.VarChar(10)
|
||||
language String? @default("cs") @db.VarChar(5)
|
||||
vat_rate Decimal? @default(21.00) @db.Decimal(5, 2)
|
||||
apply_vat Boolean? @default(true)
|
||||
exchange_rate Decimal? @default(1.0000) @db.Decimal(10, 4)
|
||||
scope_title String? @db.VarChar(500)
|
||||
scope_description String? @db.Text
|
||||
notes String? @db.Text
|
||||
created_at DateTime? @default(now()) @db.DateTime(0)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
invoices invoices[]
|
||||
order_items order_items[]
|
||||
order_sections order_sections[]
|
||||
quotations quotations? @relation(fields: [quotation_id], references: [id], onUpdate: NoAction, map: "orders_ibfk_1")
|
||||
customers customers? @relation(fields: [customer_id], references: [id], onUpdate: NoAction, map: "orders_ibfk_2")
|
||||
projects projects[]
|
||||
|
||||
@@index([customer_id], map: "customer_id")
|
||||
@@index([quotation_id], map: "quotation_id")
|
||||
}
|
||||
|
||||
model permissions {
|
||||
id Int @id @default(autoincrement())
|
||||
name String @unique(map: "name") @db.VarChar(50)
|
||||
display_name String @db.VarChar(100)
|
||||
description String? @db.Text
|
||||
module String @db.VarChar(50)
|
||||
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
role_permissions role_permissions[]
|
||||
}
|
||||
|
||||
model project_notes {
|
||||
id Int @id @default(autoincrement())
|
||||
project_id Int
|
||||
user_id Int?
|
||||
user_name String? @db.VarChar(100)
|
||||
content String? @db.Text
|
||||
created_at DateTime? @default(now()) @db.DateTime(0)
|
||||
projects projects @relation(fields: [project_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "project_notes_ibfk_1")
|
||||
|
||||
@@index([project_id], map: "project_id")
|
||||
}
|
||||
|
||||
model projects {
|
||||
id Int @id @default(autoincrement())
|
||||
project_number String? @db.VarChar(50)
|
||||
name String? @db.VarChar(255)
|
||||
customer_id Int?
|
||||
responsible_user_id Int?
|
||||
quotation_id Int?
|
||||
order_id Int?
|
||||
status String? @default("aktivni") @db.VarChar(30)
|
||||
start_date DateTime? @db.Date
|
||||
end_date DateTime? @db.Date
|
||||
notes String? @db.Text
|
||||
created_at DateTime? @default(now()) @db.DateTime(0)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
project_notes project_notes[]
|
||||
users users? @relation(fields: [responsible_user_id], references: [id], onUpdate: NoAction, map: "fk_projects_responsible_user")
|
||||
customers customers? @relation(fields: [customer_id], references: [id], onUpdate: NoAction, map: "projects_ibfk_1")
|
||||
quotations quotations? @relation(fields: [quotation_id], references: [id], onUpdate: NoAction, map: "projects_ibfk_2")
|
||||
orders orders? @relation(fields: [order_id], references: [id], onUpdate: NoAction, map: "projects_ibfk_3")
|
||||
|
||||
@@index([customer_id], map: "customer_id")
|
||||
@@index([responsible_user_id], map: "fk_projects_responsible_user")
|
||||
@@index([order_id], map: "order_id")
|
||||
@@index([quotation_id], map: "quotation_id")
|
||||
}
|
||||
|
||||
model quotation_items {
|
||||
id Int @id @default(autoincrement())
|
||||
quotation_id Int
|
||||
position Int? @default(0)
|
||||
description String? @db.VarChar(500)
|
||||
item_description String? @db.Text
|
||||
quantity Decimal? @default(1.000) @db.Decimal(12, 3)
|
||||
unit String? @db.VarChar(20)
|
||||
unit_price Decimal? @default(0.00) @db.Decimal(12, 2)
|
||||
is_included_in_total Boolean? @default(true)
|
||||
uuid String? @db.VarChar(36)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
is_deleted Boolean? @default(false)
|
||||
sync_version Int? @default(0)
|
||||
quotations quotations @relation(fields: [quotation_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "quotation_items_ibfk_1")
|
||||
|
||||
@@index([quotation_id], map: "quotation_id")
|
||||
}
|
||||
|
||||
model quotations {
|
||||
id Int @id @default(autoincrement())
|
||||
quotation_number String? @db.VarChar(50)
|
||||
project_code String? @db.VarChar(50)
|
||||
customer_id Int?
|
||||
created_at DateTime? @default(now()) @db.DateTime(0)
|
||||
valid_until DateTime? @db.Date
|
||||
currency String? @default("CZK") @db.VarChar(10)
|
||||
language String? @default("cs") @db.VarChar(5)
|
||||
vat_rate Decimal? @default(21.00) @db.Decimal(5, 2)
|
||||
apply_vat Boolean? @default(true)
|
||||
exchange_rate Decimal? @default(1.0000) @db.Decimal(10, 4)
|
||||
exchange_rate_date DateTime? @db.Date
|
||||
order_id Int?
|
||||
status String @default("active") @db.VarChar(20)
|
||||
scope_title String? @db.VarChar(500)
|
||||
scope_description String? @db.Text
|
||||
uuid String? @db.VarChar(36)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
sync_version Int? @default(0)
|
||||
orders orders[]
|
||||
projects projects[]
|
||||
quotation_items quotation_items[]
|
||||
customers customers? @relation(fields: [customer_id], references: [id], onUpdate: NoAction, map: "quotations_ibfk_1")
|
||||
scope_sections scope_sections[]
|
||||
|
||||
@@index([customer_id], map: "customer_id")
|
||||
@@index([quotation_number], map: "idx_quotations_number")
|
||||
}
|
||||
|
||||
model received_invoices {
|
||||
id Int @id @default(autoincrement()) @db.UnsignedInt
|
||||
month Int @db.UnsignedTinyInt
|
||||
year Int @db.UnsignedSmallInt
|
||||
supplier_name String @db.VarChar(255)
|
||||
invoice_number String? @db.VarChar(100)
|
||||
description String? @db.VarChar(500)
|
||||
amount Decimal @default(0.00) @db.Decimal(12, 2)
|
||||
currency String @default("CZK") @db.VarChar(3)
|
||||
vat_rate Decimal @default(21.00) @db.Decimal(5, 2)
|
||||
vat_amount Decimal @default(0.00) @db.Decimal(12, 2)
|
||||
issue_date DateTime? @db.Date
|
||||
due_date DateTime? @db.Date
|
||||
paid_date DateTime? @db.Date
|
||||
status received_invoices_status @default(unpaid)
|
||||
file_data Bytes? @db.MediumBlob
|
||||
file_name String? @db.VarChar(255)
|
||||
file_mime String? @db.VarChar(100)
|
||||
file_size Int? @db.UnsignedInt
|
||||
notes String? @db.Text
|
||||
uploaded_by Int? @db.UnsignedInt
|
||||
created_at DateTime @default(now()) @db.DateTime(0)
|
||||
modified_at DateTime @default(now()) @db.DateTime(0)
|
||||
|
||||
@@index([year, month], map: "idx_month_year")
|
||||
@@index([status], map: "idx_status")
|
||||
@@index([supplier_name], map: "idx_supplier")
|
||||
}
|
||||
|
||||
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
|
||||
model refresh_tokens {
|
||||
id Int @id @default(autoincrement()) @db.UnsignedInt
|
||||
user_id Int @db.UnsignedInt
|
||||
token_hash String @unique(map: "token_hash") @db.VarChar(64)
|
||||
expires_at DateTime @db.DateTime(0)
|
||||
replaced_at DateTime? @db.DateTime(0)
|
||||
replaced_by_hash String? @db.VarChar(64)
|
||||
remember_me Boolean @default(false)
|
||||
ip_address String? @db.VarChar(45)
|
||||
user_agent String? @db.VarChar(255)
|
||||
created_at DateTime? @default(now()) @db.DateTime(0)
|
||||
|
||||
@@index([expires_at], map: "idx_refresh_tokens_expires_at")
|
||||
@@index([user_id, expires_at], map: "idx_refresh_tokens_user_exp")
|
||||
@@index([user_id], map: "idx_refresh_tokens_user_id")
|
||||
}
|
||||
|
||||
model role_permissions {
|
||||
role_id Int
|
||||
permission_id Int
|
||||
roles roles @relation(fields: [role_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "role_permissions_ibfk_1")
|
||||
permissions permissions @relation(fields: [permission_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "role_permissions_ibfk_2")
|
||||
|
||||
@@id([role_id, permission_id])
|
||||
@@index([permission_id], map: "permission_id")
|
||||
}
|
||||
|
||||
model roles {
|
||||
id Int @id @default(autoincrement())
|
||||
name String @unique(map: "name") @db.VarChar(50)
|
||||
display_name String @db.VarChar(100)
|
||||
description String? @db.Text
|
||||
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
role_permissions role_permissions[]
|
||||
users users[]
|
||||
}
|
||||
|
||||
model scope_sections {
|
||||
id Int @id @default(autoincrement())
|
||||
quotation_id Int
|
||||
position Int? @default(0)
|
||||
title String? @db.VarChar(500)
|
||||
title_cz String? @db.VarChar(500)
|
||||
content String? @db.Text
|
||||
content_editor_height Int?
|
||||
uuid String? @db.VarChar(36)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
is_deleted Boolean? @default(false)
|
||||
sync_version Int? @default(0)
|
||||
quotations quotations @relation(fields: [quotation_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "scope_sections_ibfk_1")
|
||||
|
||||
@@index([quotation_id], map: "quotation_id")
|
||||
}
|
||||
|
||||
model scope_template_sections {
|
||||
id Int @id @default(autoincrement())
|
||||
scope_template_id Int
|
||||
position Int? @default(0)
|
||||
title String? @db.VarChar(500)
|
||||
title_cz String? @db.VarChar(500)
|
||||
content String? @db.Text
|
||||
uuid String? @db.VarChar(36)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
is_deleted Boolean? @default(false)
|
||||
sync_version Int? @default(0)
|
||||
scope_templates scope_templates @relation(fields: [scope_template_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "scope_template_sections_ibfk_1")
|
||||
|
||||
@@index([scope_template_id], map: "scope_template_id")
|
||||
}
|
||||
|
||||
model scope_templates {
|
||||
id Int @id @default(autoincrement())
|
||||
name String? @db.VarChar(255)
|
||||
title String? @db.VarChar(500)
|
||||
description String? @db.Text
|
||||
uuid String? @db.VarChar(36)
|
||||
modified_at DateTime? @db.DateTime(0)
|
||||
is_deleted Boolean? @default(false)
|
||||
sync_version Int? @default(0)
|
||||
scope_template_sections scope_template_sections[]
|
||||
}
|
||||
|
||||
model totp_login_tokens {
|
||||
id Int @id @default(autoincrement())
|
||||
user_id Int
|
||||
token_hash String @db.VarChar(64)
|
||||
expires_at DateTime @db.DateTime(0)
|
||||
created_at DateTime @default(now()) @db.DateTime(0)
|
||||
|
||||
@@index([expires_at], map: "idx_expires")
|
||||
@@index([token_hash], map: "idx_totp_login_tokens_hash")
|
||||
@@index([user_id], map: "idx_user_id")
|
||||
}
|
||||
|
||||
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
|
||||
model trips {
|
||||
id Int @id @default(autoincrement())
|
||||
vehicle_id Int
|
||||
user_id Int
|
||||
trip_date DateTime @db.Date
|
||||
start_km Int
|
||||
end_km Int
|
||||
distance Int?
|
||||
route_from String @db.VarChar(100)
|
||||
route_to String @db.VarChar(100)
|
||||
is_business Boolean @default(true)
|
||||
notes String? @db.Text
|
||||
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
users users @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "trips_user_fk")
|
||||
vehicles vehicles @relation(fields: [vehicle_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "trips_vehicle_fk")
|
||||
|
||||
@@index([trip_date], map: "trip_date")
|
||||
@@index([user_id], map: "user_id")
|
||||
@@index([vehicle_id], map: "vehicle_id")
|
||||
}
|
||||
|
||||
model users {
|
||||
id Int @id @default(autoincrement())
|
||||
username String @unique(map: "username") @db.VarChar(50)
|
||||
email String @unique(map: "email") @db.VarChar(255)
|
||||
password_hash String @db.VarChar(255)
|
||||
first_name String @db.VarChar(50)
|
||||
last_name String @db.VarChar(50)
|
||||
role_id Int?
|
||||
is_active Boolean? @default(true)
|
||||
last_login DateTime? @db.Timestamp(0)
|
||||
failed_login_attempts Int? @default(0)
|
||||
locked_until DateTime? @db.Timestamp(0)
|
||||
password_changed_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
totp_secret String? @db.VarChar(255)
|
||||
totp_enabled Boolean @default(false)
|
||||
totp_backup_codes String? @db.Text
|
||||
attendance attendance[]
|
||||
leave_balances leave_balances[]
|
||||
leave_requests_leave_requests_user_idTousers leave_requests[] @relation("leave_requests_user_idTousers")
|
||||
leave_requests_leave_requests_reviewer_idTousers leave_requests[] @relation("leave_requests_reviewer_idTousers")
|
||||
projects projects[]
|
||||
trips trips[]
|
||||
roles roles? @relation(fields: [role_id], references: [id], onUpdate: NoAction, map: "users_ibfk_1")
|
||||
|
||||
@@index([is_active], map: "idx_users_is_active")
|
||||
@@index([role_id], map: "idx_users_role_id")
|
||||
}
|
||||
|
||||
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
|
||||
model vehicles {
|
||||
id Int @id @default(autoincrement())
|
||||
spz String @unique(map: "spz") @db.VarChar(20)
|
||||
name String @db.VarChar(100)
|
||||
brand String? @db.VarChar(50)
|
||||
model String? @db.VarChar(50)
|
||||
initial_km Int @default(0)
|
||||
actual_km Int @default(0)
|
||||
is_active Boolean @default(true)
|
||||
created_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
||||
trips trips[]
|
||||
}
|
||||
|
||||
enum leave_requests_leave_type {
|
||||
vacation
|
||||
sick
|
||||
unpaid
|
||||
}
|
||||
|
||||
enum leave_requests_status {
|
||||
pending
|
||||
approved
|
||||
rejected
|
||||
cancelled
|
||||
}
|
||||
|
||||
enum received_invoices_status {
|
||||
unpaid
|
||||
paid
|
||||
}
|
||||
|
||||
enum attendance_leave_type {
|
||||
work
|
||||
vacation
|
||||
sick
|
||||
holiday
|
||||
unpaid
|
||||
}
|
||||
Reference in New Issue
Block a user