API-сервер для управления проектами и задачами, разработанный на Golang.
- Go 1.24
- Gin Web Framework
- GORM (PostgreSQL)
- JWT для аутентификации
- Swagger для документации API
- Docker и Docker Compose для контейнеризации
- Клонируйте репозиторий:
git clone https://github.com/Danil1182/task-manager-api.git
cd task-manager-api- Соберите приложение с помощью Docker Compose:
docker-compose build- Запустите приложение с помощью Docker Compose:
docker-compose up -dЭта команда запустит два контейнера:
- API-сервер на порту 8080
- PostgreSQL на порту 5432
При первом запуске вы можете создать учётную запись администратора:
{
"username": "admin",
"email": "admin@example.com",
"password": "admin_password",
"role": "admin"
}- Проверьте работу API:
Откройте в браузере: http://localhost:8080/docs или http://localhost:8080/swagger/index.html
Если хотите просто остановить, но чтобы контейнер остался в Docker Desktop:
docker-compose stopПолная остановка и удаление контейнеров, но без удаления данных БД:
docker-compose downДля удаления всех данных, включая тома базы данных:
docker-compose down -vВсе необходимые переменные окружения уже настроены в файле docker-compose.yml. При необходимости вы можете изменить их значения:
DB_HOST- хост базы данных (postgres)DB_USER- пользователь базы данных (postgres)DB_PASSWORD- пароль базы данных (postgres)DB_NAME- имя базы данных (taskmanager)DB_PORT- порт базы данных (5432)JWT_SECRET- секретный ключ для JWT токенов
После запуска приложения документация API доступна по адресу:
| Метод | Путь | Описание |
|---|---|---|
POST |
/api/v1/auth/register |
Регистрация нового пользователя |
POST |
/api/v1/auth/login |
Аутентификация и получение JWT токена |
GET |
/api/v1/users |
Получение списка всех пользователей (для админа) |
GET |
/api/v1/users/:id |
Получение информации о пользователе по ID |
POST |
/api/v1/projects |
Создание нового проекта |
GET |
/api/v1/projects |
Получение списка проектов |
GET |
/api/v1/projects/:id |
Получение информации о проекте |
PUT |
/api/v1/projects/:id |
Обновление данных проекта |
DELETE |
/api/v1/projects/:id |
Удаление проекта |
POST |
/api/v1/projects/:id/tasks |
Создание новой задачи в проекте |
GET |
/api/v1/projects/:id/tasks |
Получение всех задач в проекте с возможностью фильтрации |
PUT |
/api/v1/tasks/:id |
Обновление задачи |
DELETE |
/api/v1/tasks/:id |
Удаление задачи |
GET |
/docs |
Swagger-документация API |
В системе реализовано разграничение прав доступа между различными типами пользователей:
- Могут создавать собственные проекты
- Могут просматривать только свои проекты и задачи
- Могут управлять (создавать, редактировать, удалять) только своими задачами
- Не имеют доступа к проектам и задачам других пользователей
- Имеют полный доступ ко всем проектам и задачам в системе
- Могут просматривать список всех пользователей
- Могут управлять (создавать, редактировать, удалять) любыми проектами и задачами
- Могут назначать задачи любым пользователям
При регистрации пользователя можно указать роль "admin" в поле "role". По умолчанию новые пользователи получают роль "user".
{
"username": "admin",
"email": "admin@example.com",
"password": "admin_password",
"role": "admin"
}curl -X POST http://localhost:8080/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "user1",
"email": "user1@example.com",
"password": "password123"
}'curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "user1",
"password": "password123"
}'curl -X POST http://localhost:8080/api/v1/projects \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"name": "Новый проект",
"description": "Описание проекта"
}'curl -X POST http://localhost:8080/api/v1/projects/1/tasks \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"title": "Новая задача",
"description": "Описание задачи",
"priority": "высокий",
"status": "в очереди",
"deadline": "2025-12-31T23:59:59Z"
}'При получении списка задач проекта (GET /api/v1/projects/:id/tasks) можно использовать следующие параметры фильтрации:
status- Фильтр по статусу (в очереди, в работе, завершена)priority- Фильтр по приоритету (низкий, средний, высокий)deadline- Фильтр по дедлайну (формат: YYYY-MM-DD)
Пример:
curl -X GET "http://localhost:8080/api/v1/projects/1/tasks?status=в%20работе&priority=высокий" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Важенин Данил Сергеевич, КГУ