refactor user accounts structure

This commit is contained in:
2026-03-16 00:33:40 +03:30
parent d2215b9f04
commit 0ad6a3200e
118 changed files with 18774 additions and 8764 deletions
+53
View File
@@ -0,0 +1,53 @@
model Admin {
id String @id @default(uuid())
mobile_number String @unique()
national_code String? @unique()
first_name String
last_name String
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt() @db.Timestamp(0)
accounts AdminAccount[]
@@map("admins")
}
model AdminAccount {
id String @id @default(uuid())
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt() @db.Timestamp(0)
user_id String
user Admin @relation(fields: [user_id], references: [id])
account_id String @unique
account Account @relation(fields: [account_id], references: [id])
@@map("admin_accounts")
}
// model LegalProfile {
// user_id String @id
// company_name String
// register_no String @unique()
// representative_name String?
// representative_national_id String?
// // user User @relation(fields: [user_id], references: [id])
// @@map("legal_profiles")
// }
// model IndividualProfile {
// user_id String @id
// national_code String @unique()
// first_name String
// last_name String
// birth_date DateTime?
// mobile_number String
// // user User @relation(fields: [user_id], references: [id])
// @@map("individual_profiles")
// }
+38 -20
View File
@@ -1,26 +1,44 @@
model Token {
id String @id @default(uuid())
token String @unique
type TokenType
created_at DateTime @default(now())
expires_at DateTime
model Account {
id String @id @default(uuid())
username String @unique()
password String @unique()
status AccountStatus
type AccountType
account_id String
account Account @relation(fields: [account_id], references: [id])
admin_account AdminAccount?
provider_account ProviderAccount?
partner_account PartnerAccount?
consumer_account ConsumerAccount?
@@unique([type, account_id])
@@map("tokens")
// tokens Token[]
// refresh_tokens RefreshToken[]
@@map("accounts")
}
model VerificationCode {
id String @id @default(uuid())
code String
is_used Boolean @default(false)
created_at DateTime @default(now())
expires_at DateTime
// model Token {
// id String @id @d @uniqueefault(uuid())
// token String @unique
// type TokenType
// created_at DateTime @default(now())
// expires_at DateTime
account_id String
account Account @relation(fields: [account_id], references: [id])
// account_id String
// account Account @relation(fields: [account_id], references: [id])
@@map("verification_codes")
}
// @@unique([type, account_id])
// @@map("tokens")
// }
// model VerificationCode {
// id String @id @default(uuid())
// code String
// is_used Boolean @default(false)
// created_at DateTime @default(now())
// expires_at DateTime
// account_id String
// account Account @relation(fields: [account_id], references: [id])
// @@map("verification_codes")
// }
@@ -1,16 +1,35 @@
model Guild {
id String @id @default(uuid())
name String
code String?
model Consumer {
id String @id @default(uuid())
mobile_number String @unique()
first_name String
last_name String
status ConsumerStatus @default(ACTIVE)
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt() @db.Timestamp(0)
business_activities BusinessActivity[]
goods Good[]
good_categories GoodCategory[]
accounts ConsumerAccount[]
businessActivities BusinessActivity[]
@@map("guilds")
@@map("consumers")
}
model ConsumerAccount {
id String @id @default(uuid())
role ConsumerRole
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt() @db.Timestamp(0)
user_id String
user Consumer @relation(fields: [user_id], references: [id])
account_id String @unique
account Account @relation(fields: [account_id], references: [id])
permissions PermissionConsumer[]
@@map("consumer_accounts")
}
model BusinessActivity {
@@ -20,13 +39,13 @@ model BusinessActivity {
updated_at DateTime @updatedAt() @db.Timestamp(0)
guild_id String
owner_id String
user_id String
guild Guild @relation(fields: [guild_id], references: [id])
user User @relation(fields: [owner_id], references: [id])
guild Guild @relation(fields: [guild_id], references: [id])
user Consumer @relation(fields: [user_id], references: [id])
complexes Complex[]
accounts Account[]
complexes Complex[]
permissionBusinesses PermissionBusiness[]
@@map("business_activities")
}
@@ -44,9 +63,10 @@ model Complex {
business_activity BusinessActivity @relation(fields: [business_activity_id], references: [id])
pos_list Pos[]
goods Good[]
good_categories GoodCategory[]
pos_list Pos[]
goods Good[]
good_categories GoodCategory[]
permissionComplexes PermissionComplex[]
@@map("complexes")
}
@@ -61,16 +81,17 @@ model Pos {
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt() @db.Timestamp(0)
complex_id String
device_id String?
complex_id String
complex Complex @relation(fields: [complex_id], references: [id])
device_id String?
device Device? @relation(fields: [device_id], references: [id])
provider_id String?
provider Provider? @relation(fields: [provider_id], references: [id])
complex Complex @relation(fields: [complex_id], references: [id])
device Device? @relation(fields: [device_id], references: [id])
provider Provider? @relation(fields: [provider_id], references: [id])
licenses License[]
accounts Account[]
licenses License[]
permissionPos PermissionPos[]
@@map("poses")
}
+18 -16
View File
@@ -1,29 +1,31 @@
model Partner {
id String @id @default(uuid())
id String @id @default(uuid())
name String
code String?
license_quota Int? @default(0)
code String @unique()
license_quota Int? @default(0)
status PartnerStatus @default(ACTIVE)
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @default(now()) @updatedAt @db.Timestamp(0)
licenses License[]
account Account[]
accounts PartnerAccount[]
@@map("partners")
}
// model PartnerAccount {
// id String @id @default(uuid())
// role PartnerRole
// status AccountStatus @default(ACTIVE)
// created_at DateTime @default(now())
// partner_id String
// account_id String @unique
model PartnerAccount {
id String @id @default(uuid())
role PartnerRole
// partner Partner @relation(fields: [partner_id], references: [id])
// account Account @relation(fields: [account_id], references: [id])
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @default(now()) @updatedAt @db.Timestamp(0)
// @@unique([partner_id, account_id])
// @@map("partner_accounts")
// }
user_id String
user Partner @relation(fields: [user_id], references: [id])
account_id String @unique
account Account @relation(fields: [account_id], references: [id])
@@map("partner_accounts")
}
+55
View File
@@ -0,0 +1,55 @@
model PermissionConsumer {
id String @id @default(uuid())
account_id String @unique
account ConsumerAccount @relation(fields: [account_id], references: [id])
posPermissions PermissionPos[]
complexPermissions PermissionComplex[]
businessPermissions PermissionBusiness[]
@@map("permission_consumers")
}
model PermissionPos {
id String @id @default(uuid())
role POSRole
pos_id String
permission_id String
pos Pos @relation(fields: [pos_id], references: [id])
permission PermissionConsumer @relation(fields: [permission_id], references: [id])
@@unique([permission_id, pos_id])
@@map("permission_poses")
}
model PermissionComplex {
id String @id @default(uuid())
role ComplexRole
complex_id String
permission_id String
complex Complex @relation(fields: [complex_id], references: [id])
permission PermissionConsumer @relation(fields: [permission_id], references: [id])
@@unique([permission_id, complex_id])
@@map("permission_complexes")
}
model PermissionBusiness {
id String @id @default(uuid())
role BusinessRole
business_id String
permission_id String
business BusinessActivity @relation(fields: [business_id], references: [id])
permission PermissionConsumer @relation(fields: [permission_id], references: [id])
@@unique([permission_id, business_id])
@@map("permission_business_activities")
}
-77
View File
@@ -1,77 +0,0 @@
model User {
id String @id @default(uuid())
// user_type UserType
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt() @db.Timestamp(0)
// individual_profile IndividualProfile?
// legal_profile LegalProfile?
mobile_number String @unique()
national_code String? @unique()
first_name String
last_name String
// username String
accounts Account[]
businessActivities BusinessActivity[]
@@map("users")
}
// model LegalProfile {
// user_id String @id
// company_name String
// register_no String @unique()
// representative_name String?
// representative_national_id String?
// // user User @relation(fields: [user_id], references: [id])
// @@map("legal_profiles")
// }
// model IndividualProfile {
// user_id String @id
// national_code String @unique()
// first_name String
// last_name String
// birth_date DateTime?
// mobile_number String
// // user User @relation(fields: [user_id], references: [id])
// @@map("individual_profiles")
// }
model Account {
id String @id @default(uuid())
username String @unique()
// first_name String
// last_name String
type AccountType
status AccountStatus
password String
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt() @db.Timestamp(0)
user_id String
user User @relation(fields: [user_id], references: [id])
partner_id String?
partner Partner? @relation(fields: [partner_id], references: [id])
business_id String?
business BusinessActivity? @relation(fields: [business_id], references: [id])
provider_id String?
provider Provider? @relation(fields: [provider_id], references: [id])
pos_id String?
pos Pos? @relation(fields: [pos_id], references: [id])
verification_codes VerificationCode[]
tokens Token[]
@@unique([user_id, business_id])
@@unique([user_id, provider_id])
@@unique([user_id, pos_id])
@@map("accounts")
}
+18 -16
View File
@@ -1,28 +1,30 @@
model Provider {
id String @id @default(uuid())
name String
code String?
id String @id @default(uuid())
code String @unique()
status PartnerStatus @default(ACTIVE)
name String
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt @db.Timestamp(0)
pos_list Pos[]
accounts Account[]
accounts ProviderAccount[]
@@map("providers")
}
// model ProviderAccount {
// id String @id @default(uuid())
// role ProviderRole
// status AccountStatus @default(ACTIVE)
// created_at DateTime @default(now())
// provider_id String
// account_id String @unique
model ProviderAccount {
id String @id @default(uuid())
role ProviderRole
// provider Provider @relation(fields: [provider_id], references: [id])
// account Account @relation(fields: [account_id], references: [id])
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt() @db.Timestamp(0)
// @@unique([provider_id, account_id])
// @@map("provider_accounts")
// }
user_id String
user Provider @relation(fields: [user_id], references: [id])
account_id String @unique
account Account @relation(fields: [account_id], references: [id])
@@map("provider_accounts")
}
+51 -37
View File
@@ -8,17 +8,6 @@ enum PaymentMethodType {
OTHER
}
enum PurchaseReceiptStatus {
UNPAID
PARTIALLY_PAID
PAID
}
enum SalesInvoiceType {
GOOD
SERVICE
}
enum UnitType {
COUNT
GRAM
@@ -40,22 +29,6 @@ enum CustomerType {
UNKNOWN
}
enum UserStatus {
ACTIVE
INACTIVE
}
enum AccountRole {
OWNER
OPERATOR
ACCOUNTANT
}
enum AccountStatus {
ACTIVE
SUSPENDED
}
enum POSStatus {
ACTIVE
DISABLED
@@ -64,7 +37,16 @@ enum POSStatus {
enum POSRole {
MANAGER
OPERATOR
VIEWER
}
enum ComplexRole {
MANAGER
OPERATOR
}
enum BusinessRole {
MANAGER
OPERATOR
}
enum LicenseType {
@@ -92,29 +74,61 @@ enum UserType {
}
enum AccountType {
PARTNER
BUSINESS
SUPER_ADMIN
ADMIN
PROVIDER
POS
PARTNER
CONSUMER
}
enum UserStatus {
ACTIVE
INACTIVE
}
enum AccountRole {
OWNER
OPERATOR
ACCOUNTANT
}
enum AccountStatus {
ACTIVE
SUSPENDED
}
enum PartnerRole {
ADMIN
OWNER
MANAGER
OPERATOR
}
enum BusinessRole {
ADMIN
OPERATOR
enum PartnerStatus {
ACTIVE
SUSPENDED
}
enum ProviderRole {
ADMIN
OWNER
MANAGER
OPERATOR
}
enum ProviderStatus {
ACTIVE
SUSPENDED
}
enum ConsumerRole {
OWNER
MANAGER
OPERATOR
}
enum ConsumerStatus {
ACTIVE
SUSPENDED
}
enum TokenType {
ACCESS
REFRESH
-2
View File
@@ -15,11 +15,9 @@ model Good {
complex_id String?
category_id String?
guild_id String?
category GoodCategory? @relation(fields: [category_id], references: [id])
complex Complex? @relation(fields: [complex_id], references: [id])
guild Guild? @relation(fields: [guild_id], references: [id])
sales_invoice_items SalesInvoiceItem[]
@@index([category_id])
+13
View File
@@ -0,0 +1,13 @@
model Guild {
id String @id @default(uuid())
name String
code String?
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt() @db.Timestamp(0)
business_activities BusinessActivity[]
good_categories GoodCategory[]
@@map("guilds")
}