Add project model, routes and logic. WIP
This commit is contained in:
parent
7a62ff58a3
commit
bbe0df9546
4 changed files with 76 additions and 1 deletions
23
app/logic/project_logic.py
Normal file
23
app/logic/project_logic.py
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
from app.models.project import Project
|
||||||
|
from app.database import add_to_database, get_from_database, get_from_database_where, get_from_database_where_id
|
||||||
|
|
||||||
|
# For now, this is a manifest for the project model architecture:
|
||||||
|
|
||||||
|
# A project consists of:
|
||||||
|
# ID (Autoincrement num, required),
|
||||||
|
# Parent (Num, optional, if this field contains a number (not none or 0), it is considered a child project of project with ID = num)
|
||||||
|
# Title (Required, text),
|
||||||
|
# Content (Optional, for now is string text but needs to store full Markdown including images in the future)
|
||||||
|
|
||||||
|
def get_all():
|
||||||
|
return {"projects": get_from_database(Project)}
|
||||||
|
|
||||||
|
def get_by_id(project_id):
|
||||||
|
return {"project": get_from_database_where_id(Project, project_id)[0]}
|
||||||
|
|
||||||
|
def get_with_parent(project_id):
|
||||||
|
return {"projects": get_from_database_where(Project, Project.parent_id, project_id)}
|
||||||
|
|
||||||
|
def create(project: Project):
|
||||||
|
add_to_database(project)
|
||||||
|
return project
|
||||||
|
|
@ -2,7 +2,7 @@ from fastapi import FastAPI
|
||||||
|
|
||||||
from app.config import settings
|
from app.config import settings
|
||||||
from app.database import create_database
|
from app.database import create_database
|
||||||
from app.routers import example_route
|
from app.routers import example_route, project_route
|
||||||
|
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title=settings.app_name,
|
title=settings.app_name,
|
||||||
|
|
@ -15,4 +15,8 @@ def startup():
|
||||||
|
|
||||||
app.include_router(
|
app.include_router(
|
||||||
example_route.router
|
example_route.router
|
||||||
|
)
|
||||||
|
|
||||||
|
app.include_router(
|
||||||
|
project_route.router
|
||||||
)
|
)
|
||||||
19
app/models/project.py
Normal file
19
app/models/project.py
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
from sqlmodel import SQLModel, Field
|
||||||
|
|
||||||
|
class Project(SQLModel, table=True):
|
||||||
|
|
||||||
|
id: int | None = Field(
|
||||||
|
default=None,
|
||||||
|
primary_key=True
|
||||||
|
)
|
||||||
|
|
||||||
|
parent_id: int | None = Field(
|
||||||
|
default=None,
|
||||||
|
foreign_key="project.id"
|
||||||
|
)
|
||||||
|
|
||||||
|
title: str
|
||||||
|
|
||||||
|
content: str | None = Field(default=None)
|
||||||
|
|
||||||
|
|
||||||
29
app/routers/project_route.py
Normal file
29
app/routers/project_route.py
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
from app.models.project import Project
|
||||||
|
from fastapi import APIRouter
|
||||||
|
from app.logic.project_logic import create, get_all, get_by_id, get_with_parent
|
||||||
|
|
||||||
|
router = APIRouter(
|
||||||
|
prefix="/projects",
|
||||||
|
tags=["projects"]
|
||||||
|
)
|
||||||
|
|
||||||
|
@router.get("/")
|
||||||
|
def get_default():
|
||||||
|
|
||||||
|
return {
|
||||||
|
"message": "Root for Projects API"
|
||||||
|
}
|
||||||
|
|
||||||
|
@router.get("/all")
|
||||||
|
def get_all_projects(parent: int | None = None):
|
||||||
|
if parent:
|
||||||
|
return get_with_parent(parent)
|
||||||
|
return get_all()
|
||||||
|
|
||||||
|
@router.get("/project/{project_id}")
|
||||||
|
def get_project_by_id(project_id: int):
|
||||||
|
return get_by_id(project_id)
|
||||||
|
|
||||||
|
@router.post("/")
|
||||||
|
def create_project(project: Project):
|
||||||
|
return create(project)
|
||||||
Loading…
Reference in a new issue