Добавлены новые зависимости, обновлены стили и улучшена структура проекта. Обновлен README с описанием функционала и технологий. Реализована анимация и адаптивный дизайн. Настроена авторизация с использованием Apollo Client.
This commit is contained in:
191
prisma/schema.prisma
Normal file
191
prisma/schema.prisma
Normal file
@ -0,0 +1,191 @@
|
||||
// This is your Prisma schema file,
|
||||
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
// Модель пользователя
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
phone String @unique
|
||||
avatar String? // URL аватара в S3
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
// Связь с организацией
|
||||
organization Organization? @relation(fields: [organizationId], references: [id])
|
||||
organizationId String?
|
||||
|
||||
// SMS коды для авторизации
|
||||
smsCodes SmsCode[]
|
||||
|
||||
@@map("users")
|
||||
}
|
||||
|
||||
// Модель для SMS кодов
|
||||
model SmsCode {
|
||||
id String @id @default(cuid())
|
||||
code String
|
||||
phone String
|
||||
expiresAt DateTime
|
||||
isUsed Boolean @default(false)
|
||||
attempts Int @default(0)
|
||||
maxAttempts Int @default(3)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
// Связь с пользователем
|
||||
user User? @relation(fields: [userId], references: [id])
|
||||
userId String?
|
||||
|
||||
@@map("sms_codes")
|
||||
}
|
||||
|
||||
// Модель организации
|
||||
model Organization {
|
||||
id String @id @default(cuid())
|
||||
inn String @unique
|
||||
kpp String? // КПП
|
||||
name String? // Краткое наименование
|
||||
fullName String? // Полное наименование
|
||||
ogrn String? // ОГРН организации
|
||||
ogrnDate DateTime? // Дата выдачи ОГРН
|
||||
type OrganizationType
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
// Адрес организации
|
||||
address String? // Адрес одной строкой
|
||||
addressFull String? // Полный адрес с индексом
|
||||
|
||||
// Статус организации
|
||||
status String? // ACTIVE, LIQUIDATED и т.д.
|
||||
actualityDate DateTime? // Дата последних изменений
|
||||
registrationDate DateTime? // Дата регистрации
|
||||
liquidationDate DateTime? // Дата ликвидации
|
||||
|
||||
// Руководитель
|
||||
managementName String? // ФИО или наименование руководителя
|
||||
managementPost String? // Должность руководителя
|
||||
|
||||
// ОПФ (Организационно-правовая форма)
|
||||
opfCode String? // Код ОКОПФ
|
||||
opfFull String? // Полное название ОПФ
|
||||
opfShort String? // Краткое название ОПФ
|
||||
|
||||
// Коды статистики
|
||||
okato String? // Код ОКАТО
|
||||
oktmo String? // Код ОКТМО
|
||||
okpo String? // Код ОКПО
|
||||
okved String? // Основной код ОКВЭД
|
||||
|
||||
// Контакты
|
||||
phones Json? // Массив телефонов
|
||||
emails Json? // Массив email адресов
|
||||
|
||||
// Финансовые данные
|
||||
employeeCount Int? // Численность сотрудников
|
||||
revenue BigInt? // Выручка
|
||||
taxSystem String? // Система налогообложения
|
||||
|
||||
// Полные данные из DaData (для полноты)
|
||||
dadataData Json?
|
||||
|
||||
// Связи
|
||||
users User[]
|
||||
apiKeys ApiKey[]
|
||||
|
||||
// Связи контрагентов
|
||||
sentRequests CounterpartyRequest[] @relation("SentRequests")
|
||||
receivedRequests CounterpartyRequest[] @relation("ReceivedRequests")
|
||||
organizationCounterparties Counterparty[] @relation("OrganizationCounterparties")
|
||||
counterpartyOf Counterparty[] @relation("CounterpartyOf")
|
||||
|
||||
@@map("organizations")
|
||||
}
|
||||
|
||||
// Модель для API ключей маркетплейсов
|
||||
model ApiKey {
|
||||
id String @id @default(cuid())
|
||||
marketplace MarketplaceType
|
||||
apiKey String
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
// Данные для валидации (например, информация о продавце)
|
||||
validationData Json?
|
||||
|
||||
// Связь с организацией
|
||||
organization Organization @relation(fields: [organizationId], references: [id])
|
||||
organizationId String
|
||||
|
||||
@@unique([organizationId, marketplace])
|
||||
@@map("api_keys")
|
||||
}
|
||||
|
||||
// Тип организации
|
||||
enum OrganizationType {
|
||||
FULFILLMENT // Фулфилмент
|
||||
SELLER // Селлер
|
||||
LOGIST // Логистика
|
||||
WHOLESALE // Оптовик
|
||||
}
|
||||
|
||||
// Тип маркетплейса
|
||||
enum MarketplaceType {
|
||||
WILDBERRIES
|
||||
OZON
|
||||
}
|
||||
|
||||
// Модель для заявок на добавление в контрагенты
|
||||
model CounterpartyRequest {
|
||||
id String @id @default(cuid())
|
||||
status CounterpartyRequestStatus @default(PENDING)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
// Кто отправил заявку
|
||||
sender Organization @relation("SentRequests", fields: [senderId], references: [id])
|
||||
senderId String
|
||||
|
||||
// Кому отправили заявку
|
||||
receiver Organization @relation("ReceivedRequests", fields: [receiverId], references: [id])
|
||||
receiverId String
|
||||
|
||||
// Комментарий к заявке
|
||||
message String?
|
||||
|
||||
@@unique([senderId, receiverId])
|
||||
@@map("counterparty_requests")
|
||||
}
|
||||
|
||||
// Модель для связей контрагентов
|
||||
model Counterparty {
|
||||
id String @id @default(cuid())
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
// Основная организация
|
||||
organization Organization @relation("OrganizationCounterparties", fields: [organizationId], references: [id])
|
||||
organizationId String
|
||||
|
||||
// Контрагент
|
||||
counterparty Organization @relation("CounterpartyOf", fields: [counterpartyId], references: [id])
|
||||
counterpartyId String
|
||||
|
||||
@@unique([organizationId, counterpartyId])
|
||||
@@map("counterparties")
|
||||
}
|
||||
|
||||
// Статус заявки на добавление в контрагенты
|
||||
enum CounterpartyRequestStatus {
|
||||
PENDING // Ожидает ответа
|
||||
ACCEPTED // Принята
|
||||
REJECTED // Отклонена
|
||||
CANCELLED // Отменена отправителем
|
||||
}
|
Reference in New Issue
Block a user