# Packages
# README
go_final_project
Описание проекта
Проект подготовлен в рамках дипломной работы по Golang разработке в яндекс практикуме.
Проект представляет собой Go веб-сервер, который реализует функциональность простейшего планировщика задач. Приложение позволяет создавать, редактировать, удалять и отмечать задачи как выполненные. В проекте используется REST API, все данные хранятся в базе данных SQLX.
При реализации проекта были выполнены предлагаемые дополнительные задания "со звездочкой"
Структура проекта
go_final_project/
├── api/
│ └── api.go # Модуль для обновления даты выполнения задачи
├── http-server/
│ ├── auth/
│ │ └── auth.go # Модуль для авторизации, аутентификации и обработки JWT токенов
│ ├── handlers
│ │ ├── handlers.go # Модуль в котором описаны все обработчики
│ │ └── interfaces.go # Описание интерфейса, который используем в handlers.go
│ └── http-server.go # Модуль в котором описана функция по преобразованию ошибки в JSON формат
├── storage
│ ├── sqlite
│ │ └── handlers.go # Модуль для работы с базой данных
│ └── users
│ └── handlers.go # Модуль для работы c паролем пользователя
├── tests/ # Тесты
│ └── settings.go # Настройки для тестов
├── web/ # Фронтенд
├── .env # Файл с переменными окружения
├── .gitignore # Файл для исключения из git
├── Dockerfile # Файл для сборки Docker образа
├── go.mod # Модуль Go
├── go.sum # Хеши для зависимостей Go
├── main.go # Точка входа в приложение
├── README.md # Документация
└── scheduler.db # База данных SQLX . Место базы данных можно задать в переменной окружения (.env).
Инструкция по запуску кода локально
Предварительные условия
- Установлен Go (версии 1.22.1 и выше)
- Установлен SQLX или фреймворк, поддерживающий работу БД данного типа в вашей ОС
- Для корректной работы SQLX и прохождения тестов необходимо предварительно установить TDM-GCC или другой gcc компилятор
Файл .env
Создайте переменные окружения (файл .env
) в корне проекта со следующим содержимым:
TODO_PORT=7540 - порт на котором будет запускатья веб-сервер
TODO_DBFILE=scheduler.db - место для хранения базы данных.
NUMNER_OF_OUTPUT_TASKS=10 - количество выводим задач на одну страницу (рекомендуется использовать от 10 до 50 задач)
TODO_PASSWORD=12345qwert - пароль, который будет использован при авторизации после запуска приложения
Запуск приложения
- Установите зависимости командой:
go mod download
- Запустите приложение:
go run main.go
Приложение будет доступно по адресу http://localhost:7540 (Либо на другом порте, который вы определите в переменной окружения)
Инструкция по запуску тестов
Чтобы выполнить тесты, вам нужно получить токен авторизации. Для этого:
- Запустите приложение локально.
- Перейдите в браузере по адресу http://localhost:7540/login.html.
- Введите пароль и нажмите кнопку "Войти".
- Используйте инструменты разработчика вашего браузера (обычно доступны по нажатию F12) и перейдите на вкладку "Application" (Приложение).
- В разделе "Cookies" найдите куку с именем
token
. - Скопируйте значение этой куки.
- В файле
tests/settings.go
укажите токен. В случаи необходимости измените порт на котором будет доступен веб сервер и локальный адрес базы данных:
package tests
var Port = 7540 //- порт, который вы указали в переменной укружения (.env).
var DBFile = "../scheduler.db" //- путь, где храниться база данных. По умолчанию база данных хранится в корне проекта
var FullNextDate = true //- Флаг для проверки дополнительного задания. Разработка правил повторения задач в указанные дни месяца и недели
var Search = true //- Флаг для проверки дополнительного задания. Разработка поисковой системы по дате, названию задачи и описанию задачи
var Token = `СКОПИРОВАННЫЙ_ТОКЕН` //- сюда необходимо вставить скопированный токен
Запуск тестов
Для запуска тестов выполните:
go test ./tests
Cборка и запуск проекта через Docker
Выполните сборку Docker образа командой:
docker build -t go_final_project .
Запуск Docker контейнера
Запустите Docker контейнер командой:
docker run -d --name go_final_project-container -p 7540:7540 go_final_project
Перед использованием нужно пройти авторизацию надо пройти по адресу http://localhost:7540/login.html. Для входа использовать пароль, указанный в переменной окружения. По умолчанию пароль 12345qwert. Приложение будет доступно по адресу http://localhost:7540 (сервер может быть доступен на другом порте, который вы определили в переменной окружении).
При сборке и запуске Docker образа вместо go_final_project можете использовать своё название проекта.