/tasks-system

RESTfull API веб приложение, для создания и редактирования задач с использованием redis кэша.

Primary LanguageGoMIT LicenseMIT

Техническое Задание (ТЗ) на Разработку Веб-Приложения с Использованием Golang, Redis и Базы Данных


1. Общее Описание

Необходимо разработать веб-приложение на языке программирования Golang, выполняющее простую задачу — управление списком задач (To-Do List). Приложение должно предоставлять RESTful API для создания, чтения, обновления и удаления задач (CRUD-операции). В качестве хранилища данных будет использоваться реляционная база данных. Redis будет задействован для кэширования данных и обеспечения производительности при частых запросах.


2. Функциональные Требования

2.1. Управление Списком Задач (To-Do List)
  • Создание задачи: Пользователь должен иметь возможность создать новую задачу, указав её название, описание и срок выполнения.

  • Просмотр списка задач: Приложение должно предоставлять возможность получения списка всех задач, а также фильтрации задач по их статусу (выполнена, невыполнена).

  • Просмотр конкретной задачи: Пользователь должен иметь возможность получить подробную информацию о конкретной задаче по её ID.

  • Обновление задачи: Пользователь должен иметь возможность обновить информацию о задаче, включая её статус (выполнена/невыполнена).

  • Удаление задачи: Пользователь должен иметь возможность удалить задачу из списка.

2.2. Кэширование с Использованием Redis
  • Кэширование списка задач: Для ускорения получения списка задач необходимо кэшировать результаты запросов к базе данных в Redis. Это позволит снизить нагрузку на базу данных при частых запросах одних и тех же данных.

  • Кэширование конкретной задачи:
    При запросе конкретной задачи по ID, данные также должны кэшироваться. Если информация о задаче изменяется или задача удаляется, соответствующий кэш должен быть обновлён или удалён.


3. Нефункциональные Требования

3.1. Производительность
  • Запросы к списку задач и конкретным задачам должны выполняться с минимальной задержкой, особенно при повторных обращениях, благодаря использованию Redis.
3.2. Надёжность
  • Приложение должно корректно обрабатывать ошибки, такие как недоступность базы данных или Redis, и возвращать соответствующие коды ошибок и сообщения.
3.3. Масштабируемость
  • Архитектура приложения должна предусматривать возможность горизонтального масштабирования, чтобы поддерживать увеличение нагрузки.

4. Технологический Стек

  • Язык программирования: Golang
  • Веб-фреймворк: Gin/Gorilla Mux/Chi (любой на выбор)
  • Кэш: Redis
  • База данных: PostgreSQL/MySQL (выбор зависит от предпочтений)
  • ORM для работы с базой данных: GORM или sqlx
  • Интерфейс взаимодействия с Redis: go-redis

5. Архитектура Приложения

5.1. Веб-Сервер
  • Веб-сервер должен обрабатывать RESTful запросы от клиентов, передавать данные на обработку в слой бизнес-логики и возвращать результаты в формате JSON.
5.2. Слой Бизнес-Логики
  • Вся основная логика работы с задачами должна быть реализована в этом слое. Включает взаимодействие с базой данных и Redis.

6. Подробности Реализации

6.1. Кэширование в Redis
  • При создании новой задачи или обновлении существующей, данные должны быть записаны в базу данных, а затем кэш очищается.
  • При запросе списка задач или конкретной задачи сначала проверяется наличие данных в кэше Redis. Если данные присутствуют, они возвращаются из кэша, иначе — выполняется запрос к базе данных с последующим сохранением результата в кэш.
6.2. Работа с Базой Данных
  • В базе данных необходимо создать таблицу tasks с полями:
    • id (int, primary key)
    • title (varchar)
    • description (text)
    • due_date (datetime)
    • status (boolean)

7. Требования к Тестированию

  • Написать юнит-тесты для основных функций приложения.
  • Обеспечить интеграционные тесты для проверки взаимодействия с базой данных и Redis.

8. Развёртывание

  • Приложение должно быть развёрнуто в контейнере Docker.
  • Требуется написать Dockerfile и инструкции по развертыванию приложения в локальном окружении и на сервере.

9. Документация

  • API документация должна быть предоставлена в формате Swagger/OpenAPI.
  • Описание архитектуры и взаимодействия компонентов должно быть включено в README.md файл проекта.

10. Сроки Выполнения

  • Общий срок реализации проекта: 3 недели с момента утверждения ТЗ.
    • Первая неделя: разработка архитектуры и базовых функций приложения.
    • Вторая неделя: интеграция с Redis и базой данных, реализация кэширования.
    • Третья неделя: тестирование, оптимизация, документация и подготовка к развертыванию.

Конец ТЗ


Это ТЗ поможет вам создать проект для портфолио, демонстрирующий использование Golang, Redis и базы данных.