SUAI-TaskPlanner-Contest / TaskPlanner

Client application for working with todos and syncing with CalDAV servers
MIT License
3 stars 2 forks source link

Создать репозиторий задач #50

Closed astronik00 closed 1 year ago

astronik00 commented 1 year ago

Developing Task

Требования: программист

Краткое описание

Создать классы репозитория для локальной базы данных SQLite, в которых бы находились SQL-запросы, с использованием ORM SQLAlchemy

Функциональные требования или документация

Диаграмма базы данных

[Представление]() древовидных структур в реляционных таблицах

Конструктор данного класса:

Данный класс работает с классом задачи Task:

class Task:
    task_id: int
    server_id: int
    size_id: int,
    type_id: int,
    priority_id: int,
    status_id: int,
    ...

Список методов:

В этом методе необходимо предусмотреть разную логику для задачи, которая создается на клиенте (у нее будут пустые number и, как следствие, path), а также для того случая, когда мы посылаем полностью созданную задачу (например, загрузили ее по CalDAV и вычислять нам ничего не требуется).

В этом методе необходимо предусмотреть особенности удаления задач при работе с древовидными структурами

Обобщенное решение

Выходной результат

Класс репозитория задач

Lailes commented 1 year ago

@astronik00 Думаю, что в 9 методе можно убрать второй параметр, чтобы репозиторий сам получил внутри себя текущее время и выставил его. И думаю, что это делать методом публичным не стоит, так как он должен вызываться только внутри методов изменения, этого репозитория

Lailes commented 1 year ago

@astronik00 Может стоит объеденить все методы обновления в один, принимающий объект Task? чтобы изменив один объект полностью, одним запросом полностью его поменять

astronik00 commented 1 year ago

@astronik00 Может стоит объеденить все методы обновления в один, принимающий объект Task? чтобы изменив один объект полностью, одним запросом полностью его поменять

Я подумала, что может возникнуть когда-нибудь такая ситуация, что понадобится один из отдельных методов. Вряд ли хотя она возникнет, но я добавлю метод, где приходит одна Task 👌

aleksandra-shchegoleva commented 1 year ago

@astronik00 запрос на изменение временных атрибутов (например, dtstart) нормально работает с sqlite базой данных? Он сам конвертирует в нужный формат?

astronik00 commented 1 year ago

@astronik00 запрос на изменение временных атрибутов (например, dtstart) нормально работает с sqlite базой данных? Он сам конвертирует в нужный формат?

Я не успела еще сделать это. Постараюсь как можно быстрее проверить

aleksandra-shchegoleva commented 1 year ago

@astronik00 К чему вопрос - мы делаем валидацию либо строки str, либо datetime. Напиши, пожалуйста, как проверишь.

astronik00 commented 1 year ago

@aleksandra-shchegoleva

SQLite работает с форматом времени. Здесь представлены результаты перевода локального времени в UTC-0: Image

Также можно спокойно перевести из UTC-0 обратно в local time для корректного отображения на клиенте: Image

@Lailes

Проверь пожалуйста, как работает CalDAV с datetime форматом.

Lailes commented 1 year ago

@astronik00 CalDAV работает с датой как строкой:

image

Это пример сохраненной переменной типа datetime напрямую. Работа идет полностью в соотвествии с питоном

Другие, именно CalDAV данные он хранит по особому, но тоже можно сказать что не сохраняя часовой пояс

image

Иными словами, все что касается часового пояса ложится на плечи того, кто сохраняет в таске объект datetime

aleksandra-shchegoleva commented 1 year ago

@Lailes Если там Z на конце (как я вижу на скриншоте), то все нормально. Это как раз часоовой пояс UTC-0, который нам нужен.