update readme
This commit is contained in:
71
README.md
71
README.md
@@ -1,20 +1,57 @@
|
|||||||
# Task&Coffee
|
# ☕ Task&Coffee
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
**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)
|
- 🔐 Авторизация и учёт пользователей
|
||||||
|
- 🏷️ Теги и фильтрация задач
|
||||||
|
- 📆 Интеграция с календарём
|
||||||
|
- 🌙 Тёмная тема
|
||||||
|
- 📊 Панель аналитики (время на задачу, статистика по выполнению)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Стек технологий
|
||||||
|
|
||||||
|
### Backend
|
||||||
|
- **FastAPI**
|
||||||
|
- **SQLAlchemy**
|
||||||
|
- **SQLite**
|
||||||
|
- **Redis**
|
||||||
|
- **Celery**
|
||||||
|
|
||||||
|
### Frontend
|
||||||
|
- **React.js**
|
||||||
|
- **Vite**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Установка и запуск (в разработке)
|
||||||
|
|
||||||
|
Инструкция по локальному развертыванию проекта появится скоро.
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"author": "Unnamed",
|
"author": "Unnamed",
|
||||||
"title": "Task&Coffee",
|
"title": "Task&Coffee",
|
||||||
"date": "2025-03-27T21:10:04.996Z",
|
"date": "2025-04-13T20:32:14.768Z",
|
||||||
"tables": [
|
"tables": [
|
||||||
{
|
{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"name": "Users",
|
"name": "Users",
|
||||||
"x": -104.8410100000001,
|
"x": -197.2194850000002,
|
||||||
"y": -43.33970937500004,
|
"y": 108.59857187500006,
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"name": "id",
|
"name": "id",
|
||||||
@@ -94,8 +94,8 @@
|
|||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"name": "Tasks",
|
"name": "Tasks",
|
||||||
"x": 229,
|
"x": 359.95364004739827,
|
||||||
"y": 65,
|
"y": 95.38765625000008,
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"name": "id",
|
"name": "id",
|
||||||
@@ -237,8 +237,8 @@
|
|||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "Tags",
|
"name": "Tags",
|
||||||
"x": 698,
|
"x": 920.4376437500002,
|
||||||
"y": 533,
|
"y": 368.90665624999997,
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"name": "id",
|
"name": "id",
|
||||||
@@ -338,8 +338,8 @@
|
|||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"name": "Task_Assignees",
|
"name": "Task_Assignees",
|
||||||
"x": 287,
|
"x": 649.2208625000001,
|
||||||
"y": 560,
|
"y": 555.137975,
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"name": "id",
|
"name": "id",
|
||||||
@@ -382,6 +382,67 @@
|
|||||||
"indices": [],
|
"indices": [],
|
||||||
"color": "#7d9dff",
|
"color": "#7d9dff",
|
||||||
"key": 1742204065899
|
"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": [
|
"relationships": [
|
||||||
@@ -428,6 +489,28 @@
|
|||||||
"deleteConstraint": "Cascade",
|
"deleteConstraint": "Cascade",
|
||||||
"name": "Tasks_id_fk",
|
"name": "Tasks_id_fk",
|
||||||
"id": 3
|
"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": [],
|
"notes": [],
|
||||||
|
|||||||
92
docs/api.md
92
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)
|
### 👤 Пользователи (Users)
|
||||||
####
|
|
||||||
GET /tasks – Получить список всех задач \
|
|
||||||
GET /tasks/{task_id} – Получить задачу по ID \
|
|
||||||
POST /tasks – Создать новую задачу \
|
|
||||||
PUT /tasks/{task_id} – Обновить задачу \
|
|
||||||
DELETE /tasks/{task_id} – Удалить задачу
|
|
||||||
|
|
||||||
Вложения (Attachments)
|
- `GET /users` — Получить список всех пользователей
|
||||||
####
|
- `GET /users/{user_id}` — Получить конкретного пользователя
|
||||||
GET /tasks/{task_id}/attachments – Получить все вложения к задаче \
|
- `GET /users/{user_id}/tasks` — Получить задачи пользователя
|
||||||
POST /tasks/{task_id}/attachments – Добавить вложение к задаче \
|
- `POST /users` — Создать нового пользователя
|
||||||
DELETE /attachments/{attach_id} – Удалить вложение
|
- `PUT /users/{user_id}` — Обновить данные пользователя
|
||||||
|
- `DELETE /users/{user_id}` — Удалить пользователя
|
||||||
|
|
||||||
Теги (Tags)
|
---
|
||||||
####
|
|
||||||
GET /tags – Получить список всех тегов \
|
|
||||||
GET /tags/{tag_id} – Получить тег по ID \
|
|
||||||
POST /tags – Создать новый тег \
|
|
||||||
DELETE /tags/{tag_id} – Удалить тег
|
|
||||||
|
|
||||||
Назначение тегов к задачам (Task_Assignees)
|
### ✅ Задачи (Tasks)
|
||||||
####
|
|
||||||
GET /tasks/{task_id}/tags – Получить все теги задачи \
|
|
||||||
POST /tasks/{task_id}/tags/{tag_id} – Добавить тег к задаче \
|
|
||||||
DELETE /tasks/{task_id}/tags/{tag_id} – Удалить тег у задачи
|
|
||||||
|
|
||||||
Авторизация (Auth)
|
- `GET /tasks` — Получить список всех задач
|
||||||
####
|
- `GET /tasks/{task_id}` — Получить задачу по ID
|
||||||
POST /auth/register – Регистрация нового пользователя \
|
- `POST /tasks` — Создать новую задачу
|
||||||
POST /auth/login – Вход пользователя \
|
- `PUT /tasks/{task_id}` — Обновить задачу
|
||||||
POST /auth/logout – Выход пользователя \
|
- `PATCH /tasks/{task_id}` — Частично обновить задачу
|
||||||
POST /auth/refresh – Обновление токена \
|
- `DELETE /tasks/{task_id}` — Удалить задачу
|
||||||
GET /auth/me – Получение данных текущего пользователя\
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📎 Вложения (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` — Получение данных текущего пользователя
|
||||||
|
|||||||
@@ -1,10 +1,26 @@
|
|||||||
# Celery
|
# ⚙️ Celery
|
||||||
|
|
||||||
|
**Celery** используется в Task&Coffee для выполнения фоновых (асинхронных) задач, не блокирующих основной поток приложения.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📌 Основные фоновые задачи:
|
||||||
|
|
||||||
|
#### 🔔 Уведомления о задачах
|
||||||
|
- Отправка напоминаний пользователю перед дедлайном
|
||||||
|
- Поддержка нескольких каналов:
|
||||||
|
- 📧 Email
|
||||||
|
- 💬 Telegram
|
||||||
|
|
||||||
|
#### 📊 Генерация отчётов
|
||||||
|
- Еженедельные и ежемесячные отчёты о проделанных задачах
|
||||||
|
- Формат: PDF / HTML (в планах — отправка на email)
|
||||||
|
|
||||||
|
#### 📎 Загрузка вложений
|
||||||
|
- Обработка и сохранение вложенных файлов
|
||||||
|
- Проверка валидности, возможное сжатие/конвертация (в будущем)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Фоновые задачи:
|
|
||||||
* Отправка уведомлений о задачах
|
|
||||||
* * Email
|
|
||||||
* * Telegram
|
|
||||||
* Генерация отчетов за неделю/месяц
|
|
||||||
* Загрузка вложенных документов
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 282 KiB After Width: | Height: | Size: 279 KiB |
116
docs/schema.md
116
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.
|
### 👤 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
|
|
||||||
|
|
||||||
Отношение многие к одному Tasks.
|
- `id`: `int` — первичный ключ
|
||||||
####
|
- `name`: `char` — логин пользователя (**уникально**)
|
||||||
id - int, первичный ключ \
|
- `password`: `varchar` — хешированный пароль
|
||||||
task_id - int, relationship для Tasks.id \
|
- `email`: `char` — email для отправки уведомлений *(опционально)*
|
||||||
file_path - varchar, путь до файла на диске \
|
- `telegram_id`: `bigint` — Telegram ID пользователя *(опционально)*
|
||||||
uploaded_at - timestamp
|
- `avatar_path`: `varchar` — путь до аватарки *(опционально)*
|
||||||
#####
|
|
||||||
#### Tags
|
|
||||||
|
|
||||||
id - int, первичный ключ \
|
---
|
||||||
name - char, название тега (уникально)
|
|
||||||
#####
|
### ✅ Tasks
|
||||||
#### Task_Assignees
|
**Связь:** многие-к-одному с `Users`
|
||||||
|
|
||||||
Отношение многие с многими Tasks - Tags
|
- `id`: `int` — первичный ключ
|
||||||
#####
|
- `user_id`: `int` — внешний ключ на `Users.id`
|
||||||
id - int, первичный ключ \
|
- `title`: `char` — заголовок задачи
|
||||||
task_id - int, relationship для Tasks.id \
|
- `description`: `text` — полное описание *(опционально)*
|
||||||
tag_id - int, relationship для Tags.id
|
- `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`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🖼️ Визуальная схема
|
||||||
|
|
||||||
|

|
||||||
|
|||||||
Reference in New Issue
Block a user