@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