Skip to content

Commit 794e5c7

Browse files
committed
Initial commit
0 parents  commit 794e5c7

File tree

8 files changed

+145
-0
lines changed

8 files changed

+145
-0
lines changed

.env.example

Whitespace-only changes.

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.env
2+
app/__pycache__/
3+
.venv/

app/crud.py

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from sqlalchemy.orm import Session
2+
from fastapi import HTTPException
3+
from app import schemas, models
4+
5+
6+
def get_user(db: Session, user_id: int):
7+
return db.query(models.User).filter(models.User.id == user_id).first()
8+
9+
def get_user_by_name(db: Session, name: str):
10+
return db.query(models.User).filter(models.User.name == name).first()
11+
12+
def get_users(db: Session, skip:int=0, limit:int=100):
13+
return db.query(models.User).offset(skip).limit(limit).all()
14+
15+
def create_user(db: Session, user:schemas.UserCreate):
16+
existing_user = get_user_by_name(db, name=user.name)
17+
if existing_user:
18+
raise HTTPException(status_code=400, detail="Username already taken")
19+
db_user = models.User(name=user.name,
20+
premium_user=user.premium_user,
21+
payment_id=user.payment_id)
22+
db.add(db_user)
23+
db.commit()
24+
db.refresh(db_user)
25+
return db_user
26+
27+
def update_user(db: Session, user_id: int, updated_user: schemas.UserCreate):
28+
db_user = db.query(models.User).filter(models.User.id == user_id).first()
29+
if db_user:
30+
db_user.name = updated_user.name
31+
db_user.premium_user = updated_user.premium_user
32+
db_user.payment_id = updated_user.payment_id
33+
db.commit()
34+
db.refresh(db_user)
35+
return db_user
36+
37+
def delete_user(db: Session, user_id: int):
38+
db_user = db.query(models.User).filter(models.User.id == user_id).first()
39+
if db_user:
40+
db.delete(db_user)
41+
db.commit()
42+
return db_user

app/database.py

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from sqlalchemy import create_engine
2+
from sqlalchemy.ext.declarative import declarative_base
3+
from sqlalchemy.orm import sessionmaker
4+
from dotenv import load_dotenv
5+
import os
6+
7+
load_dotenv()
8+
9+
DB_URL = os.getenv("DB_URL")
10+
engine = create_engine(DB_URL,echo=True)
11+
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
12+
13+
Base = declarative_base()
14+
15+
def get_db():
16+
db = SessionLocal()
17+
try :
18+
yield db
19+
finally:
20+
db.close()

app/main.py

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from typing import Union
2+
3+
from fastapi import FastAPI
4+
5+
app = FastAPI()
6+
7+
8+
@app.get("/")
9+
def read_root():
10+
return {"Hello": "World"}
11+
12+
13+
@app.get("/items/{item_id}")
14+
def read_item(item_id: int, q: Union[str, None] = None):
15+
return {"item_id": item_id, "q": q}

app/models.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from sqlalchemy import Boolean, Column, Integer, String, DateTime
2+
from sqlalchemy.sql import func
3+
from app.database import Base
4+
5+
class User(Base):
6+
__tablename__ = "users"
7+
id = Column(Integer, primary_key=True, index=True)
8+
name = Column(String(255), unique=True, index=True)
9+
premium_user = Column(Boolean)
10+
payment_id = Column(String(255))
11+
created_at = Column(DateTime(timezone=True), default=func.now() )
12+
updated_at = Column(DateTime(timezone=True), default=func.now(), onupdate=func.now() )

app/schemas.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from pydantic import BaseModel
2+
from datetime import datetime
3+
4+
class UserBase(BaseModel):
5+
name: str
6+
premium_user: bool
7+
payment_id: str
8+
9+
10+
class UserCreate(UserBase):
11+
pass
12+
13+
14+
class User(UserBase):
15+
id : int
16+
created_at : datetime
17+
18+
class Config:
19+
from_attributes = True

requirements.txt

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
annotated-types==0.7.0
2+
anyio==4.8.0
3+
certifi==2025.1.31
4+
click==8.1.8
5+
dnspython==2.7.0
6+
email_validator==2.2.0
7+
fastapi==0.115.10
8+
fastapi-cli==0.0.7
9+
h11==0.14.0
10+
httpcore==1.0.7
11+
httptools==0.6.4
12+
httpx==0.28.1
13+
idna==3.10
14+
Jinja2==3.1.5
15+
markdown-it-py==3.0.0
16+
MarkupSafe==3.0.2
17+
mdurl==0.1.2
18+
pydantic==2.10.6
19+
pydantic_core==2.27.2
20+
Pygments==2.19.1
21+
python-dotenv==1.0.1
22+
python-multipart==0.0.20
23+
PyYAML==6.0.2
24+
rich==13.9.4
25+
rich-toolkit==0.13.2
26+
shellingham==1.5.4
27+
sniffio==1.3.1
28+
starlette==0.46.0
29+
typer==0.15.2
30+
typing_extensions==4.12.2
31+
uvicorn==0.34.0
32+
uvloop==0.21.0
33+
watchfiles==1.0.4
34+
websockets==15.0

0 commit comments

Comments
 (0)