Необходимо разработать веб-приложение на языке программирования Golang, выполняющее простую задачу — управление списком задач (To-Do List). Приложение должно предоставлять RESTful API для создания, чтения, обновления и удаления задач (CRUD-операции). В качестве хранилища данных будет использоваться реляционная база данных. Redis будет задействован для кэширования данных и обеспечения производительности при частых запросах.
-
Создание задачи: Пользователь должен иметь возможность создать новую задачу, указав её название, описание и срок выполнения.
-
Просмотр списка задач: Приложение должно предоставлять возможность получения списка всех задач, а также фильтрации задач по их статусу (выполнена, невыполнена).
-
Просмотр конкретной задачи: Пользователь должен иметь возможность получить подробную информацию о конкретной задаче по её ID.
-
Обновление задачи: Пользователь должен иметь возможность обновить информацию о задаче, включая её статус (выполнена/невыполнена).
-
Удаление задачи: Пользователь должен иметь возможность удалить задачу из списка.
-
Кэширование списка задач: Для ускорения получения списка задач необходимо кэшировать результаты запросов к базе данных в Redis. Это позволит снизить нагрузку на базу данных при частых запросах одних и тех же данных.
-
Кэширование конкретной задачи:
При запросе конкретной задачи по ID, данные также должны кэшироваться. Если информация о задаче изменяется или задача удаляется, соответствующий кэш должен быть обновлён или удалён.
- Запросы к списку задач и конкретным задачам должны выполняться с минимальной задержкой, особенно при повторных обращениях, благодаря использованию Redis.
- Приложение должно корректно обрабатывать ошибки, такие как недоступность базы данных или Redis, и возвращать соответствующие коды ошибок и сообщения.
- Архитектура приложения должна предусматривать возможность горизонтального масштабирования, чтобы поддерживать увеличение нагрузки.
- Язык программирования: Golang
- Веб-фреймворк: Gin/Gorilla Mux/Chi (любой на выбор)
- Кэш: Redis
- База данных: PostgreSQL/MySQL (выбор зависит от предпочтений)
- ORM для работы с базой данных: GORM или sqlx
- Интерфейс взаимодействия с Redis: go-redis
- Веб-сервер должен обрабатывать RESTful запросы от клиентов, передавать данные на обработку в слой бизнес-логики и возвращать результаты в формате JSON.
- Вся основная логика работы с задачами должна быть реализована в этом слое. Включает взаимодействие с базой данных и Redis.
- При создании новой задачи или обновлении существующей, данные должны быть записаны в базу данных, а затем кэш очищается.
- При запросе списка задач или конкретной задачи сначала проверяется наличие данных в кэше Redis. Если данные присутствуют, они возвращаются из кэша, иначе — выполняется запрос к базе данных с последующим сохранением результата в кэш.
- В базе данных необходимо создать таблицу
tasks
с полями:id
(int, primary key)title
(varchar)description
(text)due_date
(datetime)status
(boolean)
- Написать юнит-тесты для основных функций приложения.
- Обеспечить интеграционные тесты для проверки взаимодействия с базой данных и Redis.
- Приложение должно быть развёрнуто в контейнере Docker.
- Требуется написать Dockerfile и инструкции по развертыванию приложения в локальном окружении и на сервере.
- API документация должна быть предоставлена в формате Swagger/OpenAPI.
- Описание архитектуры и взаимодействия компонентов должно быть включено в README.md файл проекта.
- Общий срок реализации проекта: 3 недели с момента утверждения ТЗ.
- Первая неделя: разработка архитектуры и базовых функций приложения.
- Вторая неделя: интеграция с Redis и базой данных, реализация кэширования.
- Третья неделя: тестирование, оптимизация, документация и подготовка к развертыванию.
Это ТЗ поможет вам создать проект для портфолио, демонстрирующий использование Golang, Redis и базы данных.