Skip to content

jbakhtin/driving-school-route-coverage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Индивидуальное ТЗ "Инструмент для отслеживания результатов учебной езды при занятии в автошколе"

Проблема:

  • При занятиях в автошколе учащийся проезжает не все маршруты из возможных.
  • Забываются трудные участки маршрутов.
  • Ученик не имеет представления о районе на которому он обучается.

Цель:

  • Создать инструмент с помощью которого ученик мог бы отметить маршруты, по которым он собирается проехать
  • Сделать заметки о проблемных для него местах на которых он завалился
  • Отметить знаки или сложные участки, что бы примерно иметь представление о местности по которой он передвигается
  • Просмотреть карту отъезженных им маршрутов

Список роутов:

  • POST: /register Регистрация
  • POST: /auth Авторизация

Учебные маршруты

  • POST: /routes/ Создать маршрут
  • GET: /routes/ Получить список маршрутов
  • GET: /routes/points Получить точки сгруппированные по конкретному маршруту
  • GET: /routes/{id} Получить маршрут
  • PUT: /routes/{id} Изменить маршрут
  • DELETE: /routes/{id} Удалить маршрут
  • GET: /routes/{id}/points Получить точки для конкретного маршрута

Учебные районы

  • POST: /areas/ Создать район в рамках которого проходят учебные маршруты
  • GET: /areas/ Получить список районов
  • GET: /areas/points Получить точки сгруппированные по областям
  • GET: /areas/{id} Получить район
  • PUT: /areas/{id} Изменить район
  • DELETE: /areas/{id} Удалить район
  • GET: /areas/{id}/points Получить точки конкретной области

Создать заметку

  • POST: /marks/ Создать на карте заметку
  • POST: /marks?route_id={route_id}&area_id={area_id} Создать на карте заметку (С привязкой к маршруту и/или к области)
  • GET: /marks/points Получить точки сгруппированные по заметке
  • PUT: /marks/{id} Изменить заметку
  • GET: /marks/{id} Изменить заметку
  • DELETE: /marks/{id} Удалить заметку
  • GET: /marks/{id}/point Получить точку заметки

Техническая часть:

  • Postgres
  • MongoDB (Для хранения маршрутов, пока не знаю какой формат нужен и какие нюансы могут быть, поэтому mongo). Решил заменить MongoDB на Postgres JSONb.

Структура БД

DB Structure

Запуск проекта:

  • Клонировать проект:
clone git@github.com:jbakhtin/driving-school-route-coverage.git
  • Перейти в папку migrations и выполнить миграции:
export GOOSE_DBSTRING="user=ИМЯ_ПОЛЬЗОВАТЛЯ password=ПАРОЛЬ host=ХОСТ database=ИМЯ_БАЗЫДАНЫХ"
export GOOSE_DRIVER=postgres
goose up

Задачи:

Инкремент 1

  • Описать шаблон README.md
  • Составить список задач на Инкремент 1
  • Спроектировать БД
    • Описать связи основных сущностей
    • Описать взаимодействие PostgresSQL и MongoDB (MongoDB заменен на PG JSONb)
  • Написать миграции для базы данных
    • Для модели users
  • Реализовать заглушки обработчиков
    • Описать интерфейс роутов (Передаваемые параметры) -> Инкремент 2
    • Обработать исключения и возврат кодов ответов
  • Запуск сервера
  • Тесты
    • Проверка подключения БД
    • Покрыть тестами обработчики основных ресурсов -> Инкремент 2
  • Определить параметры окружения и вынести их в конфиги

Инкремент 2

  • Написать миграции для остальных таблиц

    • routes
    • areas
    • marks
  • Написать SQL запросы для сущностей:

    • routes
    • areas
    • marks
  • Аутентификация пользователя:

    • Выбор библиотеки или реализовать самостоятельно
    • Хэширование пароля
    • Создание сессии
    • Проверка сессии
    • Сброс пароля
    • Сохранение в сессии информации о пользователе для дальней идентификации связных с ним сущностей
  • Реализовать логику хендлеров

    • auth
      • Регистрация
      • Авторизация
      • Покрыть тестами
      • Валидация запросов
    • routes
      • Создание
      • Редактирование
      • Отображение
      • Удаление
      • Получить список маршрутов
      • Покрыть тестами
      • Валидация запросов
    • areas
    • marks
  • Фоновые процессы

    • Почтовые уведомления
      • Наполнение очереди
      • Отправка уведомлений из очереди
  • Завершение работы приложение

    • Завершение фоновых процессов с помощью паттерна Closer
  • Доработки (после основных работ)

    • Фоновые процессы
      • Почтовые уведомления
        • Сохранение в очереди процессов в хранилище при завершении программы
        • Поднятие очереди из хранилища в момент страта программы

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages