list employees done

This commit is contained in:
Tenzing Kandang 2026-02-23 12:19:22 +01:00
parent a8262fa689
commit 3df8aedbd4
4 changed files with 88 additions and 56 deletions

66
app.py
View File

@ -1,4 +1,4 @@
from fastapi import FastAPI, Request, HTTPException, Form from fastapi import FastAPI, Request, HTTPException, Form, responses
from fastapi.responses import RedirectResponse, HTMLResponse from fastapi.responses import RedirectResponse, HTMLResponse
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
@ -9,8 +9,7 @@ from pydantic import BaseModel
from sqlmodel import SQLModel, Relationship, Session, create_engine, select from sqlmodel import SQLModel, Relationship, Session, create_engine, select
import json import json
from models import ordinateur, employee, employee_ordinateur from models import ordinateur, employee
from forms import EmployeeForm
app = FastAPI() app = FastAPI()
#ordi1 = ordinateur() #ordi1 = ordinateur()
@ -38,45 +37,48 @@ async def get_ordi1_info(request: Request, ordi_id: int):
request=request, name="item.html", context={"ordi": this_ordi} 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(
"employee_form.html", {"request" : request})
@app.post("/employee/add", response_class=HTMLResponse)
async def submit_employee_form(
first_name: str = Form(...),
family_name: str = Form(...),
badge_number: str = Form(...)
):
with Session(engine) as session:
new_employee = employee(
first_name=first_name,
family_name=family_name,
badge_number=badge_number
)
session.add(new_employee)
session.commit()
return responses.RedirectResponse(
url="/employees", status_code=303)
@app.get("/employees", response_class=HTMLResponse) @app.get("/employees", response_class=HTMLResponse)
async def get_employees(request: Request): async def get_employees(request: Request):
with Session(engine) as session: with Session(engine) as session:
statement= select(employee) statement= select(employee)
employees= session.exec(statement).all() employees= session.exec(statement).all()
return templates.TemplateResponse( return templates.TemplateResponse(
request=request, name="employees.html", context={"employees": employees} "employees.html", {"request" : request, "employees" : employees}
) )
@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=HTMLResponse)
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.fname,
family_name=data.lname,
badge_number=data.badge
)
session.add(employee)
session.commit()
session.refresh(employee)
return templates.TemplateResponse(
request=request, name="employees.html", context={"employees": employees})
'''@app.post("/employee/delete", response=RedirectResponse) @app.post("/employee/{e_id}/delete")
async def delete_employee(request: Request): async def delete_employee(e_id: int):
with Session(engine) as session: with Session(engine) as session:
statement = select(ordinateur) db_e = session.get(employee, e_id)
results = session.exec(statement) if not db_e:
ordi1 = results.one() raise HTTPException(status_code=404, detail="Employé non trouvé")
session.delete(db_e)
session.delete(ordi1) session.commit()
session.commit()''' return responses.RedirectResponse(url="/employees", status_code=303)
@app.post("/endpoint") @app.post("/endpoint")
async def receive_info(request: Request): async def receive_info(request: Request):

View File

@ -9,9 +9,9 @@ class employee_ordinateur(SQLModel, table=True):
class employee(SQLModel, table=True): class employee(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True) id: int | None = Field(default=None, primary_key=True)
first_name: str = Field(index=True) first_name: str
family_name: str = Field(index=True) family_name: str
badge_number: str = Field(index=True) badge_number: str
ordinateurs: list["ordinateur"] = Relationship(back_populates="employees", link_model=employee_ordinateur) ordinateurs: list["ordinateur"] = Relationship(back_populates="employees", link_model=employee_ordinateur)

View File

@ -1,20 +1,27 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css">
</head>
<body> <body>
<div class="container">
<h2>Employee form</h2> <div class="title pt-6">Employee form</div>
<form action="/employee/create" method="post" target="_blank"> <form action="/employee/add" method="post">
<label for="fname">First name:</label><br> <label> First name:</label><br>
<input type="text" id="fname" name="fname" value=""><br> <input class="input" type="text" name="first_name"><br>
<label for="lname">Family name:</label><br> <label> Family name:</label><br>
<input type="text" id="lname" name="lname" value=""><br> <input class ="input"type="text" name="family_name"><br>
<label for="badge">Badge number:</label><br> <label> Badge number:</label><br>
<input type="text" id="badge" name="badge" value=""><br> <input class ="input"type="text" name="badge_number"><br> <br>
<label for="ordis">Ordinateurs</label><br>
<input type="submit" value="Submit"> <input type="submit" value="Submit">
</form> </form>
</div>
</body> </body>
</html>
</html>

View File

@ -1,19 +1,42 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css">
<title>Employees</title> <title>Employees</title>
</head> </head>
<body>
<ul>{% for e in employees %}
<li>{{ e.first_name}} {{ e.last_name }} {{ e.badge_number }}</li>
{% endfor %}
</ul>
<ul>
<li>uhdziuuadza</li>
</ul> <body>
<div class="container">
<div class="title pt-6">Employee list</div>
<table class="table is-striped is-bordered is-fullwidth">
<tr class="is-link">
<th>Id</th>
<th>First name</th>
<th>Family name</th>
<th>Badge number</th>
</tr>
{% for e in employees %}
<tr>
<td>{{ e.id }}</td>
<td>{{ e.first_name }}</td>
<td>{{ e.family_name }}</td>
<td>{{ e.badge_number }}</td>
{% endfor %}
</tr>
</table>
</div>
</body> </body>
</html> </html>