|
|
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.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() |
|
|
|
|
|
|