From c2467efef745a4f8684acc2dad38239feb051183 Mon Sep 17 00:00:00 2001 From: tenzi Date: Thu, 12 Feb 2026 16:58:28 +0100 Subject: [PATCH] ajout employee --- app.py | 48 +++++++++++++++++++++++++++++++++++++++++++----- models.py | 21 +++++++++++++++------ requirements.txt | 1 + 3 files changed, 59 insertions(+), 11 deletions(-) diff --git a/app.py b/app.py index 038c72d..238a036 100644 --- a/app.py +++ b/app.py @@ -1,12 +1,16 @@ -from fastapi import FastAPI, Request, HTTPException -from fastapi.responses import HTMLResponse +from fastapi import FastAPI, Request, HTTPException, Form +from fastapi.responses import RedirectResponse, HTMLResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates -from sqlmodel import SQLModel, Session, create_engine, select +from typing import Annotated +from pydantic import BaseModel + +from sqlmodel import SQLModel, Relationship, Session, create_engine, select import json from models import ordinateur +from forms import EmployeeForm app = FastAPI() #ordi1 = ordinateur() @@ -20,6 +24,9 @@ sqlite_url = f"sqlite:///mydb.db" engine = create_engine(sqlite_url) +def create_db_and_tables(): + SQLModel.metadata.create_all(engine) + SQLModel.metadata.create_all(engine) @app.get("/ordi/{ordi_id}", response_class=HTMLResponse) @@ -31,6 +38,34 @@ async def get_ordi1_info(request: Request, ordi_id: int): request=request, name="item.html", context={"ordi": this_ordi} ) +@app.get("/employee/create", response_class=HTMLResponse) +async def get_employee_form(request: Request): + return templates.TemplateResponse( + request=request, name="employee_form.html", success= True ) + +@app.post("/employee/create", response_class=RedirectResponse) +async def submit_employee_form(data: Annotated[EmployeeForm, Form()]): + print(f"data obtained is {data}") + with Session(engine) as session: + employee = Employee( + first_name=data.first_name, + family_name=data.family_name + ) + session.add(employee) + session.commit() + session.refresh(employee) + return RedirectResponse("/employees") + + +'''@app.post("/employee/delete", response=RedirectResponse) +async def delete_employee(request: Request): + with Session(engine) as session: + statement = select(ordinateur) + results = session.exec(statement) + ordi1 = results.one() + + session.delete(ordi1) + session.commit()''' @app.post("/endpoint") async def receive_info(request: Request): @@ -54,6 +89,7 @@ async def receive_info(request: Request): statement = select(ordinateur).where(ordinateur.mac_address == hardware.get("mac_address", "")) ordi1 = session.exec(statement).first() + is_new = False if not ordi1: ordi1 = ordinateur() @@ -84,10 +120,12 @@ async def receive_info(request: Request): ordi1.desktop = software.get("desktop", "") ordi1.wm = software.get("wm", "") ordi1.kernel = software.get("kernel", "") - + if is_new: session.add(ordi1) + + session.commit() #session.close() - return ({"status": "ok"}) \ No newline at end of file + return ({"status": "ok"}) diff --git a/models.py b/models.py index bf00238..fd462f1 100644 --- a/models.py +++ b/models.py @@ -1,7 +1,19 @@ #!/usr/bin/python3 import configparser import requests -from sqlmodel import Field, SQLModel +from sqlmodel import Field, SQLModel, Relationship + +class employee_ordinateur(SQLModel, table=True): + employee_id: int | None = Field(default=None, foreign_key="employee.id", primary_key=True) + ordinateur_id: int | None = Field(default=None, foreign_key="ordinateur.id", primary_key=True) + +class employee(SQLModel, table=True): + id: int | None = Field(default=None, primary_key=True) + first_name: str = Field(index=True) + family_name: str = Field(index=True) + badge_number: str = Field(index=True) + + ordinateurs: list["ordinateur"] = Relationship(back_populates="employees", link_model=employee_ordinateur) class ordinateur(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) @@ -28,11 +40,8 @@ class ordinateur(SQLModel, table=True): desktop: str = Field(index=True) wm: str = Field(index=True) kernel: str = Field(index=True) - -class employee(SQLModel, tablel=True): - id: int | None = Field(default=None, primary_key=True) - first_name: str = Field(index=True) - family_name: str = Field(index=True) + + employees: list["employee"] = Relationship(back_populates="ordinateurs", link_model=employee_ordinateur) def shutdown(): return diff --git a/requirements.txt b/requirements.txt index e918724..101e659 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,6 +12,7 @@ Jinja2==3.1.6 MarkupSafe==3.0.3 pydantic==2.12.5 pydantic_core==2.41.5 +python-multipart==0.0.22 requests==2.32.5 SQLAlchemy==2.0.46 sqlmodel==0.0.32