Skip to content

Commit 321047f

Browse files
committed
feat: User Authentication using Oauth
1 parent 4024c45 commit 321047f

15 files changed

Lines changed: 261 additions & 0 deletions

File tree

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DATABASE_URL =

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
venv/
2+
*.db
3+
.env
4+
__pycache__/

app/__init__.py

Whitespace-only changes.

app/crud.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from sqlalchemy.orm import Session
2+
from app import models
3+
from app.enums import Grade
4+
5+
def get_user(db: Session, google_id: str):
6+
return db.query(models.User).filter(models.User.google_id == google_id).first()
7+
8+
def get_user_by_id(db: Session, user_id: int):
9+
return db.query(models.User).filter(models.User.id == user_id).first()
10+
11+
def create_google_user(
12+
db: Session,
13+
google_id: str,
14+
email: str,
15+
name: str,
16+
grade: Grade,
17+
institute: str,
18+
city: str,
19+
marketing: str):
20+
user = models.User(
21+
google_id=google_id,
22+
email=email,
23+
name=name,
24+
grade=grade,
25+
institute=institute,
26+
city=city,
27+
marketing=marketing,
28+
)
29+
db.add(user)
30+
db.commit()
31+
db.refresh(user)
32+
return user
33+

app/database.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from sqlalchemy import create_engine
2+
from sqlalchemy.orm import sessionmaker, declarative_base
3+
from dotenv import load_dotenv
4+
import os
5+
6+
load_dotenv()
7+
DATABASE_URL = os.getenv("DATABASE_URL")
8+
engine = create_engine(DATABASE_URL,connect_args={"check_same_thread": False})
9+
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
10+
Base = declarative_base()

app/dependencies.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from .database import SessionLocal
2+
3+
def get_db():
4+
db = SessionLocal()
5+
try:
6+
yield db
7+
finally:
8+
db.close()

app/enums.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from enum import Enum
2+
3+
class Grade(str, Enum):
4+
grade_11 = "11"
5+
grade_12 = "12"
6+
repeater = "Repeater"

app/main.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from fastapi import FastAPI
2+
from app.database import Base, engine
3+
from app.routers import auth
4+
from fastapi.middleware.cors import CORSMiddleware
5+
6+
app = FastAPI()
7+
app.add_middleware(
8+
CORSMiddleware,
9+
allow_origins=["http://localhost:3000"],
10+
allow_credentials=True,
11+
allow_methods=["*"],
12+
allow_headers=["*"],
13+
)
14+
Base.metadata.create_all(bind=engine)
15+
16+
app.include_router(auth.router)
17+
18+
@app.get("/")
19+
def root():
20+
return {"status": "running"}

app/models.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from sqlalchemy import Column, String, Integer, DateTime, ForeignKey, Enum
2+
from datetime import datetime
3+
from .database import Base
4+
from .enums import Grade
5+
6+
class User(Base):
7+
__tablename__ = "users"
8+
9+
id = Column(Integer, primary_key=True, index=True)
10+
google_id = Column(String, unique=True, index=True, nullable=True)
11+
email = Column(String, unique=True, index=True)
12+
name = Column(String, nullable=False)
13+
grade = Column(Enum(Grade), nullable=False)
14+
institute = Column(String, nullable=False)
15+
city = Column(String, nullable=False)
16+
marketing = Column(String, nullable=False)
17+
18+
class Session(Base):
19+
__tablename__ = "sessions"
20+
21+
id = Column(String, primary_key=True, index=True)
22+
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
23+
expires_at = Column(DateTime, nullable=False)
24+
created_at = Column(DateTime, default=datetime.utcnow)

app/routers/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)