HTTP API-сервис для создания, мониторинга и удаления задач с хранением состояния в памяти.
- Обзор
- Требования
- Установка
- Запуск сервиса
- Makefile (команды)
- API-эндпоинты
- Swagger (OpenAPI)
- Тестирование
- Структура проекта
- Автор
- Парадигма: DDD + Hexagonal (Clean) Architecture
- Хранение задач: in-memory (map + mutex)
- Асинхронность: goroutine + context.WithCancel
- HTTP-сервер: net/http + ручной mux
- Go 1.23+
- make (рекомендуется)
- swag (для генерации Swagger-документации)
- Клонировать репозиторий:
git clone <URL-репозитория> cd task-manager
- Привести зависимости:
go mod tidy
- (опционально) Установить
swag:go install github.com/swaggo/swag/cmd/swag@latest
make runили без Makefile:
go run main.goСервис стартует на порту :8080.
all:
deps fmt swagger test
deps:
go mod tidy
fmt:
go fmt ./...
swagger:
swag init -g internal/adapter/inbound/http/handler.go -o docs
test:
go test ./... -race -coverprofile=coverage.out
coverage:
go tool cover -func=coverage.out
run:
go run main.go
build:
go build -o bin/task-manager main.go| Метод | Путь | Описание | Код | Ответ |
|---|---|---|---|---|
| POST | /tasks | Создать новую задачу | 201 | CreateTaskResponse |
| GET | /tasks | Список всех задач (ID, статус, createdAt, duration) | 200 | []TaskSummaryDTO |
| GET | /tasks/{id} | Подробный статус задачи | 200 | TaskDTO |
| DELETE | /tasks/{id} | Отменить или удалить задачу | 204 | — |
Сгенерировать:
make swaggerЗапустить UI:
router.Handle("/swagger/", httpSwagger.WrapHandler)Открыть: http://localhost:8080/swagger/index.html
make test
make coverageПокрытие ≥ ~60%.
.
├── cmd/ # реальная точка входа
├── docs/ # Swagger-документация
├── internal/
│ ├── adapter/ # HTTP, memstore, idgen
│ ├── application/ # ports, services
│ ├── common/logger/
│ └── domain/ # Task, Status, Repo interface
├── main.go # точка входа, для обхода путей
├── Makefile
├── go.mod
└── README.md