ADD Basic routes and database models
This commit is contained in:
+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