async def get_todo( id: int, fields: List = [], db: Database = get_database() ): return await db.fetch_one( select(fields if fields else TodoItemInDB.columns) .where(TodoItemInDB.c.id == id) .limit(1))
async def create_todo( title: str, description: str, db: Database = get_database()) -> TodoItem: new_todo = dict(title=title, description=description, created_at=datetime.now(), updated_at=datetime.now()) id = await db.execute(TodoItemInDB.insert(new_todo)) return TodoItem(**dict(id=id, **new_todo))
async def get_todo_list_api(fields: str = None): database = get_database() if fields: fields = [c.strip() for c in fields.split(",")] fields = [ getattr(TodoItemInDB.c, col, None) for col in fields if getattr(TodoItemInDB.c, col, None) is not None ] return await crud.select_todo(fields, database)
async def update_todo(id, todo_update, db: Database = get_database()) -> None: # quick hack to update todos, never use this in a serious (production) application db_update = update(TodoItemInDB).values(todo_update).where(TodoItemInDB.c.id==id) await db.execute(db_update) return await get_todo(id)
async def delete_todo(id: int, db: Database = get_database()) -> None: await db.execute(TodoItemInDB.delete(TodoItemInDB.c.id == id)) return None
async def is_todo_exist(id: int, db: Database = get_database()) -> bool: query = TodoItemInDB.count().where(TodoItemInDB.c.id == id) return True if await db.fetch_one(query) else False
async def select_todo(fields: List = [], db: Database = get_database()): return await db.fetch_all(select(fields if fields else TodoItemInDB.columns) .select_from(TodoItemInDB) .order_by(desc("created_at")))