ADD Basic routes and database models

This commit is contained in:
Esa Kataja
2024-11-09 12:27:37 +02:00
parent a35ade3d8b
commit 093299907c
13 changed files with 185 additions and 2 deletions
+2 -2
View File
@@ -11,5 +11,5 @@ wheels/
.env .env
.sqlite *.sqlite
.duckdb *.duckdb
+28
View File
@@ -0,0 +1,28 @@
from fastapi import FastAPI
from routes import admin_router, score_router, user_router, card_router, movie_router
from sqlmodel import SQLModel, Session, create_engine
from models import *
app = FastAPI(
title="Paska joululeffa 2024",
name="Paska joululeffa 2024",
description="API for Paska joululeffa 2024",
)
app.include_router(admin_router)
app.include_router(score_router)
app.include_router(user_router)
app.include_router(card_router)
app.include_router(movie_router)
engine = create_engine("sqlite:///data.sqlite")
SQLModel.metadata.create_all(engine)
@app.on_event("startup")
async def connect_db():
with Session(engine) as session:
app.state.db = session
+4
View File
@@ -0,0 +1,4 @@
from .user import User
from .movie import Movie
from .score import Score
from .card import Card
+12
View File
@@ -0,0 +1,12 @@
from sqlmodel import Field, SQLModel
from datetime import datetime
from typing import Optional
class Card(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
title: str
description: str
score: int
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
+14
View File
@@ -0,0 +1,14 @@
from sqlmodel import Field, SQLModel
from datetime import datetime
from typing import Optional
class Movie(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
imdb_id: str
actors: str
plot: str
release_date: datetime
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
+12
View File
@@ -0,0 +1,12 @@
from sqlmodel import Field, SQLModel
from datetime import datetime
from typing import Optional
class Score(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
user_id: Optional[int] = Field(default=None, foreign_key="user.id")
movie_id: Optional[int] = Field(default=None, foreign_key="movie.id")
score: int
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
+15
View File
@@ -0,0 +1,15 @@
from sqlmodel import Field, SQLModel
from datetime import datetime
from typing import Optional
class User(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
email: str = Field(unique=True)
password: str
avatar_url: str
is_active: bool = Field(default=True)
is_admin: bool = Field(default=False)
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
+5
View File
@@ -0,0 +1,5 @@
from .admin import router as admin_router
from .score import router as score_router
from .user import router as user_router
from .card import router as card_router
from .movie import router as movie_router
+43
View File
@@ -0,0 +1,43 @@
from fastapi import APIRouter
router = APIRouter(
prefix="/admin",
tags=["admin"],
responses={404: {"description": "Not found"}},
)
@router.post("/user")
async def add_user(user: str):
"""Add a user to the database"""
return {"user": user}
@router.delete("/user")
async def remove_user(user: str):
"""Remove a user from the database"""
return {"user": user}
@router.post("/movie")
async def add_movie(movie: str):
"""Add a movie to the database"""
return {"movie": movie}
@router.delete("/movie")
async def remove_movie(movie: str):
"""Remove a movie from the database"""
return {"movie": movie}
@router.post("/card")
async def add_card(card: str):
"""Add a card to the database"""
return {"card": card}
@router.delete("/card")
async def remove_card(card: str):
"""Remove a card from the database"""
return {"card": card}
+7
View File
@@ -0,0 +1,7 @@
from fastapi import APIRouter
router = APIRouter(
prefix="/card",
tags=["card"],
responses={404: {"description": "Not found"}},
)
+12
View File
@@ -0,0 +1,12 @@
from fastapi import APIRouter
router = APIRouter(
prefix="/movie",
tags=["movie"],
responses={404: {"description": "Not found"}},
)
@router.get("/")
async def get_movies():
return {"movies": ["movie1", "movie2", "movie3"]}
+12
View File
@@ -0,0 +1,12 @@
from fastapi import APIRouter
router = APIRouter(
prefix="/score",
tags=["score"],
responses={404: {"description": "Not found"}},
)
@router.get("/leaderboard")
async def get_leaderboard():
return {"leaderboard": ["user1", "user2", "user3"]}
+19
View File
@@ -0,0 +1,19 @@
from fastapi import APIRouter
from models import User
router = APIRouter(
prefix="/user",
tags=["user"],
responses={404: {"description": "Not found"}},
)
@router.get("/")
async def get_users():
return {"users": ["user1", "user2", "user3"]}
@router.post("/login")
async def login():
return {"token": "token"}