update readme

This commit is contained in:
IluaAir
2025-04-13 23:35:27 +03:00
parent a552b632a0
commit bdce2c1e23
6 changed files with 290 additions and 120 deletions

View File

@@ -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) - 🔐 Авторизация и учёт пользователей
- 🏷️ Теги и фильтрация задач
- 📆 Интеграция с календарём
- 🌙 Тёмная тема
- 📊 Панель аналитики (время на задачу, статистика по выполнению)
---
## 🛠️ Стек технологий
### Backend
- **FastAPI**
- **SQLAlchemy**
- **SQLite**
- **Redis**
- **Celery**
### Frontend
- **React.js**
- **Vite**
---
## 🚀 Установка и запуск (в разработке)
Инструкция по локальному развертыванию проекта появится скоро.

View File

@@ -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": [],

View File

@@ -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` — Получение данных текущего пользователя

View File

@@ -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

View File

@@ -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`)*
![db-schema.png](pics/db-schema.png) - `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)