From 46539909dc95b3b58895948a499f65b3d2ce3b67 Mon Sep 17 00:00:00 2001 From: Robin COuret Date: Thu, 12 Feb 2026 10:33:22 +0100 Subject: [PATCH] modify structure --- server/README.md | 10 ++++- server/{src/knowledges/router.py => setup.py} | 0 server/src/app.py | 27 ------------ .../{metrics/router.py => app/__init__.py} | 0 .../app/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 161 bytes .../app/__pycache__/database.cpython-311.pyc | Bin 0 -> 1242 bytes .../__pycache__/faker_seed.cpython-311.pyc | Bin 0 -> 3395 bytes .../src/app/__pycache__/main.cpython-311.pyc | Bin 0 -> 1218 bytes .../crud_knowledges.cpython-311.pyc} | Bin 3318 -> 3325 bytes .../__pycache__/crud_metrics.cpython-311.pyc | Bin 0 -> 2672 bytes .../crud_questions.cpython-311.pyc | Bin 0 -> 2699 bytes .../crud.py => app/crud/crud_knowledges.py} | 8 ++-- .../crud.py => app/crud/crud_metrics.py} | 12 +++--- .../crud.py => app/crud/crud_questions.py} | 12 +++--- server/src/{ => app}/database.py | 0 server/src/app/faker_seed.py | 39 ++++++++++++++++++ server/src/app/main.py | 26 ++++++++++++ .../__pycache__/knowledge.cpython-311.pyc} | Bin 1008 -> 1011 bytes .../models/__pycache__/metric.cpython-311.pyc | Bin 0 -> 1041 bytes .../__pycache__/question.cpython-311.pyc | Bin 0 -> 1204 bytes .../models.py => app/models/knowledge.py} | 0 .../models.py => app/models/metric.py} | 7 +++- .../models.py => app/models/question.py} | 4 +- .../__pycache__/controller.cpython-311.pyc | Bin 1768 -> 0 bytes .../__pycache__/cruds.cpython-311.pyc | Bin 3319 -> 0 bytes server/src/knowledges/controller.py | 19 --------- .../__pycache__/models.cpython-311.pyc | Bin 812 -> 0 bytes .../__pycache__/controller.cpython-311.pyc | Bin 1146 -> 0 bytes .../__pycache__/crud.cpython-311.pyc | Bin 2690 -> 0 bytes .../__pycache__/models.cpython-311.pyc | Bin 1199 -> 0 bytes server/src/questions/controller.py | 13 ------ server/src/questions/router.py | 0 server/src/questions/service.py | 0 server/src/questions/utils.py | 0 34 files changed, 97 insertions(+), 80 deletions(-) rename server/{src/knowledges/router.py => setup.py} (100%) delete mode 100644 server/src/app.py rename server/src/{metrics/router.py => app/__init__.py} (100%) create mode 100644 server/src/app/__pycache__/__init__.cpython-311.pyc create mode 100644 server/src/app/__pycache__/database.cpython-311.pyc create mode 100644 server/src/app/__pycache__/faker_seed.cpython-311.pyc create mode 100644 server/src/app/__pycache__/main.cpython-311.pyc rename server/src/{knowledges/__pycache__/crud.cpython-311.pyc => app/crud/__pycache__/crud_knowledges.cpython-311.pyc} (64%) create mode 100644 server/src/app/crud/__pycache__/crud_metrics.cpython-311.pyc create mode 100644 server/src/app/crud/__pycache__/crud_questions.cpython-311.pyc rename server/src/{knowledges/crud.py => app/crud/crud_knowledges.py} (90%) rename server/src/{metrics/crud.py => app/crud/crud_metrics.py} (76%) rename server/src/{questions/crud.py => app/crud/crud_questions.py} (83%) rename server/src/{ => app}/database.py (100%) create mode 100644 server/src/app/faker_seed.py create mode 100644 server/src/app/main.py rename server/src/{knowledges/__pycache__/models.cpython-311.pyc => app/models/__pycache__/knowledge.cpython-311.pyc} (76%) create mode 100644 server/src/app/models/__pycache__/metric.cpython-311.pyc create mode 100644 server/src/app/models/__pycache__/question.cpython-311.pyc rename server/src/{knowledges/models.py => app/models/knowledge.py} (100%) rename server/src/{metrics/models.py => app/models/metric.py} (57%) rename server/src/{questions/models.py => app/models/question.py} (71%) delete mode 100644 server/src/knowledges/__pycache__/controller.cpython-311.pyc delete mode 100644 server/src/knowledges/__pycache__/cruds.cpython-311.pyc delete mode 100644 server/src/knowledges/controller.py delete mode 100644 server/src/metrics/__pycache__/models.cpython-311.pyc delete mode 100644 server/src/questions/__pycache__/controller.cpython-311.pyc delete mode 100644 server/src/questions/__pycache__/crud.cpython-311.pyc delete mode 100644 server/src/questions/__pycache__/models.cpython-311.pyc delete mode 100644 server/src/questions/controller.py delete mode 100644 server/src/questions/router.py delete mode 100644 server/src/questions/service.py delete mode 100644 server/src/questions/utils.py diff --git a/server/README.md b/server/README.md index 2492aaa..7df3b44 100644 --- a/server/README.md +++ b/server/README.md @@ -7,11 +7,17 @@ fastapi dev main.py ``` # Best Practice + +**To alpha-2 switch to** +## SQLEModel-boilerplate +https://github.com/benavlabs/SQLModel-boilerplate/tree/main + +----- + ## Simple Boilerplate https://github.com/anthonycepeda/fastapi-sqlmodel/tree/main ## Global Boilerplate https://github.com/zhanymkanov/fastapi-best-practices?tab=readme-ov-file#excessively-use-pydantic -## SQLEModel-boilerplate -https://github.com/benavlabs/SQLModel-boilerplate/tree/main + diff --git a/server/src/knowledges/router.py b/server/setup.py similarity index 100% rename from server/src/knowledges/router.py rename to server/setup.py diff --git a/server/src/app.py b/server/src/app.py deleted file mode 100644 index bff65bb..0000000 --- a/server/src/app.py +++ /dev/null @@ -1,27 +0,0 @@ -from contextlib import asynccontextmanager -from fastapi import FastAPI - -from src.database import create_db_and_tables -#TODO : best practice to manage models import -from src.questions.models import Question -from src.knowledges.models import Knowledge -from src.metrics.models import Metric - -#Test -from src.questions.controller import create_question, read_question -from src.knowledges.controller import create_knowledge, read_knowledges, delete_knowledge - -#TODO : alternative @app.on_event("startup") ? -@asynccontextmanager -async def lifespan(app: FastAPI): - #startup - create_db_and_tables() - delete_knowledge() - yield - #shutdown - -app = FastAPI(lifespan=lifespan) - -@app.get("/") -async def root(): - return {"message": "Hello World"} \ No newline at end of file diff --git a/server/src/metrics/router.py b/server/src/app/__init__.py similarity index 100% rename from server/src/metrics/router.py rename to server/src/app/__init__.py diff --git a/server/src/app/__pycache__/__init__.cpython-311.pyc b/server/src/app/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66ff341c46136ec92d35b111fa7f37ab69ed4a3e GIT binary patch literal 161 zcmZ3^%ge<81Z{CWnIQTxh=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09t%S1mTKQ~ps zC_gDPPv18&FFz+UQ8zKCAR|$~IJKxOwMf6XC|N(Tpg=!9J~J<~BtBlRpz;@oO>TZl fX-=wL5i8ITkTu2pK;i>4BO~Jn1{hJq3={(Z>qsR! literal 0 HcmV?d00001 diff --git a/server/src/app/__pycache__/database.cpython-311.pyc b/server/src/app/__pycache__/database.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0079941ce46a37288e8777ce76db593c99a8831e GIT binary patch literal 1242 zcmZ`&&1(}u6rb5_HrZsiA8K=}E!0DoQiEV`B2@gqY73fH=ptRV*`Z0@?8cdGt56|A z549BZBI&UQt(JQ5B>owx6bu7G!HeE1^-zij-|Qx_K{_+oPvJ5!PrJVDSdJeMZ*jti@kEX=R`fld%-y>??mNWgdY%$HAQtiFiXP$G_0h@E zYooav*3|vmygOeY`9~JBOT-Ea5a`^TG$byQe8J~h-uFC`4=kI`v3%n;;U?}T!F;Q>P3eTWr3Ok%MeSS&zH?|BPZ%;4kHV8B64;I%*gVy!!FFA)M1^dlLy_qC za<<@?NS6AuMK3#Ud%jz=hi$i9u(OQNMMATT=CgLWoE4d7ZALDZpYn5!gwCvGdyWMT zmoR!35^5l<51@j+$=aUW^HuKuBKN<|?8<|C@?fpGXg9>Pks=Bk06BC4?m#;LF)cC> z3Qo|`Uib)lhL+I-RE=5=XxM_-omPBA%mBKCn7kxCiA|#=h@6HmL>?;cY)Djwjdlth z^8||;fr%UR(=&iPJx2noVW%0eh*-7^@B=2)t9HH4yy#o+J3u&|*|=5j=vmdpJcz+L zG=}g?xPJ@yXFF9pIyySl7dn`@eKl^xw&mf(M?9P`I=B*bG!;F@C7nnOiuj`%b=F6G2nT?5EeP~Y~s%ZON1DjK| qPSEOVX0`X#^7{*)AJ){dU3F|v9jhn@GR6il(*#Ar!1MnQR`D01@)xB5 literal 0 HcmV?d00001 diff --git a/server/src/app/__pycache__/faker_seed.cpython-311.pyc b/server/src/app/__pycache__/faker_seed.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0acdbaf17a678676e33a7b3acef0deb46d722b44 GIT binary patch literal 3395 zcmb_e&2Jk;6yNo(zmnM5Bt?|8DkGJW8l|?Qp%oPpqRS!Lc*gdS{p!qa z+C~L(K;nedTQ3}XDuh;?k$OS$Kd_d3h*rv}$|1L)a_WgUYj5n$7OPaO#&6%e_nSBK zzC8O&sWc|R^W^8B=#NE7dMYOIlj$?hOknOySi-U?S+Xw6g3p*4OVJfe)m1C2XRVx` zv+{aA(kW)aD(c0ESIseNTpzb4^a-n^mm*o#EL)TMWW?u8&6?7ufY1LR>C?FIg;Xi- ziLEPgSp3v>ZkYr(NhKRO0h%BB;A;uDj9G*@g#uJD#5n zbxp$OQTqWh4b*TbN4`f*%G+B6VFN%W0gc@>ngopc%&%#c2Ue_um)oMI!yUI3X>E^KuEPv!^D5eSr{#Grzfh|+ zSoIcNqb|YJs5-1!6SLZ-A?GTYFb~dp#P&kPXVm{50?;t(;97eNSs*sR1D842rx1-^ zAPml_MNK0L2OJiebA-E$3XgnS1P|=_k&|_gHeh*s%P@^qlL&*zV+L4*IM|5Orrq-i zCKN-|I9l4c@bc$B`QfQci>E$#uR%q89NT{a=l>i64QGPmwwU8OrqlGvd=ywlEZY8+ ziCi2?aGjXoDEtdU#yDy@mIW_x1Y9Ei?K4*UHzA0E4+yYN>~+e(O61eL(A@Ote4KR1 zol~cf-u4#cib1%d?9C&Hoe%p*CV*R~VpAwA44Jk`bz|v2`2LZ-GUOvA8*g9ti5b-^ z_!8A9_L1dyNq3ha>BYgFSBS5kjk&>c1KEZr4hq!?6`2Uva&jNbxdX|25zape$++%A zali?LpHLkHrK)Rr<6H`q*bv$yl~1(1cLS_fGHeE3;h0SbUZFN7xA%^NU~fW@B|*Lh zQpquKbun>kGVw>q#8(O{2~q}9DTQMP5m^}G&kpg6VKENX!hk(HV21$b2Ga9kzIT5w z#LU^4S&W%;F>{`aGoj(<`MWhJM^ayIdQ==(VgLIF}821*CkO?hHu2Wft{Y3NBtTV^_Ijc!q^;;=Y@-4 z#W%_OYyqa?tCar^WM7eGd0VOm$+0bc7rflqmga-x*p|Kw{(Wpqr-S6!mKKBL*jL|_ LkL^oo68ZBF32vJ&x2?z^b^dc*Zm!5o+cI{>-Z(e@$-kUdX-fun@3Rwi>>%n_FP!Red z7lWamf&MoD`-mcnIdZUtvBU~j9Mw`|ta8msS*aLnTz3r1h;fRios5-s8{?YCzUG z^TD2ew8i|u_FTZ371w*g8Er6F=&LLcb`4OfPBxi{RMKqL{#Os@LYI*Ws{a7M3c}FY zV91}W7^7go0z{AcD0+&Xp#7K+xEEe4D zZ9dfIziXM@<@R!Gxua!Tch0{)#LGHlf)i}k`%8{WX|%gm>3pqMH)hKs0ck>N1k z2R>fr?lI22(o;`x`U#0ih!%2-$b*VB;dz0W0yqcLp8$1QU^hRr_bSXShT38rzE+-$ zvS&lD-MmY;kr=EPz*1?EePU zQ!&OJbTv#$2VD%4(nUAIq;%0zn3N8xgh}b3D`8T4I>L(~x-=|cQ)YUKhO-}x9)jPw z`lEvD7*EIEUJ)6^R%35F)JsQt=~yqd)GpTE&c2>~H?_OaUg#+pU+y7La$j-S5L;tn F{{i$8BoqJu literal 0 HcmV?d00001 diff --git a/server/src/knowledges/__pycache__/crud.cpython-311.pyc b/server/src/app/crud/__pycache__/crud_knowledges.cpython-311.pyc similarity index 64% rename from server/src/knowledges/__pycache__/crud.cpython-311.pyc rename to server/src/app/crud/__pycache__/crud_knowledges.cpython-311.pyc index 58bc1123aff4a24c81b48dce5f652f1913b6bd21..cd24307f8b720b5a604b2806492cf364d749003c 100644 GIT binary patch delta 257 zcmew+`B##6IWI340}x!B+nZTDk@q&^hRG8+-6tC`225VgEID~LqdB9)&3urX z#gU)=pb(=Y|Ka+H#3-}5j>C_MQEl>BuG{Jo#YM?_K#TNp z^HWlDiuK^O6tM!0yCndXo_vD4#9r?L0}8sqpnL%pePCf>6kWjifdNRN6Fifvd8z?e CI!=iI delta 242 zcmew>`Aw2{IWI340}wd*cW2g4f;}5lz_R^-H92#h_As7l4l%Qy*vC>`1nOVmU zmBEJ`oY2z5*w~j8ABtOJ3O)AF9Gt&E3WA!2K%kfQCSxB=PJOf5U1??c;6ul&-@bkC z&D)*#>0jdUE(A;Y>4(DCB0_)j2Y(43acBUsfed6|6InQmEg>sl{w$cHC1oX-7ERew zvWiPfrfO+f4QQE2-w1~CP|8LO^&!f385)TKCjy+9M|S}oH=@%>kNwMEsSA!eO&BYb zijKmFN%FRi9c7Z(w2%i%yE#vo4N}e}#XE%}aTLpy=CSw9{HDMU&V&ws2iQP%i_G@V z29j;y?*_7u(Go7>trj_`c&pr|ixFt@H=J18z}XGBu1~;U+hBD!u#8bLdI^1qn6w}) ziZf^dV>E*>{FTu(+QC!0M7eRQ0ytvMFdQXcvaEuw3smDgl{LJ?xXq!VH&@fMC5xnK z>2{%*p3D_XW+6A8Gv{V=X-4RMLeq@q)4931be_%|F5GJPjZMrwaN>DNayIc;vz_gWnI#J#f6|Ju> zgQBbL!U5lR#G%RSL>(U=cVgES6iX~mvR?R_^(&dExEGZ&J?dTp19p!4Fhun%akpi# z?Jb*UkGH}ZvL*Ta)_be|-M~&6-3{z~>qb6oYe|3%;!ZxX%0io_SQfW<)K9E%t}RJW zmuJZ}X&O=91N2BU+bBOG<)?7ug;_$06TRov+^vG)2=J50BFRHmnx-y0nlGhsz9+(L z$RmpsZAYbq&6_rJR4>sOw>rcZ?dG~M$T`E$LV6Kc+ywg-Ae3{WJhXZJRr2DqPo7S# zP5qS|d6^vf?Ltle^pC|qzk8{FSxw%kC2y=m_7nXZW2^eVdS>{VEWVJXYZ3KD31&>WZ8|6mF-_(@7 zj`l*k;9YF}ovY$=DTCEL2?KVH#y_C=|3?F2*s*=Im%BS!f;Ix57OZf&pEgBLqw3xS2AtBn9gW>H ztrDEC;TIk!=Pj6+6EHC+TmhSClyt*WZ@0;UCdga9bIz9df2aQrDibvVI)?Zp*m literal 0 HcmV?d00001 diff --git a/server/src/app/crud/__pycache__/crud_questions.cpython-311.pyc b/server/src/app/crud/__pycache__/crud_questions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb76b0b9d361146756cb8b47f6ad8de4f40cfa86 GIT binary patch literal 2699 zcmcH*O=}xh@V))e?phyC?M>^Cx)zR0SjUyDHPJ;I<4_3x&%f0YAabu&U@?H z0U2`0!3ix*O^kg>@u9dirqDkSs6&5%6a*Cufj}?qO~yW$oH}o%U1??c;6q2dv-4)= z&F-5|{SuA#Ab{vk-{(G)5&D}iJP?}1p$Wt$GLeZbl*ehD7t#XeYrzupQd)9p(US9_ zbjYP8OUbKg6=<1A-w0;tft1!vg;i)3vBJL>EbVK(r9)}{-^Ws8{e1QsDun9mi6quy;QWO4Ju`6C3k2>0RdfHslc zCbPW*f@BByd%kQ6t>O~iZj*yb6G|Pr7=b2#!wJ{{&YsV89Rp6=0jqnyWsC~p3+R2s zq-9}6yn&W6MmG?KUkS~jU3}e;C^t?OK#rI(O(&Es=JPq*5U9#|3TwEEahvh@>ravk z#XL#U;;mdEIg=?Atz724jJ3FsNisseB{a!sHknymOlIkl>7tvS=U8I#p3|G9Bx4hw zNqfOCe?5B$=stR>o!fZx;plgxbtK4xTi0r8?+@We;m4m>)RC$>QdUPeC-x{-Q3tB( zKv^BA%b@6LyXb)LJL0It>qZ?PA9rKdLnxx(|BAfMC3M@jbH|N-(AKH|S;U=u0!l)MrdSfUdE`$( zFyB@sDA2Ryn>2?gZw7|e$~el8Nckxod3k|Q;zaIvrFS!DIs)7hSs__SP0KQ5NAtxr z%6DnZhFr>%g6$}juqDf8j^?Ku84A&sO!>HLcb+xH-8#xplA7XH@%)HKnEx zZ%(gI|2XqxW=*RrV5yEgbik=2f7udrP;P2^o7!Y5ikvS?I_rb)-AIjJmBr_>bX8NH zM=)R~?42BZ*F968z{ay=>Sd0TV z1RazcB5zYm_A1;Dy@R*3jkiA%pGhgK>`NGM_jvpRivNE+Ac|dkNoVc5v&Qc!@M%5- zYyY%aW5P`7K5e+9QT?H|>K_67jp`4XFo$hIBb@UNpkR=D8)Cn7=@_WI%hi4c6bQ5E z&Ww{`ZVrvdD-|_fRpVtfeqxM3t-{Fg5U*7jBi^zl=teaQwrzWdR?bhb>qg8`*YbxFed)V!Z literal 0 HcmV?d00001 diff --git a/server/src/knowledges/crud.py b/server/src/app/crud/crud_knowledges.py similarity index 90% rename from server/src/knowledges/crud.py rename to server/src/app/crud/crud_knowledges.py index d0d2e57..edd06a5 100644 --- a/server/src/knowledges/crud.py +++ b/server/src/app/crud/crud_knowledges.py @@ -1,12 +1,13 @@ from sqlmodel import Session, select -from src.knowledges.models import Knowledge -from src.database import engine +from src.app.models.knowledge import Knowledge +from src.app.database import engine def create_knowledge(knowledge: Knowledge): with Session(engine) as session: session.add(knowledge) session.commit() + return knowledge def read_knowledges(): with Session(engine) as session: @@ -38,5 +39,4 @@ def delete_knowledge(knowledge_id: int): with Session(engine) as session: knowledge = session.get(Knowledge, knowledge_id) session.delete(knowledge) - session.commit() - #TODO : delete join questions \ No newline at end of file + session.commit() \ No newline at end of file diff --git a/server/src/metrics/crud.py b/server/src/app/crud/crud_metrics.py similarity index 76% rename from server/src/metrics/crud.py rename to server/src/app/crud/crud_metrics.py index 6077527..781f21a 100644 --- a/server/src/metrics/crud.py +++ b/server/src/app/crud/crud_metrics.py @@ -1,14 +1,14 @@ from sqlmodel import Session, select -from src.metrics.models import Metric -from src.questions.models import Question -from src.database import engine +from src.app.models.metric import Metric +from src.app.models.question import Question +from src.app.database import engine -def create_metric(Metric: Metric): +def create_metric(metric: Metric): with Session(engine) as session: - session.add(Metric) + session.add(metric) session.commit() - + return metric def read_metrics(question): with Session(engine) as session: diff --git a/server/src/questions/crud.py b/server/src/app/crud/crud_questions.py similarity index 83% rename from server/src/questions/crud.py rename to server/src/app/crud/crud_questions.py index 0eae63d..a95f316 100644 --- a/server/src/questions/crud.py +++ b/server/src/app/crud/crud_questions.py @@ -1,14 +1,14 @@ from sqlmodel import Session, select -from src.questions.models import Question -from src.knowledges.models import Knowledge -from src.database import engine +from src.app.models.question import Question +from src.app.models.knowledge import Knowledge +from src.app.database import engine -def create_question(Question: Question): +def create_question(question: Question): with Session(engine) as session: - session.add(Question) + session.add(question) session.commit() - + return question def read_questions(knowledge): with Session(engine) as session: diff --git a/server/src/database.py b/server/src/app/database.py similarity index 100% rename from server/src/database.py rename to server/src/app/database.py diff --git a/server/src/app/faker_seed.py b/server/src/app/faker_seed.py new file mode 100644 index 0000000..5a31d65 --- /dev/null +++ b/server/src/app/faker_seed.py @@ -0,0 +1,39 @@ +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.models.question import Question +from src.app.crud.crud_questions import create_question, read_questions, read_question +from src.app.models.metric import Metric +from src.app.crud.crud_metrics import create_metric + +def faker(): + knowledge1 = Knowledge(content="La connaissance est une notion aux sens multiples, à la fois utilisée dans le langage courant et objet d'étude poussée de la part des sciences cognitives et des philosophes contemporains. ", uri="https://fr.wikipedia.org/wiki/Connaissance") + knowledge2 = Knowledge(content="faculté mentale produisant une assimilation par l'esprit d'un contenu objectif préalablement traduit en signes et en idées ;", uri="https://fr.wikipedia.org/wiki/Connaissance#D%C3%A9finition") + knowledge3 = Knowledge(content="Pour l'anthropologue, la première connaissance est celle que les hommes ont d'eux-mêmes et de leur environnement, et qui, dans les sociétés primitives, assure leur survie quotidienne.", uri="https://fr.wikipedia.org/wiki/Connaissance#En_anthropologie") + + create_knowledge(knowledge1) + create_knowledge(knowledge2) + create_knowledge(knowledge3) + + question1 = Question(knowledge = knowledge1, question = "Quel est le sens du mot connaissance ?") + question2 = Question(knowledge = knowledge1, question = "Quel est la nature de la connaissance ?") + question3 = Question(knowledge = knowledge1, question = "Quel est le moyen de la connaissance ?") + question4 = Question(knowledge = knowledge2, question = "Qu'est ce qu'une faculté mentale ?") + question5 = Question(knowledge = knowledge3, question = "Qu'est ce qu'une connaissance pour l'anthropologue ?") + + create_question(question1) + create_question(question2) + create_question(question3) + create_question(question4) + create_question(question5) + + metric1 = Metric(question = question1, need_index = 89) + metric2 = Metric(question = question2, need_index = 28) + metric3 = Metric(question = question3, need_index = 12) + metric4 = Metric(question = question4, need_index = 59) + metric5 = Metric(question = question5, need_index = 91) + + create_metric(metric1) + create_metric(metric2) + create_metric(metric3) + create_metric(metric4) + create_metric(metric5) diff --git a/server/src/app/main.py b/server/src/app/main.py new file mode 100644 index 0000000..2be1c3d --- /dev/null +++ b/server/src/app/main.py @@ -0,0 +1,26 @@ +from contextlib import asynccontextmanager +from fastapi import FastAPI + +from src.app.database import create_db_and_tables +#TODO : best practice to manage models import +from src.app.models.question import Question +from src.app.models.knowledge import Knowledge +from src.app.models.metric import Metric + +#Test +from src.app.faker_seed import faker + +#TODO : alternative @app.on_event("startup") ? +@asynccontextmanager +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 diff --git a/server/src/knowledges/__pycache__/models.cpython-311.pyc b/server/src/app/models/__pycache__/knowledge.cpython-311.pyc similarity index 76% rename from server/src/knowledges/__pycache__/models.cpython-311.pyc rename to server/src/app/models/__pycache__/knowledge.cpython-311.pyc index f942fba16888bc2d8895115235e4510d56d22f47..728ab7f235cbb2189bf64213a5d3cdb8c95ce5b0 100644 GIT binary patch delta 52 zcmeys{+XS7IWI340}#BP-Mf+7iiy!?vKy1CNMb>Oer|qBYEH3!c3ysYPHIYe>gF1z G5=H=`2@tIS delta 49 zcmey&{(+r)IWI340}zx%bZ_LgVq&zM?8c-jn4Onjo|BrAo?5J*o1c=JQ@pvJse};# DS^N(1 diff --git a/server/src/app/models/__pycache__/metric.cpython-311.pyc b/server/src/app/models/__pycache__/metric.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b00308bc82f6e01edf9c405e48d0b5e293d2f91 GIT binary patch literal 1041 zcmZ`%&rcIU6rTOnE-i==8Y7yT##0mNCdP{mF+q@;C=jF=-OF_840gl*Vs>kUQ;iaFtLTGy1Mdg(M8yzqtCHr1g7iw4bv+MR9$IepV#$-A^KC2;=IF> zeSm>3AfStDY+>k-p7$Tr-> z+f+2sPIfElv1B5eo||2ro1K4Ll*kApqS+0XVDq&Tp;gymBH;kj-`_y~jU8>{Grg{? z8}&`-xn7gWh<&OKxoO717(tT}ye(#_3ZY}z7($wX&~{PN;`u0qTTR1?R|r>xWceW^ z(+TJ}gofj|L3}+Bl5xJyuYz3Tfj^Wl;G9Kp@jz?1Hr9x{ZaUhc;kcG*OdFQhFf<>N zH<)NXscVMkX>4z7`C8mT$=fC>=i-6$`R`e1UHT1jQ+sO%_rF%dT)CespXAD|M{TK% zb~B+|X4aR>r};Y_d^mq>hc955ul4h_lYFi9bZ=rW_%s#DHD-OeHYiLV+&X?07ApNh z<)lz)J!v;Ole=yxSD5wX%IVdK)^cn49rM;QnHrv|%0yNIW8K0_#WYp@Ei39E7K^|0 zND+FS^;cs3mE!(N!)u6CihI1l!4dCGmR+bb@ijaow^_+wneVZ1CJBNt0QbWG+W_1R c|FknTB}|@yzeD?Fry9-w;EO;1frw7@3#XbIegFUf literal 0 HcmV?d00001 diff --git a/server/src/app/models/__pycache__/question.cpython-311.pyc b/server/src/app/models/__pycache__/question.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f83ea2375e91107e409879809f233f53d0424a8f GIT binary patch literal 1204 zcmZ`&&1(}u6rcS{HeYQ~D(WE-;=vTmf_REW@Eb`gXj9M?TsE1pUAiCX>_)AEMDP$n zp`OgagI?-a4<7p`c-(~^!kh$8-YWIflW%sD`hlH&^Y+c`@BQ}8@9n-T6tW1$+t)9w zDG{M>d@&xWQLu9vf>#J5EZE2qbiomI(UEjX;CrGiJBqFdNJLi#LsdX8l zPcW0Ar*L{6Rn+f%S&^7>*&;S(>iqS_oQH|c@;8WW2A1dgOID{MuuR?c?%M<}lJbeA3Fq5IHe`IAw*bL5YXYL8IY72lldU{M9XY18y&CHg+36UW%l?hB0a!4C)%dp zHZd_qWT`n4P^-<-PJH((6HGM>*K~+su&iM?9`4#a&Kt%`*R+!-l#5JroKUjdfK3{P z>AGH!G#}8CA5c2QLA=@YAb0#*q=&#U*|z-P1KNQY?Viz=Jcnr1Ygw)~XS$wknI}!V zvt(*Mq4x;YeA?E`PDg`Ui0y0R16Mn%ROOu9@z?kt!S(*QhSNva7T%ox+zh8{(R6KV zy4E}2m-_fwHk4~%kz5-Vrh1KD<4NOd>G+`gzPb50ylIA|R#a+jm0G>VT6rM9oC)O? zSR}WGW$n%E=A*D&kIMC}a=mx8zdAS_O_oBr4i?Gvuf>^xy*U#u+zN|&RMfYMdhbfV zxpw0Dolw@nqS!+~OXK33&^jeBTQ<2?Ni)@7vE!pAD)ZkjR*@YBA*vumH4&n^*W5(f zSc@V@$Hd1V+Er(h2A-wIVaY#v{}H%tNf3k~Iu-73LsSj_w(V3}xGij>|NH)fL6AKA M5hH%?gNuv%1<$ifu>b%7 literal 0 HcmV?d00001 diff --git a/server/src/knowledges/models.py b/server/src/app/models/knowledge.py similarity index 100% rename from server/src/knowledges/models.py rename to server/src/app/models/knowledge.py diff --git a/server/src/metrics/models.py b/server/src/app/models/metric.py similarity index 57% rename from server/src/metrics/models.py rename to server/src/app/models/metric.py index fdafd4f..75a72ad 100644 --- a/server/src/metrics/models.py +++ b/server/src/app/models/metric.py @@ -1,7 +1,12 @@ -from sqlmodel import Field, SQLModel +from sqlmodel import Field, SQLModel, Relationship +from src.app.models.question import Question + #TODO : add pydantic validation class Metric(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) + question_id: int | None = Field(default=None, foreign_key="question.id", ondelete="CASCADE") + question: Question | None = Relationship(back_populates="metrics") + need_index: int diff --git a/server/src/questions/models.py b/server/src/app/models/question.py similarity index 71% rename from server/src/questions/models.py rename to server/src/app/models/question.py index 923ebe7..4da7d02 100644 --- a/server/src/questions/models.py +++ b/server/src/app/models/question.py @@ -1,5 +1,5 @@ from sqlmodel import Field, SQLModel, Relationship -from src.knowledges.models import Knowledge +from src.app.models.knowledge import Knowledge #TODO : add pydantic validation class Question(SQLModel, table=True): @@ -9,4 +9,4 @@ class Question(SQLModel, table=True): knowledge_id: int | None = Field(default=None, foreign_key="knowledge.id", ondelete="CASCADE") knowledge: Knowledge | None = Relationship(back_populates="questions") - metrics: list["Metrics"] = Relationship(back_populates="question", cascade_delete=True) # type: ignore + metrics: list["Metric"] = Relationship(back_populates="question", cascade_delete=True) # type: ignore diff --git a/server/src/knowledges/__pycache__/controller.cpython-311.pyc b/server/src/knowledges/__pycache__/controller.cpython-311.pyc deleted file mode 100644 index 9e8776dd5f9c60ca1a542fb0b4c752d3dc36d78e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1768 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 diff --git a/server/src/knowledges/controller.py b/server/src/knowledges/controller.py deleted file mode 100644 index d9b05e7..0000000 --- a/server/src/knowledges/controller.py +++ /dev/null @@ -1,19 +0,0 @@ -from src.knowledges.models import Knowledge -from src.knowledges.crud import create_knowledge as create_knowledge_model, read_knowledges as read_knowledges_model, read_knowledge as read_knowledge_model, update_knowledge as update_knowledge_model, delete_knowledge as delete_knowledge_model - -def create_knowledge(): - connaissance = Knowledge(content="La connaissance n'est pas.", uri="https://perdu.fr") - create_knowledge_model(connaissance) - return read_knowledges()[-1] - -def read_knowledges(): - return read_knowledges_model() - -def read_knowledge(knowledge_id): - return read_knowledge_model(knowledge_id) - -def update_knowledge(): - return update_knowledge_model(2, "faculté mentale produisant une assimilation par l'esprit d'un contenu objectif préalablement traduit en signes et en idées ;", "https://fr.wikipedia.org/wiki/Connaissance#D%C3%A9finition") - -def delete_knowledge(): - return delete_knowledge_model(7) diff --git a/server/src/metrics/__pycache__/models.cpython-311.pyc b/server/src/metrics/__pycache__/models.cpython-311.pyc deleted file mode 100644 index 95351cb88075198f3ce53350cee87fc68790d9f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 812 zcmZuvy>HV%6u?TAYwLv077Faw`FQ`LQA(a*wAdOH`R7FS^CwHY5{z%RaBAtT7 z5X2Iuc4P`5IxzBQI8uk`RwlNfFm>XclcGxW`QG#I-TS?J@A>>WpU)zY?28X>5hL_d zIv0{zg82r3V?+_f9`bPm`$|K>NI{PgRo)@0GKFfV`dCBg8|XqBD$Uf8W&Dz^r3n3z z%RDN~+OwyXkTS2mC8I-juAr*Oi@GGgBnbwm@230Sb@_)7t+v}PVtd}5X(?) z6E>Gjon}sru?k$!CD*vbH6@qnkhLNa#n59`WGXD?ZhN;5jT)34I6W^Gxej-Ihxf@V z))$IPk8<4}i()qn)?F%$?XBAO*3Lsq<%`kuwSISj6PKXl(VeH5*B0_i`LSNAw zEIQw?4?~~XJZ!mvU2%fYbDg`6*Ew|Ti1F8q+YxWuemZGnLqX<6>zzKA*PI%8cTo$> z;LKq z1Ddf@Au4~2BW0*8bz)+(l&ur*oZ70h!Rh?nd-v|%ecyZj(P}jjj5}|>`wu0Aeha4< z;OArZ0+vJMArDg&U>jp$OH>METM24*J!sf!z9&;HXxdG%71Desd9?$@mc9A`vTI%g zu;Hnj$khIbv?fl~*F(Z%KMGAbZM%#(F&TWk*h-hc_ez(it%?t~wU=S^nG)|kNwp7! z>EfL7928h&_-0Q54pDq5wg+Nzce;aHr$7<>2_&YzTbgg_uK_rKf)+SCB% z1|sgNsG3rVKLME-PjLFyogJVKdh1Q%os<9x%~ zjsjw_Xv+_+S56pF-+AEBoo&bBgnc5+;>@**#N2|HV-`_LSZ`;S3Eer=L`oB2ADy*t z96e7SZ6$4Y(srk9cmLU$vNpOmQP!u*dQ!|897dHQ3d(sA4KNmqSS`^e8sk26W~I_9 zKG$dByc}E<)L<<@Cg|m$fx)i=08jnakv7pgQ@xWY9kv9U|4)aBoIq%~La5-A>O}zu zzIT~d9d0oJSKupo-5h(!9UhTgn0BI{iH zwc;VR3|6`-Zj`@rnXLh_G0LCJ>vpbgz&k@q9H$$*2f{JlBLnYKPzAxNG$d&vB7sd@d diff --git a/server/src/questions/__pycache__/crud.cpython-311.pyc b/server/src/questions/__pycache__/crud.cpython-311.pyc deleted file mode 100644 index 5ce8e5d6ae4bdaacb87e4e8df3010324a5b74e7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2690 zcmcIm%}*Og6rb4-?=Chb#Y+Vw2#dNx3n^9)M3K@~buMW|NsBnem&ox>!O7ZAW|l%E zBju0-O)E7)L2!x0p`t~om);|lsDFSRS*o>Fq)5FaHzPQpocd<%U3-l=P^shHw{PBi z^LFRG-@NBvdV6~ijKAl9$c@Vg{lh2T5Sq-P3Ct!kk%=vo$7!4w(gNml!4mUQT5@^O zlJlW-$mJzV$*XAf91xHpqb2W(vh+io+8|bzXRDs zcAL)j_6C|Aknj1rX|#$0`5R7*9gyt#Qa2_LuO0BZ=X>VTdGrDL z7%^#CSP^faWsK1cgyF|EyZE{xQSP29KpZh+nocNN%;$5qA-LOh6xN6n<6h(OcbAfj z#XL#U;;mdEIh!dItz71#jCFT0lVpT`M`)7KZ1P?+k}R2}OXk$w`%Yh$l8jAmdKwx9 zfBdcN36KZqm3D69{qIMA9IYck9@@HAQ~Q1jKMFtoqN0ve)seC~!X?p1(TX})RR_!J zU|j}7*V-iqeBBWzE!nBu@$vDgI#>!02uLLpBN>f!%{4X+v*835Cj3YD#79G z0=PoBJKRdrJfa%7F|-!oDBofOX7chPp~Q*Y@s8cioaqQ~OJs#)0hyL%$d2Z#X#|!! z8nXdYc~Y<)g%Y-8+04;AgfYhB6X%2Wa_cA{(DVVw=nx3Gg7I?{K%gj(ZC!h%4?nwH z(GyiY@s~dFQlI$ka&_|aKfe6)tCy4CRP?#3KDVaT`iC|zu3y}`U+Fih{l=P7)6Z|t ztj|1|eLB0Q)fMnmM;t+RDLOb8o!+80or)p@Wl3lK@Vy(U#8p{*Axl>^&2M zPi$`>v2+x4I^1jpNFc9Rz66yeHoSRd{mQeIU(Z)!)79AYnpzh@Q%4>-;M|cvZ7Di9 zH&5Q8mhN>p_TX#Q2QS~a@TvG*N?~PR!a%zx3Ju zmEE)QMc82@GCWg`4vlom2mF+)W{pq{aFt&RnWy7Dz=?33nXxmsGSHBD(RW*|TkRY% zSFqjl;YM#49fBIU)$yJB3A|y+BA?L-knw*j>^TrP8W`75qTKCzjf`^es-ekp@T#HF va`384A|BdWgy>)%tN@9~c%Y7a5*4w&#ki5)Nya2Rv>mG>c$`Y80Xz5?9Zem3 diff --git a/server/src/questions/__pycache__/models.cpython-311.pyc b/server/src/questions/__pycache__/models.cpython-311.pyc deleted file mode 100644 index 4450c54148e041238a17607de835a58852784545..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1199 zcmZ`&&2Q646d!-Z&S$G#Wu@H%MoKRR(MX8HDymijc8gF_Bxpd$MY5dClv?#iI(C54 z)hb9FvVueRM2?)gyR-+6{S!FaQV-FbkT`KGDko07v6Jv27{7V`&G`48-~68aZ@FAR zFmB&@;#5S0-tfhA2uqI6XW{&f* z0J6+8?RuYt{P@?}hR9S**6qFnrvfd)zIyrM>g9{S z|6xcp4_R4pJ)p$7>!*QQ;Df{@BJ5L;1wr{~vJeEXbnNb?)eCxk=mQB^ewN=5=?^?- zrE7;>8xw1iOkE)nb-E!_y$l!?rdgJ6d&II>!Lqyn_g#)lmbKNl-RueFD$^p*C^>$_ z<}Azh{UFM^4{RxnD4pjd-fj9Lcl=|dKY?Si>x9w&=maqO@N0b|@JO8o9mlV)*nZ$T z_Bq?_ZP@jY(0hc|L)xv+j#-C_h#M~UwyDMwa>w5hz5qA)>>5{p*}eJv!pnACZ6wvk zQMEC+G?a$;??Nm$z!JGJF3%5IgVv+gYkgtV|F3=cSA5%!^-iL9j`Yr;wObp>|D1{C z4p<_0#U`gr$P<>i_8ycrXcE=^x43%l&mYbe1lbHW}sf4TwDlE?W87^irWTK`* zoZ{3p>uEqAw56 diff --git a/server/src/questions/controller.py b/server/src/questions/controller.py deleted file mode 100644 index 70e0aa6..0000000 --- a/server/src/questions/controller.py +++ /dev/null @@ -1,13 +0,0 @@ -from src.questions.models import Question -from src.questions.crud import create_question as create_question_model, read_questions as read_questions_model, read_question as read_question_model -from src.knowledges.models import Knowledge - -def create_question(knowledge: Knowledge): - question = Question(knowledge = knowledge, question = "Quel est le sens du mot connaissance ?") - create_question_model(question) - -def read_questions(knowledge): - return read_questions_model(knowledge) - -def read_question(question_id): - return read_question_model(question_id) \ No newline at end of file diff --git a/server/src/questions/router.py b/server/src/questions/router.py deleted file mode 100644 index e69de29..0000000 diff --git a/server/src/questions/service.py b/server/src/questions/service.py deleted file mode 100644 index e69de29..0000000 diff --git a/server/src/questions/utils.py b/server/src/questions/utils.py deleted file mode 100644 index e69de29..0000000