22from pathlib import Path
33
44from fastapi import APIRouter , File , UploadFile , HTTPException
5- from sqlmodel import select , update , and_
5+
66from sqlalchemy .exc import NoResultFound , MultipleResultsFound
77
8+ from app .crud import DocumentCrud
9+ from app .models import Document , DocumentList
810from app .api .deps import CurrentUser , SessionDep
911from app .core .cloud import AmazonCloudStorage
10- from app .core .util import now
11- from app .models import Document , DocumentList
1212
1313router = APIRouter (prefix = "/documents" , tags = ["documents" ])
1414
@@ -20,20 +20,8 @@ def list_docs(
2020 skip : int = 0 ,
2121 limit : int = 100 ,
2222):
23- statement = (
24- select (Document )
25- .where (and_ (
26- Document .owner_id == current_user .id ,
27- Document .deleted_at .is_ (None ),
28- ))
29- .offset (skip )
30- .limit (limit )
31- )
32- docs = (session
33- .exec (statement )
34- .all ())
35-
36- return DocumentList (docs = docs )
23+ crud = DocumentCrud (session )
24+ return crud .read_many (current_user .id , skip , limit )
3725
3826@router .post ("/cp" )
3927def upload_doc (
@@ -48,15 +36,14 @@ def upload_doc(
4836 except ConnectionError as err :
4937 raise HTTPException (status_code = 500 , detail = str (err ))
5038
39+ crud = DocumentCrud (session )
5140 document = Document (
5241 id = basename ,
5342 owner_id = current_user .id ,
5443 fname = src .filename ,
5544 object_store_url = str (object_store_url ),
5645 )
57- session .add (document )
58- session .commit ()
59- session .refresh (document )
46+ crud .update (document )
6047
6148 return document .id
6249
@@ -66,20 +53,11 @@ def delete_doc(
6653 current_user : CurrentUser ,
6754 doc_id : UUID ,
6855):
69- deleted_at = now ()
70- statement = (
71- update (Document )
72- .where (and_ (
73- Document .id == doc_id ,
74- Document .owner_id == current_user .id ,
75- ))
76- .values (deleted_at = deleted_at )
77- )
78- result = session .exec (statement )
79- if not result .rowcount :
80- detail = f'Item "{ doc_id } " not found'
81- raise HTTPException (status_code = 404 , detail = detail )
82- session .commit ()
56+ crud = DocumentCrud (session )
57+ try :
58+ crud .delete (doc_id , current_user .id )
59+ except FileNotFoundError as err :
60+ raise HTTPException (status_code = 404 , detail = str (err ))
8361
8462 # TODO: perform delete on the collection
8563
@@ -89,14 +67,9 @@ def doc_info(
8967 current_user : CurrentUser ,
9068 doc_id : UUID ,
9169):
92- statement = (
93- select (Document )
94- .where (Document .id == doc_id )
95- )
96- result = session .exec (statement )
97-
70+ crud = DocumentCrud (session )
9871 try :
99- return result . one ( )
72+ return crud . read_one ( doc_id )
10073 except NoResultFound as err :
10174 raise HTTPException (status_code = 404 , detail = str (err ))
10275 except MultipleResultsFound as err :
0 commit comments