Загрузка данных


@startuml
class Пользователь {
  - id: int
  - логин: string
  - пароль: string
  - фамилия: string
  - имя: string
  - отчество: string
  - телефон: string
  - email: string
  + авторизоваться()
}

class Покупатель {
  - бонусныеБаллы: int
  + добавитьТоварВКорзину()
  + оформитьЗаказ()
}

class Менеджер {
  + проверитьНаличие()
  + подтвердитьЗаказ()
  + передатьВДоставку()
}

class Курьер {
  - номерУдостоверения: string
  + принятьОплату()
  + обновитьСтатусДоставлен()
}

class Администратор {
  + вестиУчетТоваров()
  + вестиУчетКатегорий()
  + сформироватьОтчетПродажи()
}

class Категория {
  - id: int
  - название: string
  - описание: string
  + получитьТовары()
}

class Товар {
  - id: int
  - артикул: string
  - название: string
  - цена: decimal
  - количество: int
  - описание: string
  + обновитьОстаток()
}

class Корзина {
  - id: int
  - датаСоздания: datetime
  + добавитьПозицию()
  + удалитьПозицию()
  + рассчитатьИтог()
}

class ПозицияКорзины {
  - количество: int
  - ценаВМоментДобавления: decimal
}

class Заказ {
  - id: int
  - датаОформления: datetime
  - адресДоставки: string
  - итоговаяСумма: decimal
  - статус: СтатусЗаказа
  + подтвердить()
  + отменить()
}

enum СтатусЗаказа {
  НОВЫЙ
  ПОДТВЕРЖДЕН
  В_ДОСТАВКЕ
  ДОСТАВЛЕН
  ОТМЕНЕН
}

class СпособОплаты {
  - id: int
  - наименование: string
  - требуетПредоплату: boolean
}

class Оплата {
  - id: int
  - сумма: decimal
  - дата: datetime
  - статус: СтатусОплаты
}

enum СтатусОплаты {
  ОЖИДАНИЕ
  ОПЛАЧЕНО
  ОТКАЗАНО
}

class ОтчетПродаж {
  - id: int
  - месяц: date
  - общаяСумма: decimal
  + сформировать()
}

' Наследование
Пользователь <|-- Покупатель
Пользователь <|-- Менеджер
Пользователь <|-- Курьер
Пользователь <|-- Администратор

' Ассоциации
Категория "1" -- "*" Товар : содержит
Товар "1" -- "*" ПозицияКорзины : входит в
Корзина "1" -- "*" ПозицияКорзины : состоит из
Покубатель "1" -- "1" Корзина : имеет

Заказ "1" -- "1" Покупатель : оформляет
Заказ "1" -- "*" ПозицияКорзины : содержит
Заказ "1" -- "1" СпособОплаты : использует
Заказ "1" -- "1" Оплата : связан с
Заказ "1" -- "1" СтатусЗаказа : имеет

Менеджер "*" -- "*" Заказ : обрабатывает
Курьер "*" -- "*" Заказ : доставляет

Администратор "1" -- "*" ОтчетПродаж : формирует

@enduml