Skip to content

BOBAvov/tasks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tasks API (Go, in-memory, async logging)

REST API для управления задачами:

  • GET /tasks — список задач (фильтрация по статусу: status=todo|in_progress|done)
  • GET /tasks/{id} — получить задачу по ID
  • POST /tasks — создать задачу

Особенности:

  • Только стандартная библиотека (net/http, context, sync, encoding/json и т.д.)
  • Чистая архитектура (domain → repository → service → transport)
  • Асинхронный лог через канал и отдельную горутину
  • In-memory хранилище (данные теряются при перезапуске)
  • Graceful shutdown

Быстрый старт (Docker Compose)

Требуется:

  • Docker и docker-compose

Команда запуска:

docker-compose up --build -d

Проверка:

# Список задач
curl -s http://localhost:8080/tasks | jq

# Создать задачу
curl -s -X POST http://localhost:8080/tasks \
  -H 'Content-Type: application/json' \
  -d '{"title":"Buy milk","description":"2L whole milk","status":"todo"}' | jq

# Получить по ID
curl -s http://localhost:8080/tasks/1 | jq

# Фильтрация по статусу
curl -s 'http://localhost:8080/tasks?status=in_progress' | jq

Логи приложения:

docker-compose logs -f api

Остановка:

docker-compose down

Примечания:

  • По умолчанию сервис слушает :8080 и проброшен на localhost:8080.
  • Данные хранятся в памяти контейнера и будут потеряны при перезапуске.

Параметры запуска

Можно переопределять флаги через docker-compose.yml (секция command):

  • -addr — адрес HTTP-сервера (по умолчанию :8080)
  • -log-buffer — размер буфера канала логгера (по умолчанию 1024)
  • -shutdown-timeout — таймаут graceful shutdown (по умолчанию 10s)

Пример (фрагмент docker-compose.yml):

services:
  api:
    command: ["-addr=:8080", "-log-buffer=2048", "-shutdown-timeout=5s"]

API кратко

Статусы задач: todo, in_progress, done.

Примеры:

  • Создать — POST /tasks
    • тело: {"title":"...", "description":"...", "status":"todo|in_progress|done"} (status опционален, по умолчанию todo)
  • Получить все — GET /tasks
    • опционально: ?status=todo|in_progress|done
  • Получить по ID — GET /tasks/{id}

Ответы — JSON. Ошибки возвращаются в виде {"error":"..."}.

Архитектура

  • cmd/api/main.go — вход, DI, сервер, graceful shutdown
  • internal/domain — доменная модель (Task) и валидация
  • internal/repository/inmemory — потокобезопасное in-memory хранилище
  • internal/service — бизнес-логика
  • internal/transport/http — маршрутизация и обработчики
  • internal/logger — асинхронный логгер (канал + горутина)

Локальная разработка (без Docker)

go build -o ./bin/tasks ./cmd/api
./bin/tasks -addr=:8080 -log-buffer=1024 -shutdown-timeout=10s

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published