Система управления сроками годности товаров для автоматического отслеживания и уведомления о приближающихся сроках годности.
ExpirationMaster - это комплексное решение для предприятий, которым необходимо контролировать сроки годности товаров. Система позволяет отслеживать партии товаров, автоматически определять приближающиеся к истечению сроки годности и отправлять уведомления, а также производить списания просроченных товаров.
Проект состоит из следующих компонентов:
- Основной REST API для работы с товарами, партиями и списаниями
- Использует PostgreSQL для хранения данных
- Включает систему ролевой авторизации
- Обрабатывает CORS и стандартные middleware для логирования и восстановления после паники
- Сервис уведомлений, который периодически опрашивает API для получения информации о товарах, приближающихся к окончанию срока годности
- Отправляет уведомления в Telegram о скором истечении срока годности
- Работает по таймеру с заданным интервалом
- Интеграционный сервис для обмена данными через RabbitMQ
- Принимает данные о товарах из внешних систем
- Взаимодействует с API для сохранения информации о товарах
- Веб-интерфейс на Bootstrap с возможностью темной темы
- Отображает партии с риском (истекающие и просроченные)
- Позволяет производить списания товаров
Система работает с тремя основными сущностями:
- Product - информация о товаре (наименование, категория, цена и т.д.)
- Batch - партия товара с датой поступления и сроком годности
- Writeoff - запись о списании части или всего количества товара из партии
- Язык программирования: Go
- База данных: PostgreSQL
- Асинхронные сообщения: RabbitMQ
- Веб-фреймворк: Chi
- Веб-интерфейс: Bootstrap
- Контейнеризация: Docker, Docker Compose
- Склонируйте репозиторий:
git https://github.com/Voreger/ExpirationMaster- Скопируйте файл конфигурации:
cp .env.example .env- Настройте переменные окружения в файле
.env:
POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DB- учетные данные для PostgreSQLDATABASE_URL- строка подключения к базе данныхTELEGRAM_BOT_TOKEN,TELEGRAM_CHAT_ID- для уведомлений в Telegram- Другие параметры конфигурации
- Запустите приложение с помощью Docker Compose:
docker-compose up --buildGET /products- получить список товаровPOST /products- создать новый товарGET /products/{id}- получить информацию о товареPUT /products/{id}- обновить информацию о товареDELETE /products/{id}- удалить товар
GET /batches- получить список партийPOST /batches- создать новую партиюGET /batches/{id}- получить информацию о партииPUT /batches/{id}- обновить информацию о партииDELETE /batches/{id}- удалить партию
GET /writeoffs- получить список списанийPOST /writeoffs- создать новое списаниеGET /writeoffs/{id}- получить информацию о списании
Система автоматически отправляет уведомления в Telegram за заданное количество дней до истечения срока годности товара. Для настройки уведомлений необходимо:
- Создать Telegram-бота
- Указать токен бота и ID чата в переменных окружения
Интеграция с внешними системами осуществляется через RabbitMQ. Интеграционный сервис присылает сообщения в очередь для сохранения информации о товарах.
Веб-интерфейс доступен по адресу http://localhost:8080/ui/ и предоставляет возможность:
- Просматривать партии с риском (истекающие и просроченные)
- Производить списания товаров
- Просматривать историю списаний
- Переключать светлую/темную тему
Система включает ролевую авторизацию для защиты API-эндпоинтов. Все запросы должны содержать корректный заголовок авторизации с ролью пользователя.
Все запросы и ошибки логируются для возможности аудита и диагностики проблем в работе системы.
Система предоставляет эндпоинт /health для проверки состояния сервиса.