Categorygithub.com/ZhdanovichVlad/go_final_project
repositorypackage
0.0.0-20240810143629-82a3b7c7c949
Repository: https://github.com/zhdanovichvlad/go_final_project.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# 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  - пароль, который будет использован при авторизации после запуска приложения 

Запуск приложения

  1. Установите зависимости командой:
go mod download
  1. Запустите приложение:
go run main.go

Приложение будет доступно по адресу http://localhost:7540 (Либо на другом порте, который вы определите в переменной окружения)

Инструкция по запуску тестов

Чтобы выполнить тесты, вам нужно получить токен авторизации. Для этого:

  1. Запустите приложение локально.
  2. Перейдите в браузере по адресу http://localhost:7540/login.html.
  3. Введите пароль и нажмите кнопку "Войти".
  4. Используйте инструменты разработчика вашего браузера (обычно доступны по нажатию F12) и перейдите на вкладку "Application" (Приложение).
  5. В разделе "Cookies" найдите куку с именем token.
  6. Скопируйте значение этой куки.
  7. В файле 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 можете использовать своё название проекта.

Спасибо за внимание