ADD Basic routes and database models
This commit is contained in:
+2
-2
@@ -11,5 +11,5 @@ wheels/
|
|||||||
|
|
||||||
.env
|
.env
|
||||||
|
|
||||||
.sqlite
|
*.sqlite
|
||||||
.duckdb
|
*.duckdb
|
||||||
+28
@@ -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
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
from .user import User
|
||||||
|
from .movie import Movie
|
||||||
|
from .score import Score
|
||||||
|
from .card import Card
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -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)
|
||||||
@@ -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)
|
||||||
@@ -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)
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
from fastapi import APIRouter
|
||||||
|
|
||||||
|
router = APIRouter(
|
||||||
|
prefix="/card",
|
||||||
|
tags=["card"],
|
||||||
|
responses={404: {"description": "Not found"}},
|
||||||
|
)
|
||||||
@@ -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"]}
|
||||||
@@ -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"]}
|
||||||
@@ -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"}
|
||||||
Reference in New Issue
Block a user