From 74bb8a672cda7d31e4b00f1c965829b2da8cf89c Mon Sep 17 00:00:00 2001 From: Robin COuret Date: Thu, 12 Feb 2026 18:42:20 +0100 Subject: [PATCH] add routers --- .../src/app/__pycache__/main.cpython-311.pyc | Bin 1218 -> 1068 bytes server/src/app/api/__init__.py | 6 +++ .../api/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 425 bytes server/src/app/api/v1/__init__.py | 8 +++ .../v1/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 555 bytes .../v1/__pycache__/knowledges.cpython-311.pyc | Bin 0 -> 2717 bytes .../v1/__pycache__/metrics.cpython-311.pyc | Bin 0 -> 817 bytes server/src/app/api/v1/knowledges.py | 51 ++++++++++++++++++ server/src/app/api/v1/metrics.py | 12 +++++ .../crud_knowledges.cpython-311.pyc | Bin 3325 -> 3445 bytes .../__pycache__/crud_metrics.cpython-311.pyc | Bin 2672 -> 2741 bytes .../crud_questions.cpython-311.pyc | Bin 2699 -> 2768 bytes server/src/app/crud/crud_knowledges.py | 2 + server/src/app/crud/crud_metrics.py | 1 + server/src/app/crud/crud_questions.py | 1 + server/src/app/main.py | 8 ++- 16 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 server/src/app/api/__init__.py create mode 100644 server/src/app/api/__pycache__/__init__.cpython-311.pyc create mode 100644 server/src/app/api/v1/__init__.py create mode 100644 server/src/app/api/v1/__pycache__/__init__.cpython-311.pyc create mode 100644 server/src/app/api/v1/__pycache__/knowledges.cpython-311.pyc create mode 100644 server/src/app/api/v1/__pycache__/metrics.cpython-311.pyc create mode 100644 server/src/app/api/v1/knowledges.py create mode 100644 server/src/app/api/v1/metrics.py diff --git a/server/src/app/__pycache__/main.cpython-311.pyc b/server/src/app/__pycache__/main.cpython-311.pyc index eec92261aa93810f6f4559eedf0ccbcfb8555f14..89ef8a4881a9b89fb89f84528496ae6b7978090c 100644 GIT binary patch delta 467 zcmX@axrT#xIWI340}$Li)tebQkyn!O$V7F&diE5K9G+a>C|*W}6owSe9KKxsD1JtU zRK^spROU3M6z&$5Wk5}~%QCW0wq=%MR8 zAU-lPFo|Aa6#2je66RrG=W9rxP;r4x;Ub&D6*h$i<{J#m*BOK^F$hgCyT~AQg+b~9 I41rw&00_cpF8}}l delta 585 zcmZ3(afp+5IWI340}z~8(34p*kyn!O)I@c^dWIDC9G+a>C|*W}RK^sJROU3M6wVfw zWk7|iL8`$ZijRpQl{uAf4c9V8pg0gi#raeD7YM+3$aD%fs>&3e76vpk1ygu~8798d zWYnB2!Dux(kx_-wXL1{(DpLvb42%rZ8B!Qim@*lI88n&wZn5X478fU`r&e)$c% zDlY=*DdGVVw^)ku^Gk|^flLV?E*1n55Enk+5uH$bfm`(giz-;TpQg}cFD4^K*2%R@ zvW#q#XEVt$vQOT{B+bY%`2mxJ3dqM`hZcb%>=tu+D#Tc13n$Ani!;8PY|dOVc`vhc zItwG$4E7HUKng*8WM*Izy}~H+fe9qc$H30lkUpW}0-M4`Hiau}3JuH;7+KoIo5VYW a8)aH#J}@yds(oMp5+Hqi$O2$du*(5l6nU=z diff --git a/server/src/app/api/__init__.py b/server/src/app/api/__init__.py new file mode 100644 index 0000000..0b6c856 --- /dev/null +++ b/server/src/app/api/__init__.py @@ -0,0 +1,6 @@ +from fastapi import APIRouter + +from ..api.v1 import router as v1_router + +router = APIRouter(prefix="/api") +router.include_router(v1_router) diff --git a/server/src/app/api/__pycache__/__init__.cpython-311.pyc b/server/src/app/api/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9e6cb5c8e2b11d988197a5cff7b065f300c4c33 GIT binary patch literal 425 zcmZ3^%ge<81YgegX7&K-#~=<2Fhd!i6M&5A3@HpLj5!Rsj8Tk?3@J=0%sEWC%uy_i z3``8Ej43Q@SeG#}Fsue*2#8`%WnRDv;~~?jET}4hrm+PxXtKWqDbi%T#pxK}8I)gI zl3MhV2_nK)1m;$;=qDCr0#&dT6s4wRR`_YM-C|EmEG_|x7J(dliw(%qD>Ezt*?Wt# z%rG9J@fKfZUUE)pN-C7UlHoH@0mCl~{fzwFRQ;m-q|7{h-^9H9oXkYs#GHbRME&B_ zqO#N?{okOio7(^#zUSv?X!k};ghKhKA GCIbM6-)yu1 literal 0 HcmV?d00001 diff --git a/server/src/app/api/v1/__init__.py b/server/src/app/api/v1/__init__.py new file mode 100644 index 0000000..8204fd4 --- /dev/null +++ b/server/src/app/api/v1/__init__.py @@ -0,0 +1,8 @@ +from fastapi import APIRouter + +from .knowledges import router as knowledge_router +from .metrics import router as metric_router + +router = APIRouter(prefix="/v1") +router.include_router(knowledge_router) +router.include_router(metric_router) \ No newline at end of file diff --git a/server/src/app/api/v1/__pycache__/__init__.cpython-311.pyc b/server/src/app/api/v1/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c3a1b41b3eca31c024500b36d29e78ef339ec19 GIT binary patch literal 555 zcmZ`!ze~eF6n@vVNmFPkLInr0L$wstLsvy`bWlXME+O`=_AtM=q^*jBqmwwPqmv@~ z$D~rQWGXmy5QJ`>yx67~!N>RRec#8sclVyM*$jwS$X~NhQ9nWvg)||;hM2o+@z zj;o+R-QM3hu$vy`gYaG9$oxm1OSrWbN{7=rJKd|K1EsFJp6)OnZWv@vEW2$`a!g&G z3XS~K(8ePI#iSl*H8;qPN#y64RWq7|PV_Sj#eEoU;D&8d%cO?D87c9Y-V+zr&iwEaqw2s&h6+s4%I^Ka4p=9)FSO@E!vLN zVw@+n;_XB&Nr^x-s)qLIZ{aga$R+%oQA=s5(>ZtNpVdfEQjKcjo}k8_OJ^W<>510T zU_th_zQv4%_;WI)o4HdrF?D-Vn}^#|GqO1=5~p)_$Q)Qs2%&{i|sGFgTBUa^LeNH zLrYWlH6>)r4W`xm+LQ0xGdm3j>SV9mbHM{!9`w|pimYla&2I#5akRc4XnMcd?dW#g zyFmx8)UWUB2g&N>uxiJ=O~Xq}fG^(suGeAliu8TFAqhJ4kPhiCxu81=Wl%{(5m*W) zJL5dk|0*aaQYyXqsQR?q)~c-gZL?E-T<>&S&H7fo)q7g6>Kc2dv8v7*)q1Z7zh?E> z`#!*x-j81Y|`1SlT>aHkTe*OOFgGHx83z(U1z)z#|PL?m!Uuyz4TM z;M0N?a!7_`m#{R5!PCOdlz>S`Z1KD$cf01dQ7De&=#8Ne{;Kw4qMiRz!qWR-q#&hbBr7vC&<Djd)9^^QT{*H%$4VB|i*c{(oE;gL@dJlHYfB*r_sh z4;X96blnGVOnKds*8@-vR;FWI^{O!d6H|yg6Y~oGW1xf-Vdtw0Of?=RUyix$!n4E> z$p)f9&?7RAlB9h60S{o{7QBJq@+mB)LpEK;eJ^wb!a2nihJqVRfnm1US>B;MOivnY zpeo`d1?`x})6udUVTLu!$rdd1bs!MlymDSP^IKMaYqb4$m}J&Zw@tZX$(4Y6ca(SR z$X;FVLt|iQ)Lw#CQGr%bX?Gz~dc|vJOhR_SWh1%@5?_<$?TQyRe-XnRW#~~mKda_F z#=(Cd#lnoYcU$Up^*--Mwz#kLd9B%E6N?DWc`EY+;&EdoyapQrPxv>{4*~k1rG3mQ zaE4*m{{cD{DWzAWXav94q+$fWEAq4P@4hSY*a&{mCF9xS<&(n6oDthFV;fd%V-$W( zBQNqt`QvX)TCiwgEJ(EYvNIU{+`q^lNPMZw(hE{f(R1eHoIcN|A00A!?AO$x^)M@i@MCywr^vkRJ7b7i4G zz(nz=Xr$LnTDEA}Zz8C4-{t!5RZRN8q7TM`Nad64n7}k42=-l<>nMRIjO3|x1iK|FX{*;`M(Nj7cclXC zCGsMee}>=y5kzo^BJ5%;Vkwj&*_De}4wXoC)go3xEz(^bBMDJV)NTAjJA%n4a7u9v zYJ4@T?4l=ny^|PJ-I9p;UO9rcle1R0K^jj`xA{j@x;QuQKYZ{w9;B2(qHWTY1wKT^ zqXFe<5ciL9-trmsQu-n)z+5jqhb|@cw)q>=SyY_dc(wS=>L z)oH)Qdl=~99@C(=D>1R+e5qtW78JMy#r5^mJI+oVQHRAZgTAxr_2V$`Zg^p`<2jtN zUCJEJe8)=?IDxZ!v*KwduXC*&$(CT0SSVixGep1J*S_B#wKvA?jbU%nv@*q-1Auzn zX0C5}JcUV2yd__T**46!qnOZ;+vN_JBCwVJuxcwz6{uCAJ{u5QnCe|j7r4fX|B)+6 z%+rG4F=CehVJ$GH#$C8^5Yl^W1yZp~{sqiT#u!gfJFDvyUCrt`LD#doPSCBau2b{M zzIA9FHZ!v`GCO0lGt{P7|FHIMZU6ZQTVrg^Bnhv6dOAbk&dpyLNvjolUM}eW15#Pe At^fc4 literal 0 HcmV?d00001 diff --git a/server/src/app/api/v1/knowledges.py b/server/src/app/api/v1/knowledges.py new file mode 100644 index 0000000..a0170a6 --- /dev/null +++ b/server/src/app/api/v1/knowledges.py @@ -0,0 +1,51 @@ +from fastapi import APIRouter + +from src.app.models.knowledge import Knowledge +from src.app.crud.crud_knowledges import create_knowledge, read_knowledges, read_knowledge, update_knowledge, delete_knowledge +from src.app.crud.crud_questions import read_questions as read_questions_crud + +#Added in __ini__ +router = APIRouter(tags=["knowledges"]) + +@router.post("/knowledges/") +def create(knowledge: Knowledge): + created_knowledge = create_knowledge(knowledge) + # if created_knowledge is None: + # raise NotFoundException("Failed to create knowledge") + return created_knowledge + +@router.get("/knowledges/") +def read(): + knowledges = read_knowledges() + return knowledges + +@router.get("/knowledges/{id}") +def read(id: int): + knowledge = read_knowledge(id) + return knowledge + +#TODO: adapt with correct pattern +@router.post("/knowledges/{id}") +def update(id: int, content: str, uri: str): + knowledge = update_knowledge(id, content, uri) + return knowledge + +@router.delete("/knowledges/{id}") +def delete(id: int): + knowledge = delete_knowledge(id) + return knowledge + +#TODO: find pattern +@router.post("/knowledges/{id}/questions") +def create_questions(id: int): + #SLM Generation + #create_question() + return True + +@router.get("/knowledges/{id}/questions") +def read_questions(id: int): + knowledge: Knowledge = read_knowledge(id) + #questions = knowledge.questions + #TODO : refacto ? + questions = read_questions_crud(knowledge) + return questions \ No newline at end of file diff --git a/server/src/app/api/v1/metrics.py b/server/src/app/api/v1/metrics.py new file mode 100644 index 0000000..c4be00d --- /dev/null +++ b/server/src/app/api/v1/metrics.py @@ -0,0 +1,12 @@ +from fastapi import APIRouter + +from src.app.models.metric import Metric +from src.app.models.question import Question +from src.app.crud.crud_metrics import create_metric + +router = APIRouter(tags=["metrics"]) + +@router.post("/metrics/") +def create(question: Question): + created_metric: Metric = create_metric(question) + return created_metric diff --git a/server/src/app/crud/__pycache__/crud_knowledges.cpython-311.pyc b/server/src/app/crud/__pycache__/crud_knowledges.cpython-311.pyc index cd24307f8b720b5a604b2806492cf364d749003c..0fe5fe6c613acb8407b5df13923d4cd6f44baf60 100644 GIT binary patch delta 900 zcmZWnJ!lj`6rS1tyWH-rn3$h4W+CU#q8>Jah(s0y3qc5W*Mv1QmmKb1&Y2AfDCCe7 z3L=If*eKXZTCcS*g{5$Xg$&vX7D6Pk5d`1tnVivO_nX=G^L_8VnP1~SCfrx9TSV}D zaGx|^Z@A-?Rrq;^2qHK^DXwFz_FAH)dVM1rogVQMX}{64<;yei!y-;@v`F`K!_nv9zzzHf<5U@!|%S;%VW!xPUKf z_pyldQH;b}`;_S5;H1e6h-Wr{)MG-VHNTXm%}m;iHW=lLp~f8X1}{$f5Te5PbAS%| zT<|xKJ(_wvwS#nXT0~k^>^euqJ!5u!q-PBCBM`NDH460Yz=*2$_GuhdMNiuc)o?;< zAj?cJFbhB$bd}CS8A%cv%oE@A^Odr)ml=)8+@03aNLHYcDI#+;xIiWM`9M~{?{0qR2 hjxqj-D!s$62um{+6OX(s>>ybF1y4LEtr%w^|2Owf&u9Pu delta 897 zcmZuv&ubGw6rS0g>}IpOX{<>wjhdjXum$@UNHI4>EJ$y;$eNj?p}R?(*-~#+=*3@$ zxD-#Ko+LLR{sTRD_aGjY3SPZMR0svZHxq3d?ZAHf=6i3x_k;Iy;aAChILZ8?SRo16TASdGwhQNUQ=>2qiL~7$qjT~l+um_6F|uM zRjXC5M6r+zoC6BqnD~&cue7nk1aYOjFCp zkos@(+*XhJ5u5hJD-a-c#Q_=~q{sNye{(u2A~7fnSj1FzUXqVyI?GMm$HXr{%%ynA zem|d0(&BCqb|GZaABi*0`IZ`gPVmNx-|MYFY5pBwFtux3u9cd2qPIJdnp2{Sh^vyh zlpdh(fJn{tFntBow*t1xmx06ZiH`sy9b+87c2>&-7hYK-1iyd5i4UD^;z9IpSJJ`B diff --git a/server/src/app/crud/__pycache__/crud_metrics.cpython-311.pyc b/server/src/app/crud/__pycache__/crud_metrics.cpython-311.pyc index db7e4753563c7ab77bedbc7d941604036d43b685..ba6d79b00e546a3479d334e0168d69e6d40d2557 100644 GIT binary patch delta 404 zcmew$vQ?CKIWI340}$Mv-@JKBM5|3`R3X z*2(i3#W`=W7p0~Zr50yQ-o}_FD*)8X4#dT?fkXqtT~2|iVx96m@*fzOSrsN*GN}mN z;Nb7)@8X}qc9BE=3Wxj!4*AI+Sb`*l8hncdfqJIeJ1Q_ARA6ybVLzzO2qY(75Zio@ zshE+GZ*mZewgf*=%`Kjy)Wnqd+|-hy%;e%CX`m3_=BX_681-a;%pyJz!2u+SnSq3Y zfI4ACq+^Nz delta 457 zcmdlg`ay(uIWI340}!yy>&=Xv$a|A6LX#aBH70X#h)vdKk(6f$W?0GS zr^!;p3{+dh4kT_dC#Iy_VoT1?&CM*C{E{(EmLDhzk}2*45)BM@IR&PQb;|e1e_&u@ zm7JWzq>}xC703c}!Nf<9#1{~O5W~j$@#6JA1Hr|uP8M!CBCpUwYVfRKd-n*8YsxOc?rv6 zMgtijvxpBwZ~%#7kb4yr6pFywcu}+!DFEd}HAZmR`y587RX5w(=K;O>TZlX-=wLk@n=hoQcw` Xj3P5KJ}>|&bb@cPC6^zI7EmVuTDE3{ delta 437 zcmca0+AYevoR^o20SI{K^=7(E<1d@{vu!?QgVJ>B4Lb z58Dbxds!f}h!v!UEhRN4wIsEO2P7f~Bv6guhe#s~Q35Ja-MpAXpV0smP(>i8++xnm zD*+o{1d?9K@EJ%lfZgzm!zMRBr8Fniu1IS#6IY@%3!})4j1LSz3Z3AYT*u|dq6yRq E0DXsLpa1{> diff --git a/server/src/app/crud/crud_knowledges.py b/server/src/app/crud/crud_knowledges.py index edd06a5..1b64de5 100644 --- a/server/src/app/crud/crud_knowledges.py +++ b/server/src/app/crud/crud_knowledges.py @@ -1,3 +1,4 @@ +from fastapi import Depends from sqlmodel import Session, select from src.app.models.knowledge import Knowledge @@ -7,6 +8,7 @@ def create_knowledge(knowledge: Knowledge): with Session(engine) as session: session.add(knowledge) session.commit() + session.refresh(knowledge) return knowledge def read_knowledges(): diff --git a/server/src/app/crud/crud_metrics.py b/server/src/app/crud/crud_metrics.py index 781f21a..93b6ff2 100644 --- a/server/src/app/crud/crud_metrics.py +++ b/server/src/app/crud/crud_metrics.py @@ -8,6 +8,7 @@ def create_metric(metric: Metric): with Session(engine) as session: session.add(metric) session.commit() + session.refresh(metric) return metric def read_metrics(question): diff --git a/server/src/app/crud/crud_questions.py b/server/src/app/crud/crud_questions.py index a95f316..0b3443c 100644 --- a/server/src/app/crud/crud_questions.py +++ b/server/src/app/crud/crud_questions.py @@ -8,6 +8,7 @@ def create_question(question: Question): with Session(engine) as session: session.add(question) session.commit() + session.refresh(question) return question def read_questions(knowledge): diff --git a/server/src/app/main.py b/server/src/app/main.py index 2be1c3d..0befd10 100644 --- a/server/src/app/main.py +++ b/server/src/app/main.py @@ -7,6 +7,8 @@ from src.app.models.question import Question from src.app.models.knowledge import Knowledge from src.app.models.metric import Metric +from .api import router + #Test from src.app.faker_seed import faker @@ -15,12 +17,8 @@ from src.app.faker_seed import faker async def lifespan(app: FastAPI): #startup create_db_and_tables() - faker() yield #shutdown app = FastAPI(lifespan=lifespan) - -@app.get("/") -async def root(): - return {"message": "Hello World"} \ No newline at end of file +app.include_router(router) \ No newline at end of file