REST API для управления пользователями и их заказами на Go с использованием PostgreSQL, GORM, Gin и JWT-авторизации
✅ Защищено — требуется JWT-токен в заголовке запроса
Authorization: Bearer <token>
| Метод | Эндпоинт | Описание | Авторизация |
|---|---|---|---|
| POST | /auth/login |
Авторизация | 🔓 |
| POST | /users |
Создание пользователя | 🔓 |
| GET | /users |
Получение списка пользователей | 🔒 |
| GET | /users/{id} |
Получение пользователя по ID | 🔒 |
| PUT | /users/{id} |
Обновление пользователя | 🔒 |
| DELETE | /users/{id} |
Удаление пользователя | 🔒 |
| POST | /users/{user_id}/orders |
Создание заказа для пользователя | 🔒 |
| GET | /users/{user_id}/orders |
Получение списка заказов пользователя | 🔒 |
Полная документация — Swagger UI
Требуется установленный Docker и Docker Compose
SERVER_PORT=8080 # Порт, на котором запускается сервер
DB_HOST=localhost # Адрес сервера базы данных PostgreSQL
DB_PORT=5432 # Порт базы данных PostgreSQL
DB_USER=postgres # Имя пользователя для подключения к БД
DB_PASSWORD=db-password # Пароль пользователя для подключения к БД
DB_NAME=user_order_api # Имя базы данных
DB_SSLMODE=disable # Режим SSL для подключения к БД
JWT_SECRET=your-secret-key # Секретный ключ для подписи JWT
JWT_EXPIRATION=24h # Время жизни токена (например, 24h)
GIN_MODE=debug # Режим работы Gin (debug/release)
LOG_FILE=logs/app.log # Путь к файлу логовdocker compose up -d --builddocker compose up
Дополнительно. Смена переменных окружения (очистка базы данных и создание новой) / При непредвиденных ошибках
docker compose down
docker volume rm user-order-api_db-data
docker compose up -d --build
Требуется установленный Golang (1.24.2) и PostgreSQL
SERVER_PORT=8080 # Порт, на котором запускается сервер
DB_HOST=localhost # Адрес сервера базы данных PostgreSQL
DB_PORT=5432 # Порт базы данных PostgreSQL
DB_USER=postgres # Имя пользователя для подключения к БД
DB_PASSWORD=db-password # Пароль пользователя для подключения к БД
DB_NAME=user_order_api # Имя базы данных
DB_SSLMODE=disable # Режим SSL для подключения к БД
JWT_SECRET=your-secret-key # Секретный ключ для подписи JWT
JWT_EXPIRATION=24h # Время жизни токена (например, 24h)
GIN_MODE=debug # Режим работы Gin (debug/release)
LOG_FILE=logs/app.log # Путь к файлу логов./setup.sh
./server.exe
или
go run cmd/main.go
go test -v ./internal/tests
user-order-api/
├── cmd/ # Точка входа в приложение
├── internal/ # Внутренние пакеты приложения
│ ├── config/ # Конфигурация приложения
│ ├── handlers/ # HTTP-обработчики (контроллеры)
│ ├── middleware/ # Промежуточные обработчики (обёртки)
│ ├── models/ # Описания моделей данных (структуры для БД)
│ ├── repository/ # Слой доступа к данным (репозитории)
│ ├── services/ # Бизнес-логика (сервисы)
│ ├── utils/ # Вспомогательные функции и утилиты
│ └── tests/ # Тесты
├── migrations/ # SQL-миграции
├── docs/ # Документация API
├── go.mod # Файл зависимостей Go-модулей
├── go.sum # Контрольные суммы зависимостей
├── LICENSE # Лицензия проекта
├── README.md # Основная документация и инструкции по запуску
├── setup.sh # Установщик миграций и приложения
├── Dockerfile # Dockerfile для сборки контейнера приложения
└── docker-compose.yml # Docker Compose для запуска приложения и БД