modify structure

This commit is contained in:
Robin COuret
2026-02-12 10:33:22 +01:00
parent f270a31fa4
commit 46539909dc
34 changed files with 97 additions and 80 deletions

View File

@@ -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

View File

@@ -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"}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -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
session.commit()

View File

@@ -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:

View File

@@ -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:

View File

@@ -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)

26
server/src/app/main.py Normal file
View File

@@ -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"}

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)