diff --git a/README.md b/README.md index 394ecb4..00b71bb 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,57 @@ -# Task&Coffee +# ☕ Task&Coffee + +![Status](https://img.shields.io/badge/status-in--development-yellow) +![Build](https://img.shields.io/badge/build-passing-brightgreen) + +**Task&Coffee** — удобный менеджер задач, разработанный для эффективного планирования и отслеживания повседневных заданий на неделю. +Приложение помогает организовать рабочие процессы, управлять приоритетами и оставаться продуктивным каждый день. ___ +#### 📚 Содержание: +1) [Installation](docs/installation.md) +2) [API](docs/api.md) +3) [SQL-schema](docs/schema.md) +4) [Celery](docs/celery.md) +5) [Frontend](docs/frontend.md) -Task&Coffee - менеджер задач созданный для отслеживания повседневных недельных заданий. -#### Стек технологий: -FastAPI \ -SQLAlchemy \ -SQLite \ -Redis \ -Celery \ -React.js \ -Vite -___ -#### Содержание: -1) [Installation](docs/installation.md) -2) [Api](docs/api.md) -3) [SQL-schema](docs/schema.md) -4) [Celery](docs/celery.md) -4) [Frontend](docs/frontend.md) \ No newline at end of file +--- + +## 🔧 Ключевые возможности + +- ✅ Создание и редактирование задач +- 📅 Гибкое планирование на неделю +- 🔥 Установка приоритетов и дедлайнов +- 🔔 Напоминания и уведомления +- ⚙️ Асинхронная обработка задач +- 💡 Современный и интуитивно понятный интерфейс + +--- + +## 🌱 В планах к реализации + +- 🔐 Авторизация и учёт пользователей +- 🏷️ Теги и фильтрация задач +- 📆 Интеграция с календарём +- 🌙 Тёмная тема +- 📊 Панель аналитики (время на задачу, статистика по выполнению) + +--- + +## 🛠️ Стек технологий + +### Backend +- **FastAPI** +- **SQLAlchemy** +- **SQLite** +- **Redis** +- **Celery** + +### Frontend +- **React.js** +- **Vite** + +--- + +## 🚀 Установка и запуск (в разработке) + +Инструкция по локальному развертыванию проекта появится скоро. diff --git a/docs/Task&Coffee.ddb b/docs/Task&Coffee.ddb index 6d1ba30..d8fdec9 100644 --- a/docs/Task&Coffee.ddb +++ b/docs/Task&Coffee.ddb @@ -1,13 +1,13 @@ { "author": "Unnamed", "title": "Task&Coffee", - "date": "2025-03-27T21:10:04.996Z", + "date": "2025-04-13T20:32:14.768Z", "tables": [ { "id": 0, "name": "Users", - "x": -104.8410100000001, - "y": -43.33970937500004, + "x": -197.2194850000002, + "y": 108.59857187500006, "fields": [ { "name": "id", @@ -94,8 +94,8 @@ { "id": 1, "name": "Tasks", - "x": 229, - "y": 65, + "x": 359.95364004739827, + "y": 95.38765625000008, "fields": [ { "name": "id", @@ -237,8 +237,8 @@ { "id": 2, "name": "Tags", - "x": 698, - "y": 533, + "x": 920.4376437500002, + "y": 368.90665624999997, "fields": [ { "name": "id", @@ -338,8 +338,8 @@ { "id": 4, "name": "Task_Assignees", - "x": 287, - "y": 560, + "x": 649.2208625000001, + "y": 555.137975, "fields": [ { "name": "id", @@ -382,6 +382,67 @@ "indices": [], "color": "#7d9dff", "key": 1742204065899 + }, + { + "id": 5, + "name": "Comments", + "x": 85.14274611544158, + "y": -130.41751984174218, + "fields": [ + { + "name": "id", + "type": "INT", + "default": "", + "check": "", + "primary": true, + "unique": true, + "notNull": true, + "increment": true, + "comment": "", + "id": 0 + }, + { + "name": "task_id", + "type": "INT", + "default": "", + "check": "", + "primary": false, + "unique": false, + "notNull": false, + "increment": false, + "comment": "", + "id": 1 + }, + { + "name": "user_id", + "type": "INT", + "default": "", + "check": "", + "primary": false, + "unique": false, + "notNull": false, + "increment": false, + "comment": "", + "id": 2 + }, + { + "name": "comment", + "type": "TEXT", + "default": "", + "check": "", + "primary": false, + "unique": false, + "notNull": false, + "increment": false, + "comment": "", + "id": 3, + "size": 65535 + } + ], + "comment": "", + "indices": [], + "color": "#175e7a", + "key": 1744576052508 } ], "relationships": [ @@ -428,6 +489,28 @@ "deleteConstraint": "Cascade", "name": "Tasks_id_fk", "id": 3 + }, + { + "startTableId": 0, + "startFieldId": 0, + "endTableId": 5, + "endFieldId": 2, + "cardinality": "One to many", + "updateConstraint": "No action", + "deleteConstraint": "No action", + "name": "Users_id_fk", + "id": 4 + }, + { + "startTableId": 1, + "startFieldId": 0, + "endTableId": 5, + "endFieldId": 1, + "cardinality": "One to many", + "updateConstraint": "No action", + "deleteConstraint": "No action", + "name": "Tasks_id_fk", + "id": 5 } ], "notes": [], diff --git a/docs/api.md b/docs/api.md index 491d905..f35558b 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1,48 +1,60 @@ -# API +# 📡 API -## Основные эндпоинты: +## Основные эндпоинты ___ -Пользователи (Users) -#### -GET /users – Получить список всех пользователей \ -GET /users/{user_id} – Получить конкретного пользователя \ -GET /users/{user_id}/tasks - Получить задачи пользователя \ -POST /users – Создать нового пользователя \ -PUT /users/{user_id} – Обновить данные пользователя \ -DELETE /users/{user_id} – Удалить пользователя -Задачи (Tasks) -#### -GET /tasks – Получить список всех задач \ -GET /tasks/{task_id} – Получить задачу по ID \ -POST /tasks – Создать новую задачу \ -PUT /tasks/{task_id} – Обновить задачу \ -DELETE /tasks/{task_id} – Удалить задачу +### 👤 Пользователи (Users) -Вложения (Attachments) -#### -GET /tasks/{task_id}/attachments – Получить все вложения к задаче \ -POST /tasks/{task_id}/attachments – Добавить вложение к задаче \ -DELETE /attachments/{attach_id} – Удалить вложение +- `GET /users` — Получить список всех пользователей +- `GET /users/{user_id}` — Получить конкретного пользователя +- `GET /users/{user_id}/tasks` — Получить задачи пользователя +- `POST /users` — Создать нового пользователя +- `PUT /users/{user_id}` — Обновить данные пользователя +- `DELETE /users/{user_id}` — Удалить пользователя -Теги (Tags) -#### -GET /tags – Получить список всех тегов \ -GET /tags/{tag_id} – Получить тег по ID \ -POST /tags – Создать новый тег \ -DELETE /tags/{tag_id} – Удалить тег +--- -Назначение тегов к задачам (Task_Assignees) -#### -GET /tasks/{task_id}/tags – Получить все теги задачи \ -POST /tasks/{task_id}/tags/{tag_id} – Добавить тег к задаче \ -DELETE /tasks/{task_id}/tags/{tag_id} – Удалить тег у задачи +### ✅ Задачи (Tasks) -Авторизация (Auth) -#### -POST /auth/register – Регистрация нового пользователя \ -POST /auth/login – Вход пользователя \ -POST /auth/logout – Выход пользователя \ -POST /auth/refresh – Обновление токена \ -GET /auth/me – Получение данных текущего пользователя\ \ No newline at end of file +- `GET /tasks` — Получить список всех задач +- `GET /tasks/{task_id}` — Получить задачу по ID +- `POST /tasks` — Создать новую задачу +- `PUT /tasks/{task_id}` — Обновить задачу +- `PATCH /tasks/{task_id}` — Частично обновить задачу +- `DELETE /tasks/{task_id}` — Удалить задачу + +--- + +### 📎 Вложения (Attachments) + +- `GET /tasks/{task_id}/attachments` — Получить все вложения к задаче +- `POST /tasks/{task_id}/attachments` — Добавить вложение к задаче +- `DELETE /attachments/{attach_id}` — Удалить вложение + +--- + +### 🏷️ Теги (Tags) + +- `GET /tags` — Получить список всех тегов +- `GET /tags/{tag_id}` — Получить тег по ID +- `POST /tags` — Создать новый тег +- `DELETE /tags/{tag_id}` — Удалить тег + +--- + +### 🔗 Назначение тегов к задачам (Task_Assignees) + +- `GET /tasks/{task_id}/tags` — Получить все теги задачи +- `POST /tasks/{task_id}/tags/{tag_id}` — Добавить тег к задаче +- `DELETE /tasks/{task_id}/tags/{tag_id}` — Удалить тег у задачи + +--- + +### 🔐 Авторизация (Auth) + +- `POST /auth/register` — Регистрация нового пользователя +- `POST /auth/login` — Вход пользователя +- `POST /auth/logout` — Выход пользователя +- `POST /auth/refresh` — Обновление токена +- `GET /auth/me` — Получение данных текущего пользователя diff --git a/docs/celery.md b/docs/celery.md index 3d27a39..066e444 100644 --- a/docs/celery.md +++ b/docs/celery.md @@ -1,10 +1,26 @@ -# Celery +# ⚙️ Celery + +**Celery** используется в Task&Coffee для выполнения фоновых (асинхронных) задач, не блокирующих основной поток приложения. + +--- + +### 📌 Основные фоновые задачи: + +#### 🔔 Уведомления о задачах +- Отправка напоминаний пользователю перед дедлайном +- Поддержка нескольких каналов: + - 📧 Email + - 💬 Telegram + +#### 📊 Генерация отчётов +- Еженедельные и ежемесячные отчёты о проделанных задачах +- Формат: PDF / HTML (в планах — отправка на email) + +#### 📎 Загрузка вложений +- Обработка и сохранение вложенных файлов +- Проверка валидности, возможное сжатие/конвертация (в будущем) + +--- -### Фоновые задачи: -* Отправка уведомлений о задачах -* * Email -* * Telegram -* Генерация отчетов за неделю/месяц -* Загрузка вложенных документов diff --git a/docs/pics/db-schema.png b/docs/pics/db-schema.png index 2c9e707..bca5222 100644 Binary files a/docs/pics/db-schema.png and b/docs/pics/db-schema.png differ diff --git a/docs/schema.md b/docs/schema.md index 24c0beb..616a71f 100644 --- a/docs/schema.md +++ b/docs/schema.md @@ -1,53 +1,75 @@ -# SQL-schema +# 🗃️ SQL-schema -База данных SQLite, движок *aiosqlite* -___ +База данных: **SQLite** +Движок: *aiosqlite* -### Структура базы данных: -##### -#### Users +--- -id - int, первичный ключ \ -name - char, логин пользователя (уникально)\ -password - varchar, пароль пользователя \ -email - char, электронная почта для отправки уведомлений (не обязательно) \ -telegram_id - bigint, id пользователя в телеграм для отправки уведомлений (не обязательно) \ -avatar_path - varchar, путь до аватарки на диске (не обязательно) -##### -#### Tasks +## 🧩 Структура базы данных -Отношение многие к одному Users. -##### -id - int, первичный ключ \ -user_id - int, relationship для Users.id \ -title - char, заголовок задачи \ -description - text, полное описание задачи (не обязательно) \ -due_date - date, день недели на которое будет назначена задача \ -status - enum, текущий статус задачи (open, closed, in progress, todo; по умолчанию open) \ -priority - enum, приоритетность задачи (low, medium, high, critical) \ -created_at - timestamp, время создания \ -time_spent - int, затраченное время (по умолчанию - 0) -##### -#### Attachements +### 👤 Users -Отношение многие к одному Tasks. -#### -id - int, первичный ключ \ -task_id - int, relationship для Tasks.id \ -file_path - varchar, путь до файла на диске \ -uploaded_at - timestamp -##### -#### Tags +- `id`: `int` — первичный ключ +- `name`: `char` — логин пользователя (**уникально**) +- `password`: `varchar` — хешированный пароль +- `email`: `char` — email для отправки уведомлений *(опционально)* +- `telegram_id`: `bigint` — Telegram ID пользователя *(опционально)* +- `avatar_path`: `varchar` — путь до аватарки *(опционально)* -id - int, первичный ключ \ -name - char, название тега (уникально) -##### -#### Task_Assignees - -Отношение многие с многими Tasks - Tags -##### -id - int, первичный ключ \ -task_id - int, relationship для Tasks.id \ -tag_id - int, relationship для Tags.id -___ -![db-schema.png](pics/db-schema.png) \ No newline at end of file +--- + +### ✅ Tasks +**Связь:** многие-к-одному с `Users` + +- `id`: `int` — первичный ключ +- `user_id`: `int` — внешний ключ на `Users.id` +- `title`: `char` — заголовок задачи +- `description`: `text` — полное описание *(опционально)* +- `due_date`: `date` — назначенный день выполнения +- `status`: `enum` — статус задачи (`open`, `closed`, `in_progress`, `todo`) *(по умолчанию: `open`)* +- `priority`: `enum` — приоритет (`low`, `medium`, `high`, `critical`) +- `created_at`: `timestamp` — дата и время создания +- `time_spent`: `int` — затраченное время в минутах *(по умолчанию: `0`)* + +--- + +### 💬 Comments +**Связь:** многие-к-одному с `Tasks` и `Users` + +- `id`: `int` — первичный ключ +- `task_id`: `int` — внешний ключ на `Tasks.id` +- `user_id`: `int` — внешний ключ на `Users.id` +- `comment`: `text` — содержимое комментария + + +--- + +### 📎 Attachments +**Связь:** многие-к-одному с `Tasks` + +- `id`: `int` — первичный ключ +- `task_id`: `int` — внешний ключ на `Tasks.id` +- `file_path`: `varchar` — путь до файла +- `uploaded_at`: `timestamp` — время загрузки + +--- + +### 🏷️ Tags + +- `id`: `int` — первичный ключ +- `name`: `char` — название тега (**уникально**) + +--- + +### 🔗 Task_Assignees +**Связь:** многие-ко-многим между `Tasks` и `Tags` + +- `id`: `int` — первичный ключ +- `task_id`: `int` — внешний ключ на `Tasks.id` +- `tag_id`: `int` — внешний ключ на `Tags.id` + +--- + +## 🖼️ Визуальная схема + +![db-schema.png](pics/db-schema.png)