89 lines
3.6 KiB
Python
89 lines
3.6 KiB
Python
import aiosqlite
|
|
from datetime import datetime
|
|
|
|
DATABASE = "nessa.db"
|
|
|
|
async def init_db():
|
|
async with aiosqlite.connect(DATABASE) as db:
|
|
await db.execute(
|
|
'''CREATE TABLE IF NOT EXISTS projects(
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT UNIQUE,
|
|
description TEXT)'''
|
|
)
|
|
await db.execute(
|
|
'''CREATE TABLE IF NOT EXISTS tasks(
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
project_id INTEGER,
|
|
description TEXT,
|
|
assignee TEXT,
|
|
deadline TEXT,
|
|
status TEXT,
|
|
priority TEXT,
|
|
FOREIGN KEY(project_id) REFERENCES projects(id))
|
|
'''
|
|
)
|
|
await db.execute(
|
|
'''CREATE TABLE IF NOT EXISTS user_consents(
|
|
user_id INTEGER PRIMARY KEY,
|
|
consent_given BOOLEAN NOT NULL
|
|
)'''
|
|
)
|
|
await db.commit()
|
|
|
|
async def add_project(name, description):
|
|
async with aiosqlite.connect(DATABASE) as db:
|
|
cursor = await db.execute("INSERT INTO projects(name, description) VALUES(?, ?)", (name, description))
|
|
await db.commit()
|
|
return cursor.lastrowid # Returns the ID of the newly created project
|
|
|
|
async def get_project_id(name):
|
|
async with aiosqlite.connect(DATABASE) as db:
|
|
cursor = await db.execute("SELECT id FROM projects WHERE name = ?", (name,))
|
|
result = await cursor.fetchone()
|
|
return result[0] if result else None
|
|
|
|
async def get_project_name(project_id):
|
|
async with aiosqlite.connect(DATABASE) as db:
|
|
cursor = await db.execute("SELECT name FROM projects WHERE id = ?", (project_id,))
|
|
result = await cursor.fetchone()
|
|
return result[0] if result else None
|
|
|
|
async def add_task_to_project(project_id, description, assignee, deadline, status, priority, reminder_time=None):
|
|
async with aiosqlite.connect(DATABASE) as db:
|
|
await db.execute(
|
|
"INSERT INTO tasks (project_id, description, assignee, deadline, status, priority, reminder_time) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
|
(project_id, description, assignee, deadline, status, priority, reminder_time)
|
|
)
|
|
await db.commit()
|
|
|
|
async def update_task(task_id, description, assignee, deadline, status, priority, reminder_time=None):
|
|
async with aiosqlite.connect(DATABASE) as db:
|
|
await db.execute(
|
|
"UPDATE tasks SET description=?, assignee=?, deadline=?, status=?, priority=?, reminder_time=? WHERE id=?",
|
|
(description, assignee, deadline, status, priority, reminder_time, task_id)
|
|
)
|
|
await db.commit()
|
|
|
|
async def list_projects():
|
|
async with aiosqlite.connect(DATABASE) as db:
|
|
cursor = await db.execute("SELECT id, name, description FROM projects")
|
|
projects = await cursor.fetchall()
|
|
return projects
|
|
|
|
async def list_tasks_for_project(project_id):
|
|
async with aiosqlite.connect(DATABASE) as db:
|
|
cursor = await db.execute("SELECT id, description, assignee, deadline, status, priority FROM tasks WHERE project_id = ?", (project_id,))
|
|
tasks = await cursor.fetchall()
|
|
return tasks
|
|
|
|
async def remove_task(task_id):
|
|
async with aiosqlite.connect(DATABASE) as db:
|
|
await db.execute("DELETE FROM tasks WHERE id = ?", (task_id,))
|
|
await db.commit()
|
|
|
|
async def remove_project(project_id):
|
|
async with aiosqlite.connect(DATABASE) as db:
|
|
await db.execute("DELETE FROM tasks WHERE project_id = ?", (project_id,)) # Remove all tasks under the project
|
|
await db.execute("DELETE FROM projects WHERE id = ?", (project_id,))
|
|
await db.commit() |