Tokiva-backend-Node / prisma /schema.prisma
anoderb
feat: initial commit of Tokiva POS Node backend for Hugging Face
ef874e6
Raw
History Blame Contribute Delete
20.8 kB
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model alembic_version {
version_num String @id @db.VarChar(32)
}
model audit_log {
id Int @id @default(autoincrement())
user_id Int?
aksi String @db.VarChar(50)
entitas String @db.VarChar(50)
entitas_id Int?
data_lama Json?
data_baru Json?
ip_address String? @db.VarChar(45)
user_agent String? @db.VarChar(255)
created_at DateTime @default(now()) @db.DateTime(0)
user user? @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "audit_log_ibfk_1")
@@index([created_at], map: "idx_audit_created")
@@index([entitas, entitas_id], map: "idx_audit_entitas_id")
@@index([user_id], map: "idx_audit_user")
}
model bon {
id Int @id @default(autoincrement())
transaksi_id Int
member_id Int
total_bon Decimal @db.Decimal(15, 2)
sisa_bon Decimal @db.Decimal(15, 2)
jatuh_tempo DateTime? @db.Date
status bon_status @default(aktif)
reminder_sent Int @default(0) @db.SmallInt
created_at DateTime @default(now()) @db.DateTime(0)
updated_at DateTime @default(now()) @db.DateTime(0)
member member @relation(fields: [member_id], references: [id], onUpdate: NoAction, map: "bon_ibfk_1")
transaksi transaksi @relation(fields: [transaksi_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "bon_ibfk_2")
bon_cicilan bon_cicilan[]
@@index([jatuh_tempo], map: "idx_bon_jatuh_tempo")
@@index([member_id], map: "idx_bon_member")
@@index([status], map: "idx_bon_status")
@@index([transaksi_id], map: "idx_bon_transaksi")
}
model bon_cicilan {
id Int @id @default(autoincrement())
bon_id Int
nominal Decimal @db.Decimal(15, 2)
metode bon_cicilan_metode
user_id Int
created_at DateTime @default(now()) @db.DateTime(0)
bon bon @relation(fields: [bon_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "bon_cicilan_ibfk_1")
user user @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "bon_cicilan_ibfk_2")
@@index([bon_id], map: "idx_cicilan_bon")
@@index([user_id], map: "idx_cicilan_user")
}
model diskon {
id Int @id @default(autoincrement())
nama String @db.VarChar(200)
tipe diskon_tipe
nilai Decimal @db.Decimal(15, 2)
min_belanja Decimal @default(0.00) @db.Decimal(15, 2)
produk_ids Json?
member_only Int @default(0) @db.SmallInt
tgl_mulai DateTime @db.DateTime(0)
tgl_selesai DateTime @db.DateTime(0)
jam_mulai DateTime? @db.Time(0)
jam_selesai DateTime? @db.Time(0)
is_aktif Int @default(1) @db.SmallInt
created_at DateTime @default(now()) @db.DateTime(0)
diskon_bundling diskon_bundling[]
transaksi_detail transaksi_detail[]
voucher voucher[]
@@index([tgl_mulai, tgl_selesai], map: "idx_diskon_periode")
@@index([is_aktif], map: "idx_diskon_status")
}
model diskon_bundling {
id Int @id @default(autoincrement())
diskon_id Int
produk_id Int
qty Decimal @db.Decimal(10, 2)
diskon diskon @relation(fields: [diskon_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "diskon_bundling_ibfk_1")
produk produk @relation(fields: [produk_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "diskon_bundling_ibfk_2")
@@index([diskon_id], map: "idx_bundling_diskon")
@@index([produk_id], map: "idx_bundling_produk")
}
model harga_tingkat {
id Int @id @default(autoincrement())
produk_id Int
tingkat harga_tingkat_tingkat
min_qty Decimal @db.Decimal(10, 2)
harga Decimal @db.Decimal(15, 2)
created_at DateTime @default(now()) @db.DateTime(0)
produk produk @relation(fields: [produk_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "harga_tingkat_ibfk_1")
@@unique([produk_id, tingkat], map: "uq_produk_tingkat")
}
model kategori {
id Int @id @default(autoincrement())
nama String @unique(map: "nama") @db.VarChar(100)
icon String? @db.VarChar(50)
aktif Int @default(1) @db.SmallInt
created_at DateTime @default(now()) @db.DateTime(0)
updated_at DateTime @default(now()) @db.DateTime(0)
deleted_at DateTime? @db.DateTime(0)
produk produk[]
@@index([nama], map: "idx_kategori_nama")
}
model member {
id Int @id @default(autoincrement())
kode String @unique(map: "kode") @db.VarChar(20)
nama String @db.VarChar(200)
nomor_hp String @unique(map: "nomor_hp") @db.VarChar(20)
alamat String? @db.Text
total_poin Int @default(0)
limit_bon Decimal @default(0.00) @db.Decimal(15, 2)
total_bon Decimal @default(0.00) @db.Decimal(15, 2)
foto_url String? @db.VarChar(500)
aktif Int @default(1) @db.SmallInt
created_at DateTime @default(now()) @db.DateTime(0)
updated_at DateTime @default(now()) @db.DateTime(0)
deleted_at DateTime? @db.DateTime(0)
bon bon[]
transaksi transaksi[]
@@index([kode], map: "idx_pelanggan_kode")
@@index([nomor_hp], map: "idx_pelanggan_nomor_hp")
}
model notifikasi {
id Int @id @default(autoincrement())
user_id Int?
tipe notifikasi_tipe
judul String @db.VarChar(255)
pesan String @db.Text
referensi_id Int?
is_dibaca Int @default(0) @db.SmallInt
was_sent Int @default(0) @db.SmallInt
created_at DateTime @default(now()) @db.DateTime(0)
user user? @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "notifikasi_ibfk_1")
@@index([created_at], map: "idx_notif_created")
@@index([user_id, is_dibaca], map: "idx_notif_user_dibaca")
}
model pembayaran {
id Int @id @default(autoincrement())
transaksi_id Int
metode pembayaran_metode
nominal Decimal @db.Decimal(15, 2)
referensi String? @db.VarChar(100)
created_at DateTime @default(now()) @db.DateTime(0)
transaksi transaksi @relation(fields: [transaksi_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "pembayaran_ibfk_1")
@@index([metode], map: "idx_pembayaran_metode")
@@index([transaksi_id], map: "idx_pembayaran_transaksi")
}
model pengaturan {
id Int @id @default(autoincrement())
kunci String @unique(map: "kunci") @db.VarChar(100)
nilai String @db.Text
deskripsi String? @db.VarChar(255)
updated_at DateTime @default(now()) @db.DateTime(0)
@@index([kunci], map: "idx_pengaturan_kunci")
}
model produk {
id Int @id @default(autoincrement())
kode String @unique(map: "kode") @db.VarChar(50)
barcode String? @unique(map: "barcode") @db.VarChar(50)
nama String @db.VarChar(200)
kategori_id Int
supplier_id Int?
satuan String @default("pcs") @db.VarChar(20)
harga_beli Decimal @db.Decimal(15, 2)
harga_jual Decimal @db.Decimal(15, 2)
stok Decimal @default(0.00) @db.Decimal(12, 2)
stok_min Decimal @default(5.00) @db.Decimal(12, 2)
expired_date DateTime? @db.Date
foto_url String? @db.LongText
qr_url String? @db.VarChar(500)
deskripsi String? @db.Text
is_ecer Int @default(1) @db.SmallInt
is_aktif Int @default(1) @db.SmallInt
created_at DateTime @default(now()) @db.DateTime(0)
updated_at DateTime @default(now()) @db.DateTime(0)
deleted_at DateTime? @db.DateTime(0)
diskon_bundling diskon_bundling[]
harga_tingkat harga_tingkat[]
kategori kategori @relation(fields: [kategori_id], references: [id], onUpdate: NoAction, map: "produk_ibfk_1")
supplier supplier? @relation(fields: [supplier_id], references: [id], onUpdate: NoAction, map: "produk_ibfk_2")
stok_batch stok_batch[]
stok_log stok_log[]
stok_opname stok_opname[]
transaksi_detail transaksi_detail[]
transaksi_retur transaksi_retur[]
@@index([barcode], map: "idx_produk_barcode")
@@index([kategori_id], map: "idx_produk_kategori")
@@index([kode], map: "idx_produk_kode")
@@index([nama], map: "idx_produk_nama")
@@index([supplier_id], map: "idx_produk_supplier")
}
model shift {
id Int @id @default(autoincrement())
user_id Int
kode String @db.VarChar(30)
modal_awal Decimal @default(0.00) @db.Decimal(15, 2)
waktu_buka DateTime @db.DateTime(0)
waktu_tutup DateTime? @db.DateTime(0)
total_transaksi Int @default(0)
total_tunai Decimal @default(0.00) @db.Decimal(15, 2)
total_qris Decimal @default(0.00) @db.Decimal(15, 2)
total_transfer Decimal @default(0.00) @db.Decimal(15, 2)
total_bon Decimal @default(0.00) @db.Decimal(15, 2)
total_diskon Decimal @default(0.00) @db.Decimal(15, 2)
total_selisih Decimal @default(0.00) @db.Decimal(15, 2)
status shift_status @default(buka)
catatan String? @db.Text
user user @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "shift_ibfk_1")
transaksi transaksi[]
@@index([kode], map: "idx_shift_kode")
@@index([user_id], map: "idx_shift_user")
}
model stok_batch {
id Int @id @default(autoincrement())
produk_id Int
batch_no String? @db.VarChar(50)
qty_masuk Decimal @db.Decimal(12, 2)
qty_sisa Decimal @db.Decimal(12, 2)
harga_beli Decimal @db.Decimal(15, 2)
expired_date DateTime? @db.Date
supplier_id Int?
catatan String? @db.Text
created_at DateTime @default(now()) @db.DateTime(0)
produk produk @relation(fields: [produk_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "stok_batch_ibfk_1")
supplier supplier? @relation(fields: [supplier_id], references: [id], onUpdate: NoAction, map: "stok_batch_ibfk_2")
stok_log stok_log[]
transaksi_detail transaksi_detail[]
@@index([expired_date], map: "idx_batch_expired")
@@index([produk_id], map: "idx_batch_produk")
@@index([supplier_id], map: "idx_batch_supplier")
}
model stok_log {
id Int @id @default(autoincrement())
produk_id Int
batch_id Int?
tipe stok_log_tipe
qty Decimal @db.Decimal(12, 2)
stok_sebelum Decimal @db.Decimal(12, 2)
stok_sesudah Decimal @db.Decimal(12, 2)
referensi String? @db.VarChar(50)
user_id Int?
catatan String? @db.Text
created_at DateTime @default(now()) @db.DateTime(0)
stok_batch stok_batch? @relation(fields: [batch_id], references: [id], onUpdate: NoAction, map: "stok_log_ibfk_1")
produk produk @relation(fields: [produk_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "stok_log_ibfk_2")
user user? @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "stok_log_ibfk_3")
@@index([batch_id], map: "batch_id")
@@index([created_at], map: "idx_stoklog_date")
@@index([produk_id], map: "idx_stoklog_produk")
@@index([tipe], map: "idx_stoklog_tipe")
@@index([user_id], map: "user_id")
}
model stok_opname {
id Int @id @default(autoincrement())
produk_id Int
user_id Int
stok_sistem Decimal @db.Decimal(12, 2)
stok_fisik Decimal @db.Decimal(12, 2)
selisih Decimal @db.Decimal(12, 2)
alasan String? @db.VarChar(255)
status stok_opname_status @default(draft)
created_at DateTime @default(now()) @db.DateTime(0)
produk produk @relation(fields: [produk_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "stok_opname_ibfk_1")
user user @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "stok_opname_ibfk_2")
@@index([produk_id], map: "idx_opname_produk")
@@index([status], map: "idx_opname_status")
@@index([user_id], map: "idx_opname_user")
}
model supplier {
id Int @id @default(autoincrement())
nama String @db.VarChar(200)
kontak String? @db.VarChar(100)
nomor_hp String? @db.VarChar(20)
alamat String? @db.Text
hutang Decimal @default(0.00) @db.Decimal(15, 2)
aktif Int @default(1) @db.SmallInt
created_at DateTime @default(now()) @db.DateTime(0)
updated_at DateTime @default(now()) @db.DateTime(0)
deleted_at DateTime? @db.DateTime(0)
produk produk[]
stok_batch stok_batch[]
@@index([nama], map: "idx_pemasok_nama")
}
model transaksi {
id Int @id @default(autoincrement())
no_transaksi String @unique(map: "no_transaksi") @db.VarChar(30)
shift_id Int
user_id Int
member_id Int?
tanggal DateTime @db.Date
waktu DateTime @db.Time(0)
subtotal Decimal @db.Decimal(15, 2)
diskon_total Decimal @default(0.00) @db.Decimal(15, 2)
diskon_member Decimal @default(0.00) @db.Decimal(15, 2)
pajak Decimal @default(0.00) @db.Decimal(15, 2)
total Decimal @db.Decimal(15, 2)
bayar Decimal @default(0.00) @db.Decimal(15, 2)
kembalian Decimal @default(0.00) @db.Decimal(15, 2)
status transaksi_status @default(lunas)
is_synced Int @default(0) @db.SmallInt
sync_at DateTime? @db.DateTime(0)
local_id String? @db.VarChar(50)
catatan String? @db.Text
created_at DateTime @default(now()) @db.DateTime(0)
deleted_at DateTime? @db.DateTime(0)
bon bon[]
pembayaran pembayaran[]
member member? @relation(fields: [member_id], references: [id], onUpdate: NoAction, map: "transaksi_ibfk_1")
shift shift @relation(fields: [shift_id], references: [id], onUpdate: NoAction, map: "transaksi_ibfk_2")
user user @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "transaksi_ibfk_3")
transaksi_detail transaksi_detail[]
transaksi_retur transaksi_retur[]
@@index([member_id], map: "idx_transaksi_member")
@@index([no_transaksi], map: "idx_transaksi_no")
@@index([shift_id], map: "idx_transaksi_shift")
@@index([tanggal], map: "idx_transaksi_tanggal")
@@index([user_id], map: "idx_transaksi_user")
}
model transaksi_detail {
id Int @id @default(autoincrement())
transaksi_id Int
produk_id Int
nama_produk String @db.VarChar(200)
qty Decimal @db.Decimal(10, 2)
satuan String @db.VarChar(20)
harga_satuan Decimal @db.Decimal(15, 2)
diskon_item Decimal @default(0.00) @db.Decimal(15, 2)
subtotal Decimal @db.Decimal(15, 2)
diskon_id Int?
batch_id Int?
created_at DateTime @default(now()) @db.DateTime(0)
stok_batch stok_batch? @relation(fields: [batch_id], references: [id], onUpdate: NoAction, map: "transaksi_detail_ibfk_1")
diskon diskon? @relation(fields: [diskon_id], references: [id], onUpdate: NoAction, map: "transaksi_detail_ibfk_2")
produk produk @relation(fields: [produk_id], references: [id], onUpdate: NoAction, map: "transaksi_detail_ibfk_3")
transaksi transaksi @relation(fields: [transaksi_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "transaksi_detail_ibfk_4")
@@index([batch_id], map: "batch_id")
@@index([diskon_id], map: "diskon_id")
@@index([produk_id], map: "idx_detail_produk")
@@index([transaksi_id], map: "idx_detail_transaksi")
}
model transaksi_retur {
id Int @id @default(autoincrement())
transaksi_id Int
no_retur String @unique(map: "no_retur") @db.VarChar(30)
user_id Int
produk_id Int
qty Decimal @db.Decimal(10, 2)
alasan String @db.VarChar(255)
tipe transaksi_retur_tipe
nominal_kembali Decimal @default(0.00) @db.Decimal(15, 2)
stok_kembali Int @default(1) @db.SmallInt
created_at DateTime @default(now()) @db.DateTime(0)
produk produk @relation(fields: [produk_id], references: [id], onUpdate: NoAction, map: "transaksi_retur_ibfk_1")
transaksi transaksi @relation(fields: [transaksi_id], references: [id], onUpdate: NoAction, map: "transaksi_retur_ibfk_2")
user user @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "transaksi_retur_ibfk_3")
@@index([no_retur], map: "idx_retur_no")
@@index([produk_id], map: "idx_retur_produk")
@@index([transaksi_id], map: "idx_retur_transaksi")
@@index([user_id], map: "user_id")
}
model trash {
id Int @id @default(autoincrement())
entity_type String @db.VarChar(50)
entity_id Int
data String @db.Text
deleted_by Int?
deleted_at DateTime @default(now()) @db.DateTime(0)
@@index([deleted_at], map: "idx_trash_date")
@@index([entity_type, entity_id], map: "idx_trash_entity")
}
model user {
id Int @id @default(autoincrement())
nama String @db.VarChar(100)
username String @unique(map: "username") @db.VarChar(50)
password_hash String @db.VarChar(255)
role user_role
nomor_hp String? @db.VarChar(20)
foto_url String? @db.VarChar(500)
aktif Int @default(1) @db.SmallInt
created_at DateTime @default(now()) @db.DateTime(0)
updated_at DateTime @default(now()) @db.DateTime(0)
audit_log audit_log[]
bon_cicilan bon_cicilan[]
notifikasi notifikasi[]
shift shift[]
stok_log stok_log[]
stok_opname stok_opname[]
transaksi transaksi[]
transaksi_retur transaksi_retur[]
@@index([username], map: "idx_pengguna_username")
}
model voucher {
id Int @id @default(autoincrement())
kode String @unique(map: "kode") @db.VarChar(50)
diskon_id Int
kuota Int @default(1)
terpakai Int @default(0)
tgl_kadaluarsa DateTime @db.Date
is_aktif Int @default(1) @db.SmallInt
created_at DateTime @default(now()) @db.DateTime(0)
diskon diskon @relation(fields: [diskon_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "voucher_ibfk_1")
@@index([diskon_id], map: "idx_voucher_diskon")
@@index([kode], map: "idx_voucher_kode")
}
enum diskon_tipe {
per_item_persen
per_item_nominal
total_persen
total_nominal
bundling
buy_x_get_y
member
flash_sale
}
enum harga_tingkat_tingkat {
ecer
grosir
partai
}
enum notifikasi_tipe {
stok_rendah
stok_habis
expired
bon_jatuh_tempo
shift_tutup
transaksi_void
info
}
enum pembayaran_metode {
tunai
qris
transfer
bon
voucher
}
enum bon_cicilan_metode {
tunai
transfer
}
enum stok_log_tipe {
masuk
keluar
opname
retur
expired
adjustment
}
enum user_role {
admin
kasir
}
enum bon_status {
aktif
lunas
macet
}
enum stok_opname_status {
draft
approved
}
enum transaksi_retur_tipe {
refund
exchange
}
enum shift_status {
buka
tutup
}
enum transaksi_status {
lunas
bon
void
}