This commit is contained in:
IluaAir
2025-04-02 16:37:39 +03:00
commit 57ca56c2f6
11 changed files with 555 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/.venv/
/.idea

11
README.md Normal file
View File

@@ -0,0 +1,11 @@
# Task&Coffee
___
Task&Coffee - менеджер задач созданный для отслеживания повседневных недельных заданий.
#### Содержание:
1) [Installation](docs/installation.md)
2) [Api](docs/api.md)
3) [SQL-schema](docs/schema.md)
4) [Frontend](docs/frontend.md)

436
docs/Task&Coffee.ddb Normal file
View File

@@ -0,0 +1,436 @@
{
"author": "Unnamed",
"title": "Task&Coffee",
"date": "2025-03-27T21:10:04.996Z",
"tables": [
{
"id": 0,
"name": "Users",
"x": -104.8410100000001,
"y": -43.33970937500004,
"fields": [
{
"name": "id",
"type": "INT",
"default": "",
"check": "",
"primary": true,
"unique": true,
"notNull": true,
"increment": true,
"comment": "",
"id": 0
},
{
"name": "name",
"type": "CHAR",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": true,
"increment": false,
"comment": "",
"id": 1,
"size": 50
},
{
"name": "password",
"type": "VARCHAR",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": true,
"increment": false,
"comment": "",
"id": 2,
"size": 255
},
{
"name": "email",
"type": "CHAR",
"default": "",
"check": "",
"primary": false,
"unique": true,
"notNull": true,
"increment": false,
"comment": "",
"id": 3,
"size": 1
},
{
"name": "telegram_id",
"type": "BIGINT",
"default": "",
"check": "",
"primary": false,
"unique": true,
"notNull": false,
"increment": false,
"comment": "телеграм id для ответов пользователю",
"id": 4
},
{
"name": "avatar_path ",
"type": "VARCHAR",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": false,
"increment": false,
"comment": "",
"id": 5,
"size": 255
}
],
"comment": "Данные пользователя",
"indices": [],
"color": "#6360f7",
"key": 1742200210667
},
{
"id": 1,
"name": "Tasks",
"x": 229,
"y": 65,
"fields": [
{
"name": "id",
"type": "INT",
"default": "",
"check": "",
"primary": true,
"unique": true,
"notNull": true,
"increment": true,
"comment": "",
"id": 0
},
{
"name": "user_id",
"type": "INT",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": true,
"increment": false,
"comment": "",
"id": 1,
"size": 20
},
{
"name": "title",
"type": "CHAR",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": true,
"increment": false,
"comment": "",
"id": 2,
"size": 20
},
{
"name": "description",
"type": "TEXT",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": false,
"increment": false,
"comment": "",
"id": 3,
"size": 65535,
"values": []
},
{
"name": "due_date",
"type": "DATE",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": false,
"increment": false,
"comment": "",
"id": 4,
"size": "",
"values": []
},
{
"name": "status",
"type": "ENUM",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": true,
"increment": false,
"comment": "",
"id": 5,
"values": [
"open",
"closed",
"in_progress",
"todo"
]
},
{
"name": "priority",
"type": "ENUM",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": true,
"increment": false,
"comment": "",
"id": 6,
"size": "",
"values": [
"low",
"medium",
"high",
"critical"
]
},
{
"name": "created_at",
"type": "TIMESTAMP",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": true,
"increment": false,
"comment": "",
"id": 7,
"size": "",
"values": []
},
{
"name": "time_spent",
"type": "INT",
"default": "0",
"check": "",
"primary": false,
"unique": false,
"notNull": false,
"increment": false,
"comment": "",
"id": 8,
"values": [],
"size": ""
}
],
"comment": " Задачи пользователя",
"indices": [],
"color": "#f03c3c",
"key": 1742200955993
},
{
"id": 2,
"name": "Tags",
"x": 698,
"y": 533,
"fields": [
{
"name": "id",
"type": "INT",
"default": "",
"check": "",
"primary": true,
"unique": true,
"notNull": true,
"increment": true,
"comment": "",
"id": 0
},
{
"name": "name",
"type": "CHAR",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": false,
"increment": false,
"comment": "",
"id": 1,
"size": 20
}
],
"comment": "",
"indices": [],
"color": "#175e7a",
"key": 1742202331481
},
{
"id": 3,
"name": "Attachments",
"x": 693,
"y": -13,
"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": true,
"increment": false,
"comment": "",
"id": 1,
"size": 255
},
{
"name": "file_path",
"type": "VARCHAR",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": true,
"increment": false,
"comment": "",
"id": 2,
"size": 255
},
{
"name": "uploaded_at",
"type": "TIMESTAMP",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": false,
"increment": false,
"comment": "",
"id": 3,
"size": "",
"values": []
}
],
"comment": "",
"indices": [],
"color": "#3cde7d",
"key": 1742203353583
},
{
"id": 4,
"name": "Task_Assignees",
"x": 287,
"y": 560,
"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": true,
"increment": false,
"comment": "",
"id": 1
},
{
"name": "tags_id",
"type": "INT",
"default": "",
"check": "",
"primary": false,
"unique": false,
"notNull": true,
"increment": false,
"comment": "",
"id": 2
}
],
"comment": "",
"indices": [],
"color": "#7d9dff",
"key": 1742204065899
}
],
"relationships": [
{
"startTableId": 0,
"startFieldId": 0,
"endTableId": 1,
"endFieldId": 1,
"cardinality": "One to many",
"updateConstraint": "No action",
"deleteConstraint": "No action",
"name": "Users_id_fk",
"id": 0
},
{
"startTableId": 1,
"startFieldId": 0,
"endTableId": 3,
"endFieldId": 1,
"cardinality": "One to many",
"updateConstraint": "No action",
"deleteConstraint": "No action",
"name": "Attachments_task_id_fk",
"id": 1
},
{
"startTableId": 4,
"startFieldId": 2,
"endTableId": 2,
"endFieldId": 0,
"cardinality": "One to one",
"updateConstraint": "Cascade",
"deleteConstraint": "Cascade",
"name": "Tags_id_fk",
"id": 2
},
{
"startTableId": 4,
"startFieldId": 1,
"endTableId": 1,
"endFieldId": 0,
"cardinality": "One to one",
"updateConstraint": "Cascade",
"deleteConstraint": "Cascade",
"name": "Tasks_id_fk",
"id": 3
}
],
"notes": [],
"subjectAreas": [],
"types": []
}

48
docs/api.md Normal file
View File

@@ -0,0 +1,48 @@
# 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} Удалить задачу
Вложения (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 Получение данных текущего пользователя\

5
docs/frontend.md Normal file
View File

@@ -0,0 +1,5 @@
# Frontend
### pre-concept:
![pre_frontend.png](pics/pre_frontend01.png)
![pre_frontend02.png](pics/pre_frontend02.png)

0
docs/installation.md Normal file
View File

BIN
docs/pics/db-schema.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

53
docs/schema.md Normal file
View File

@@ -0,0 +1,53 @@
# SQL-schema
База данных 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
Отношение многие к одному Tasks.
####
id - int, первичный ключ \
task_id - int, relationship для Tasks.id \
file_path - varchar, путь до файла на диске \
uploaded_at - timestamp
#####
#### Tags
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)

0
src/main.py Normal file
View File