Этот проект реализует систему импорта данных из файлов (например, Excel или CSV) в базу данных PostgreSQL. Проект использует:
- Laravel для управления бизнес-логикой.
- Supervisor для обработки фоновых задач (очередей).
- Redis для очередей.
- Nginx в качестве веб-сервера.
- Docker для контейнеризации приложения.
Система поддерживает:
- Валидацию данных.
- Асинхронную обработку больших файлов через очереди.
- Настройку параметров импорта (размер пакета, использование очередей, номер строки заголовка).
Для работы с проектом вам потребуется:
- Docker и Docker Compose.
- PHP 8.3.
- Node.js (для сборки фронтенда).
- База данных PostgreSQL.
- Redis.
Склонируйте репозиторий на ваш компьютер:
git clone https://github.com/livevasiliy/slava-test-case.git
cd slava-test-caseСоздайте файл .env на основе .env.example:
cp .env.example .envЗаполните следующие переменные:
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=app_db
DB_USERNAME=user
DB_PASSWORD=password
REDIS_HOST=redis
REDIS_PORT=6379Соберите и запустите контейнеры с помощью Docker Compose:
docker-compose up --buildПосле запуска контейнеров установите зависимости PHP и Node.js:
docker-compose exec php composer install
docker-compose exec php npm installСгенерируйте ключ приложения Laravel:
docker-compose exec php php artisan key:generateВыполните миграции базы данных:
docker-compose exec php php artisan migrateЕсли необходимо, запустите сиды для наполнения базы тестовыми данными:
docker-compose exec php php artisan db:seedСоберите статические файлы фронтенда:
docker-compose exec php npm run buildДля импорта данных отправьте POST-запрос на эндпоинт /import с файлом:
curl -X POST http://localhost:8080/import \
-F "file=@/path/to/your/file.xlsx"Логи приложения находятся в директории storage/logs. Вы можете просмотреть их с помощью команды:
docker-compose exec php tail -f storage/logs/laravel.logПроверьте статус фоновых задач (очередей):
docker-compose exec php php artisan queue:workИли проверьте Supervisor:
docker-compose exec php supervisorctl status.
├── app/ # Основная логика приложения
├── Exceptions/ # Классы для исключений
├── FileReaders/ # Классы для чтения файлов
├── Http/ # Классы для работы с Http запросами
├── Imports/ # Классы для работы с импортом
├── Jobs/ # Классы для фоновых задач (Laravel Jobs)
├── Logger/ # Классы для собственных логгеров
├── Models/ # Классы моделей
├── Providers/ # Классы Service Provider
├── Validators/ # Собственные валидаторы данных для импорта
├── config/ # Конфигурационные файлы Laravel
├── database/ # Миграции и сиды
├── docker/ # Конфигурация Docker
├── nginx/ # Файлы конфигурация Nginx
├── nginx.conf # Основная конфигурация Nginx
├── supervisord/ # Файлы конфигурация Supervisor
├── supervisord.conf # Конфигурация Supervisor
├── php-fpm/ # Файлы конфигурация php-fpm
├── Dockerfile # Dockerfile php-fpm контейнера
├── public/ # Публичные файлы
├── resources/ # Шаблоны Blade и assets
├── routes/ # Маршруты
├── storage/ # Логи и временные файлы
└── .env # Переменные окружения
Запустите тесты PHPUnit:
docker-compose exec php php artisan testИспользуйте Postman или curl для тестирования endpoint.
Этот проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.
- Василий Пивоваров (GitHub)