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",
|
||||
"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": [],
|
||||
|
||||
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)
|
||||
####
|
||||
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 – Получение данных текущего пользователя\
|
||||
- `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` — Получение данных текущего пользователя
|
||||
|
||||
@@ -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.
|
||||
#####
|
||||
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
|
||||
___
|
||||

|
||||
---
|
||||
|
||||
### ✅ 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`
|
||||
|
||||
---
|
||||
|
||||
## 🖼️ Визуальная схема
|
||||
|
||||

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