Add project model, routes and logic. WIP

This commit is contained in:
Hannah dagemark 2026-08-06 18:26:24 +02:00
commit bbe0df9546
4 changed files with 76 additions and 1 deletions

View 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

View file

@ -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,
@ -16,3 +16,7 @@ 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
View 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)

View 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)