Add DBML schema for users, tenants, subscriptions, and related entities

This commit is contained in:
Yoga Pangestu 2026-07-14 15:43:57 +07:00
parent ae351f67fa
commit 1c09246d29

132
DBML.md Normal file
View File

@ -0,0 +1,132 @@
Enum user_status {
ONBOARDING
ACTIVE
SUSPENDED
DISABLED
}
Enum tenant_status {
ACTIVE
SUSPENDED
DISABLED
}
Enum subscription_status {
ACTIVE
EXPIRED
CANCELLED
TRIAL
}
Table users {
id uuid [pk]
email varchar(100) [unique]
username varchar(20) [unique]
password varchar
email_verified_at timestamp [null]
tenant_id uuid [null]
status user_status [default: 'ONBOARDING']
created_at timestamp
updated_at timestamp [null]
deleted_at timestamp [null]
indexes {
(email) [unique]
(username) [unique]
(tenant_id)
(status)
}
}
Table user_profiles {
id uuid [pk]
user_id uuid [unique, not null]
full_name varchar(200)
phone varchar(20) [null]
timezone varchar(50) [null, default: 'Asia/Jakarta']
created_at timestamp
updated_at timestamp [null]
deleted_at timestamp [null]
indexes {
(user_id) [unique]
}
}
Table business_types {
id uuid [pk]
code varchar(30) [unique]
name varchar(100)
is_active boolean [default: true]
created_at timestamp
deleted_at timestamp [null]
updated_at timestamp [null]
indexes {
(code) [unique]
}
}
Table plans {
id uuid [pk]
code varchar(20) [unique]
name varchar(100)
description text [null]
price int
limits json [null]
is_active boolean [default: true]
created_at timestamp
updated_at timestamp [null]
deleted_at timestamp [null]
indexes {
(code) [unique]
}
}
Table tenants {
id uuid [pk]
name varchar(200)
slug varchar(100) [unique]
business_type_id uuid [not null]
phone varchar(20) [null]
address text [null]
email varchar(100) [null]
status tenant_status [default: 'ACTIVE']
created_at timestamp
updated_at timestamp [null]
deleted_at timestamp [null]
indexes {
(slug) [unique]
(business_type_id)
}
}
Table subscriptions {
id uuid [pk]
tenant_id uuid [unique, not null]
plan_id uuid [not null]
limits json [null]
status subscription_status [default: 'TRIAL']
started_at timestamp
ended_at timestamp [null]
created_at timestamp
updated_at timestamp [null]
indexes {
(tenant_id) [unique]
(plan_id)
(status)
}
}
Ref: user_profiles.user_id > users.id
Ref: tenants.business_type_id > business_types.id
Ref: subscriptions.tenant_id > tenants.id
Ref: subscriptions.plan_id > plans.id
Ref: users.tenant_id > tenants.id