inital commit
This commit is contained in:
+99
@@ -0,0 +1,99 @@
|
||||
import aiosqlite
|
||||
import datetime
|
||||
import uuid
|
||||
from typing import List, Optional, Dict, Any
|
||||
|
||||
class Database:
|
||||
def __init__(self, db_path: str = "tasks.db"):
|
||||
self.db_path = db_path
|
||||
|
||||
async def initialize(self):
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
await db.execute("""
|
||||
CREATE TABLE IF NOT EXISTS tasks (
|
||||
id TEXT PRIMARY KEY,
|
||||
user_id INTEGER NOT NULL,
|
||||
user_name TEXT,
|
||||
guild_id INTEGER,
|
||||
channel_id INTEGER,
|
||||
title TEXT NOT NULL,
|
||||
description TEXT,
|
||||
priority TEXT NOT NULL,
|
||||
deadline TEXT NOT NULL,
|
||||
is_completed INTEGER DEFAULT 0,
|
||||
notion_page_id TEXT,
|
||||
created_at TEXT DEFAULT (DATETIME('now', 'localtime')),
|
||||
last_reminded_type TEXT DEFAULT ''
|
||||
)
|
||||
""")
|
||||
await db.commit()
|
||||
|
||||
async def add_task(self, user_id: int, user_name: str, guild_id: Optional[int],
|
||||
channel_id: int, title: str, description: str,
|
||||
priority: str, deadline: str) -> str:
|
||||
task_id = str(uuid.uuid4())[:8] # 短めのUUID(8文字)を使用
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
await db.execute("""
|
||||
INSERT INTO tasks (id, user_id, user_name, guild_id, channel_id, title, description, priority, deadline)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
""", (task_id, user_id, user_name, guild_id, channel_id, title, description, priority, deadline))
|
||||
await db.commit()
|
||||
return task_id
|
||||
|
||||
async def get_user_tasks(self, user_id: int, channel_id: Optional[int] = None) -> List[Dict[str, Any]]:
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
db.row_factory = aiosqlite.Row
|
||||
if channel_id:
|
||||
query = "SELECT * FROM tasks WHERE user_id = ? AND channel_id = ? AND is_completed = 0 ORDER BY deadline ASC"
|
||||
params = (user_id, channel_id)
|
||||
else:
|
||||
query = "SELECT * FROM tasks WHERE user_id = ? AND is_completed = 0 ORDER BY deadline ASC"
|
||||
params = (user_id,)
|
||||
|
||||
async with db.execute(query, params) as cursor:
|
||||
rows = await cursor.fetchall()
|
||||
return [dict(row) for row in rows]
|
||||
|
||||
async def get_all_active_tasks(self) -> List[Dict[str, Any]]:
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
db.row_factory = aiosqlite.Row
|
||||
async with db.execute("SELECT * FROM tasks WHERE is_completed = 0") as cursor:
|
||||
rows = await cursor.fetchall()
|
||||
return [dict(row) for row in rows]
|
||||
|
||||
async def get_task_by_id(self, task_id: str) -> Optional[Dict[str, Any]]:
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
db.row_factory = aiosqlite.Row
|
||||
async with db.execute("SELECT * FROM tasks WHERE id = ?", (task_id,)) as cursor:
|
||||
row = await cursor.fetchone()
|
||||
return dict(row) if row else None
|
||||
|
||||
async def update_priority(self, task_id: str, new_priority: str):
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
await db.execute("UPDATE tasks SET priority = ? WHERE id = ?", (new_priority, task_id))
|
||||
await db.commit()
|
||||
|
||||
async def update_task(self, task_id: str, title: str, description: str,
|
||||
priority: str, deadline: str):
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
await db.execute("""
|
||||
UPDATE tasks
|
||||
SET title = ?, description = ?, priority = ?, deadline = ?
|
||||
WHERE id = ?
|
||||
""", (title, description, priority, deadline, task_id))
|
||||
await db.commit()
|
||||
|
||||
async def update_reminded_type(self, task_id: str, reminded_type: str):
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
await db.execute("UPDATE tasks SET last_reminded_type = ? WHERE id = ?", (reminded_type, task_id))
|
||||
await db.commit()
|
||||
|
||||
async def complete_task(self, task_id: str):
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
await db.execute("UPDATE tasks SET is_completed = 1 WHERE id = ?", (task_id,))
|
||||
await db.commit()
|
||||
|
||||
async def delete_task(self, task_id: str):
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
await db.execute("DELETE FROM tasks WHERE id = ?", (task_id,))
|
||||
await db.commit()
|
||||
Reference in New Issue
Block a user