Add DBML schema for users, tenants, subscriptions, and related entities
This commit is contained in:
parent
ae351f67fa
commit
1c09246d29
132
DBML.md
Normal file
132
DBML.md
Normal 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
|
||||||
Loading…
Reference in New Issue
Block a user