from datetime import datetime, timedelta from typing import Annotated from fastapi import Depends, FastAPI, HTTPException, status from fastapi.security import OAuth2PasswordRequestForm from sqlmodel import Session, select from config import settings from models import Token, Site, Guest, Visit, User, UserPublicMe, UserCreate from routers import users, sites, visits, guests, profile from core import utils, crud app = FastAPI() app.include_router(profile.router) app.include_router(users.router) app.include_router(sites.router) app.include_router(visits.router) app.include_router(guests.router) @app.on_event("startup") def on_startup(): utils.create_db_and_tables() crud.create_su() @app.get("/") async def root(): return {"message": "Pulsse spalsh screen!"} @app.post("/login") def login_for_access_token( form_data: Annotated[OAuth2PasswordRequestForm, Depends()], ) -> Token: user = crud.authenticate_user(form_data.username, form_data.password) if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect username or password", headers={"WWW-Authenticate": "Bearer"}, ) access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) access_token = utils.create_access_token( data={"sub": user.username}, expires_delta=access_token_expires ) return Token(access_token=access_token, token_type="bearer") @app.post("/register", response_model=UserPublicMe) def register_user(*, session: Session = Depends(utils.get_session), user: UserCreate): return crud.add_user(session, user) @app.get("/seed") def seed_db(*, session: Session = Depends(utils.get_session), user: Annotated[User, Depends(crud.get_current_super_user)], ): u1 = User(username="cs_admin", password=utils.get_password_hash("csa")) u2 = User(username="is_admin", password=utils.get_password_hash("isa")) u3 = User(username="cs_is_admin", password=utils.get_password_hash("csisa")) u4 = User(username="ee_admin", password=utils.get_password_hash("eea")) s1 = Site(name="CS Dept", location="MCS", in_camera="2a") s2 = Site(name="IS Dept", location="NRB", in_camera="3a") s3 = Site(name="EE Dept", location="MCS", in_camera="1a") u1.sites.append(s1) u2.sites.append(s2) u3.sites.extend([s1, s2]) u4.sites.append(s3) session.add(u1) session.add(u2) session.add(u3) session.add(u4) session.add(s1) session.add(s2) session.add(s3) session.add(Guest(name="Arsalan", vector="9874676132", is_female=False,site_id=1)) session.add(Guest(name="Zubeela", vector="8564245686", is_female=True, site_id=1)) session.add(Guest(name="Zarnaab", vector="5458615856", is_female=False,site_id=2)) session.add(Guest(name="Sarmaad", vector="1265645865", is_female=False,site_id=3)) session.add(Visit(is_group=False, is_female=False, is_new=False, site_id=1, guest_id=1)) session.add(Visit(is_group=False, is_female=True, is_new=True, site_id=1, guest_id=2)) session.add(Visit(is_group=True, is_female=False, is_new=False, site_id=2, guest_id=1)) session.add(Visit(is_group=True, is_female=False, is_new=False, site_id=2, guest_id=3)) session.add(Visit(is_group=False, is_female=False, is_new=False, site_id=2, guest_id=4)) session.add(Visit(is_group=False, is_female=False, is_new=False, site_id=3, guest_id=4)) session.commit()