From e8a7a75d8974b54737723b9e0a5557121da0ed31 Mon Sep 17 00:00:00 2001 From: arkohut <39525455+arkohut@users.noreply.github.com> Date: Tue, 28 May 2024 10:03:34 +0800 Subject: [PATCH] feat(library): library mock crud --- memos/main.py | 101 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 99 insertions(+), 2 deletions(-) diff --git a/memos/main.py b/memos/main.py index bf098c1..62861c7 100644 --- a/memos/main.py +++ b/memos/main.py @@ -1,7 +1,104 @@ from fastapi import FastAPI +from pydantic import BaseModel +from typing import List +import time +import random +from fastapi import Response, HTTPException +from datetime import datetime app = FastAPI() +libraries = [] -@app.get("/libraries") + +class Folder(BaseModel): + path: str + libraryId: int + + +class Library(BaseModel): + id: int + name: str + description: str | None + folders: List[Folder] = [] + lastScanAt: datetime | None = None + + model_config = { + "json_schema_extra": { + "examples": [ + { + "id": 1, + "name": "Main Library", + "description": "A primary collection of various documents.", + "folders": [ + {"path": "/documents/reports", "libraryId": 1}, + {"path": "/documents/notes", "libraryId": 1}, + ], + "lastScanAt": "2023-10-04T14:48:00", + } + ] + } + } + + +@app.get("/") +async def root(): + return "ok" + + +@app.get("/libraries", response_model=List[Library]) async def get_libraries(): - return [{"name": "Library1"}, {"name": "Library2"}] + return libraries + + +@app.get("/libraries/{library_id}", response_model=Library) +async def get_library(library_id: int): + for library in libraries: + if library.id == library_id: + return library + raise HTTPException(status_code=404, detail="Library not found") + + +class LibraryParam(BaseModel): + name: str + description: str | None + folders: List[str] + + +@app.post("/libraries", status_code=201) +async def create_library(library: LibraryParam): + nextid = int(time.time()) + random.randint(1, 1000) + new_library = Library( + id=nextid, + name=library.name, + description=library.description, + folders=[Folder(path=path, libraryId=nextid) for path in library.folders], + ) + libraries.append(new_library) + return new_library + + +@app.put("/libraries/{library_id}") +async def update_library(library_id: int, library: LibraryParam): + for lib in libraries: + if lib.id == library_id: + lib.name = library.name + lib.description = library.description + lib.folders = [ + Folder(path=path, libraryId=library_id) for path in library.folders + ] + return Response(status_code=204) + raise HTTPException(status_code=404, detail="Library not found") + + +@app.delete("/libraries/{library_id}", status_code=204) +async def delete_library(library_id: int): + for lib in libraries: + if lib.id == library_id: + libraries.remove(lib) + return Response(status_code=204) + raise HTTPException(status_code=404, detail="Library not found") + + +@app.post("/libraries/{library_id}/scan_tasks", status_code=202) +async def request_scan_library(library_id): + pass