Программная система для директора аптеки, обеспечивающая хранение и управление сведениями об аптеке, товарах и поставщиках.
Система предназначена для директора аптеки и обеспечивает хранение и управление следующими данными:
- Сведения об аптеке
- Сведения о товарах (наименование, цена, фасовка, срок годности, количество)
- Сведения о поставщиках и поставляемых ими товарах
Система позволяет директору аптеки закупать недостающие товары у поставщиков и списывать просроченные товары. При этом учитывается предпочтение поставщиков для различных товаров (задается цифрой 1, 2 или 3).
- Хранение и управление сведениями об аптеке, товарах и поставщиках
- Добавление, удаление и обновление товаров
- Закупка товаров у поставщиков с учетом предпочтений
- Списание просроченных товаров
- Отслеживание сроков годности товаров
- Директор: управление аптекой, закупка товаров, списание просроченных товаров
- Поставщик: управление своими товарами, которые он готов продавать
- Администратор: полный доступ ко всем функциям системы
- Какие товары и в каком количестве имеются в каждой аптеке
- У каких товаров и в каких аптеках закончился срок годности товара
- Какие товары можно заказать у поставщиков
- Суммарная стоимость товаров в аптеке
- У каких поставщиков и в каком количестве есть товар нужного наименования
- У какого поставщика имеется товар с заданной фасовкой
- Идентификатор
- Название
- Текущая дата (для проверки сроков годности)
- Список товаров
- Идентификатор
- Наименование
- Фасовка (список значений, например: "5 мг", "10 мг")
- Цена
- Количество
- Срок годности
- Предпочтительный поставщик
- Идентификатор
- Название
- Список товаров
- Аптека-Товар: многие-ко-многим с дополнительным полем количества товара в аптеке
- Поставщик-Товар: многие-ко-многим с дополнительными полями количества товара у поставщика и предпочтения (1, 2 или 3)
- Backend: Python + FastAPI
- База данных: PostgreSQL
- Frontend: HTML, CSS, JavaScript
- Контейнеризация: Docker и Docker Compose
- Docker и Docker Compose
- Git (опционально, для клонирования репозитория)
-
Клонировать репозиторий:
git clone <url-репозитория> cd pharmacy -
Запустить приложение с помощью скрипта:
- В Windows:
run.bat - В Linux/MacOS:
chmod +x run.sh ./run.sh
Или вручную с помощью Docker Compose:
docker-compose up --build - В Windows:
-
Дождаться инициализации всех сервисов. При первом запуске это может занять некоторое время, так как Docker будет загружать необходимые образы и собирать контейнеры.
-
Открыть приложение в браузере:
- Backend API:
http://localhost:8000 - Frontend:
http://localhost:3000
- Backend API:
-
Для входа в систему используйте следующие учетные данные:
- Администратор:
- Email: admin@pharmacy.com
- Пароль: admin123
- Директор:
- Email: director@pharmacy.com
- Пароль: director123
- Поставщик:
- Email: supplier@pharmacy.com
- Пароль: supplier123
- Администратор:
-
Для остановки приложения:
- Если запущено через скрипт: нажмите Ctrl+C в терминале
- Если запущено вручную: выполните команду
docker-compose down
После запуска приложения документация API доступна по адресам:
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
GET /api/v1/pharmacies/- получить список всех аптекPOST /api/v1/pharmacies/- создать новую аптекуGET /api/v1/pharmacies/{pharmacy_id}- получить информацию об аптеке по IDPUT /api/v1/pharmacies/{pharmacy_id}- обновить информацию об аптекеDELETE /api/v1/pharmacies/{pharmacy_id}- удалить аптекуPUT /api/v1/pharmacies/{pharmacy_id}/date- обновить текущую дату аптеки
GET /api/v1/products/- получить список всех товаровPOST /api/v1/products/- создать новый товарGET /api/v1/products/{product_id}- получить информацию о товаре по IDPUT /api/v1/products/{product_id}- обновить информацию о товареDELETE /api/v1/products/{product_id}- удалить товарGET /api/v1/products/expired/- получить список просроченных товаровGET /api/v1/products/pharmacy/{pharmacy_id}- получить список товаров в конкретной аптекеGET /api/v1/products/supplier/{supplier_id}- получить список товаров у конкретного поставщикаGET /api/v1/products/dosage/{dosage}- получить список товаров с заданной фасовкойPOST /api/v1/products/pharmacy/{pharmacy_id}/add/{product_id}- добавить товар в аптекуDELETE /api/v1/products/pharmacy/{pharmacy_id}/remove/{product_id}- удалить товар из аптекиGET /api/v1/products/total-cost/- получить суммарную стоимость товаров в аптеке
GET /api/v1/suppliers/- получить список всех поставщиковPOST /api/v1/suppliers/- создать нового поставщикаGET /api/v1/suppliers/{supplier_id}- получить информацию о поставщике по IDPUT /api/v1/suppliers/{supplier_id}- обновить информацию о поставщикеDELETE /api/v1/suppliers/{supplier_id}- удалить поставщикаGET /api/v1/suppliers/product/{product_id}- получить список поставщиков, у которых есть заданный товарGET /api/v1/suppliers/product-name/{product_name}- получить список поставщиков, у которых есть товар с заданным наименованиемGET /api/v1/suppliers/product-dosage/{dosage}- получить список поставщиков, у которых есть товар с заданной фасовкойPOST /api/v1/suppliers/{supplier_id}/add-product/{product_id}- добавить товар к поставщикуDELETE /api/v1/suppliers/{supplier_id}/remove-product/{product_id}- удалить товар у поставщика
pharmacy/
├── backend/ # Серверная часть приложения
│ ├── app/ # Код приложения
│ │ ├── api/ # API endpoints
│ │ │ ├── api.py # Объединение всех API-маршрутов
│ │ │ ├── deps.py # Зависимости для API (авторизация)
│ │ │ └── endpoints/ # Конечные точки API
│ │ │ ├── auth.py # API для аутентификации
│ │ │ ├── pharmacy.py # API для аптек
│ │ │ ├── product.py # API для товаров
│ │ │ ├── supplier.py # API для поставщиков
│ │ │ └── user.py # API для пользователей
│ │ ├── core/ # Конфигурация и настройки
│ │ │ └── config.py # Настройки приложения
│ │ ├── db/ # Модели базы данных
│ │ │ ├── database.py # Настройка подключения к БД
│ │ │ ├── init_db.py # Инициализация БД
│ │ │ ├── models.py # SQLAlchemy модели
│ │ │ └── models_auth.py # Модели аутентификации
│ │ ├── schemas/ # Pydantic модели
│ │ │ ├── pharmacy.py # Схемы для аптек
│ │ │ ├── product.py # Схемы для товаров
│ │ │ ├── supplier.py # Схемы для поставщиков
│ │ │ └── user.py # Схемы для пользователей
│ │ ├── services/ # Бизнес-логика
│ │ │ ├── pharmacy.py # Сервисы для аптек
│ │ │ ├── product.py # Сервисы для товаров
│ │ │ ├── supplier.py # Сервисы для поставщиков
│ │ │ └── user.py # Сервисы для пользователей
│ │ └── main.py # Основной файл приложения
│ ├── Dockerfile # Dockerfile для серверной части
│ └── requirements.txt # Зависимости Python
├── frontend/ # Клиентская часть приложения
│ ├── static/ # Статические файлы
│ │ ├── css/ # CSS стили
│ │ │ ├── bootstrap.min.css # Bootstrap
│ │ │ └── styles.css # Основные стили приложения
│ │ └── js/ # JavaScript файлы
│ │ ├── auth.js # Функции аутентификации
│ │ ├── bootstrap.bundle.min.js # Bootstrap
│ │ ├── main.js # Общие функции JavaScript
│ │ ├── pharmacy.js # Скрипт для страницы аптек
│ │ ├── products.js # Скрипт для страницы товаров
│ │ └── suppliers.js # Скрипт для страницы поставщиков
│ ├── templates/ # HTML шаблоны
│ │ ├── index.html # Главная страница
│ │ ├── login.html # Страница входа
│ │ ├── pharmacy.html # Страница управления аптеками
│ │ ├── products.html # Страница управления товарами
│ │ ├── profile.html # Страница профиля пользователя
│ │ ├── register.html # Страница регистрации
│ │ ├── suppliers.html # Страница управления поставщиками
│ │ └── users.html # Страница управления пользователями
│ └── Dockerfile # Dockerfile для клиентской части
├── docker-compose.yml # Конфигурация Docker Compose
├── run.bat # Скрипт запуска для Windows
├── run.sh # Скрипт запуска для Linux/MacOS
└── README.md # Документация проекта