Go веб-сервер реализует функциональность планировщика задач, аналог TO-DO-листа.
Планировщик хранит задачи, каждая из них содержит дату дедлайна, заголовок, комментарий и правило повторения.
Задачи могут повторяться по заданному правилу: ежегодно, через установленное количество дней, в определённые
дни недели или месяца.
Если отметить задачу с повторением как выполненную, она переносится на следующую дату в соответствии с
определенным для нее правилом. Обычные задачи при выполнении будут удаляться.
go_final_projectconfiggetEnvVar.goфункции управления переменными окружения
handlersобработчики http запросовget_tasks.goвозвращает список задачpost_add_task.goдобавляет новую задачуdelete_task.goудаляет задачуput_edit_task.goредактирует задачуpost_done_task.goотмечает задачу как выполненнуюget_next_date.goвычисляет следующую дату выполнения задачиpost_signin.goаутентификация пользователя (JWT)start_file_server.goобслуживает статические файлы (HTML, CSS, JS)
modelsструктуры и методы для работы с задачамиtasks.goопределена основная структура задач и метод верификации данных
serviceсодержит вспомогательные функцииgenerateJWT.goгенерация JWT-токенаverify_token.goпроверка JWT-токенаnextdate.goвычисление следующей даты повторения задачаresponse.goформирование JSON-ответов
testsтесты для обработчиков и сервисовwebфронтенд-часть приложения.envфайл переменных окруженияdockerfileфайл создания docker образаmain.goреализован веб-сервер использованием REST API. Сервер поддерживает операции CRUD, а также аутентификацию пользователей. Использована данных SQLite, маршрутизация и обработка запросов выполняются с помощью библиотеки chischeduler.dbфайл базы данных
- TODO_PORT=7540
- WEB_DIR="./web"
- TODO_DBFILE="scheduler.db"
- TODO_PASSWORD="12345"
- TODO_SCRTKEY="mysecretkey"
- добавить задачу
- получить список задач
- удалить задачу
- получить параметры задачи
- изменить параметры задачи
- отметить задачу как выполненную
- определены переменные окружения в файле .env
- HTTP-сервис на базе маршрутизатора chi
- файл-сервер, при запросе http://localhost:7540/ возвращает index.html из директории web
- база данных в файле scheduler.db с таблицей scheduler
- алгоритм повторение задач:
* по дням, формат d n (где d ключ типа повторения задачи, n число дней в диапазоне 1 до 400).
Пример: d 1; d 7; d 60
* ежегодно, формат y
* по дням недели, формат w n (где w ключ типа повторения задачи, n дни недели через запятую от 1 до 7).
Пример: w 7; w 1,4,5; w 2,3
- взаимодействие с базой данных
* добавление новой задачи
* корректировка даты повторения задачи
* получение отсортированного списка ближайших
* поиск задачи по содержанию и дате
* получение параметров задачи по id
* корректировка параметров задачи
- работа с задачами:
* создание, корректировка, удаление задач
* автоматическое удаление одноразовых задач при нажатии кнопки выполнено
* перенос повторяющихся задача на новую дату при нажатии кнопки выполнено
- обработка JSON.
Команда для запуска приложения `go run main.go`. Для просмотра в браузере ввести URL: `http://localhost:7540/`
Tесты следует запускать со значением `false` в параметре `FullNextDate`: `var FullNextDate = false`
Команды для запуска тестов:
- общий тест `go test ./tests`
- веб-сервера `go test -run ^TestApp$ ./tests`
- базы данных `go test -run ^TestDB$ ./tests`
- правил вопторения задач `go test -run ^TestNextDate$ ./tests`
- добавление задачи `go test -run ^TestAddTask$ ./tests`
- фомирование списка ближайших задач `go test -run ^TestTasks$ ./tests`
- поиск задачи `go test -run ^TestTasks$ ./tests`
- получение текущих параметров задачи `go test -run ^TestTask$ ./tests`
- обновление (редактирование) параметров задачи `go test -run ^TestEditTask$ ./tests`
- задача выполнена `go test -run ^TestDone$ ./tests`
- удаление задачи `go test -run ^TestDelTask$ ./tests`
Сборка Docker образа и его запуск
- сборка Docker образа `docker build --tag todo_app:v1.0 .`
- запуск Docker образа `docker run -d -p 8080:7540 todo_app:v1.0`


