Set up basic user user endpoints

This commit is contained in:
2026-04-12 23:11:34 +02:00
parent 363f642bff
commit aa8247a083
5 changed files with 93 additions and 4 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
__pycache__
gatekeeper.db

57
main.py
View File

@@ -1,7 +1,56 @@
from fastapi import FastAPI
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List
from models import User
from schemas import UserCreate, User as UserSchema
from services import SessionLocal, engine
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.post("/users/", response_model=UserSchema)
def create_user(user: UserCreate, db: Session = Depends(get_db)):
db_user = User(**user.dict())
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
@app.get("/users/", response_model=List[UserSchema])
def read_users(db: Session = Depends(get_db)):
users = db.query(User).all()
return users
@app.get("/users/{user_id}", response_model=UserSchema)
def read_user(user_id: int, db: Session = Depends(get_db)):
db_user = db.query(User).filter(User.id == user_id).first()
if db_user is None:
raise HTTPException(status_code=404, detail="User not found")
return db_user
@app.put("/users/{user_id}", response_model=UserSchema)
def update_user(user_id: int, user: UserCreate, db: Session = Depends(get_db)):
db_user = db.query(User).filter(User.id == user_id).first()
if db_user is None:
raise HTTPException(status_code=404, detail="User not found")
for key, value in user.dict().items():
setattr(db_user, key, value)
db.commit()
db.refresh(db_user)
return db_user
@app.delete("/users/{user_id}")
def delete_user(user_id: int, db: Session = Depends(get_db)):
db_user = db.query(User).filter(User.id == user_id).first()
if db_user is None:
raise HTTPException(status_code=404, detail="User not found")
db.delete(db_user)
db.commit()
return {"message": "User deleted successfully"}

13
models.py Normal file
View File

@@ -0,0 +1,13 @@
from sqlalchemy import Column, Integer, String, Boolean
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
email = Column(String, nullable=True)
password = Column(String)
is_admin = Column(Boolean, default=False)

14
schemas.py Normal file
View File

@@ -0,0 +1,14 @@
from pydantic import BaseModel
class UserBase(BaseModel):
name: str
email: str | None
is_admin: bool
class UserCreate(UserBase):
password: str
class User(UserBase):
id: int
class Config:
from_attributes = True

12
services.py Normal file
View File

@@ -0,0 +1,12 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./gatekeeper.db"
engine = create_engine(
SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
from models import Base
Base.metadata.create_all(bind=engine)