Skip to content

Commit 51c8a83

Browse files
authored
Merge pull request #43 from fireform-core/1-feat-create-frontend-api-to-connect-frontend-and-backend-for-form-templates
## Implement core API structure and database management
2 parents 4b9c162 + ef58c52 commit 51c8a83

32 files changed

Lines changed: 580 additions & 233 deletions

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
src/__pycache__
1+
**/__pycache__/
22
.idea
33
venv
44
.venv
5+
*.db

api/__init__.py

Whitespace-only changes.

api/db/__init__.py

Whitespace-only changes.

api/db/database.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from sqlmodel import create_engine, Session
2+
3+
DATABASE_URL = "sqlite:///./fireform.db"
4+
5+
engine = create_engine(
6+
DATABASE_URL,
7+
echo=True,
8+
connect_args={"check_same_thread": False},
9+
)
10+
11+
def get_session():
12+
with Session(engine) as session:
13+
yield session

api/db/init_db.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from sqlmodel import SQLModel
2+
from api.db.database import engine
3+
from api.db import models
4+
5+
def init_db():
6+
SQLModel.metadata.create_all(engine)
7+
8+
if __name__ == "__main__":
9+
init_db()

api/db/models.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from sqlmodel import SQLModel, Field
2+
from sqlalchemy import Column, JSON
3+
from datetime import datetime
4+
5+
class Template(SQLModel, table=True):
6+
id: int | None = Field(default=None, primary_key=True)
7+
name: str
8+
fields: dict = Field(sa_column=Column(JSON))
9+
pdf_path: str
10+
created_at: datetime = Field(default_factory=datetime.utcnow)
11+
12+
13+
class FormSubmission(SQLModel, table=True):
14+
id: int | None = Field(default=None, primary_key=True)
15+
template_id: int
16+
input_text: str
17+
output_pdf_path: str
18+
created_at: datetime = Field(default_factory=datetime.utcnow)

api/db/repositories.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from sqlmodel import Session, select
2+
from api.db.models import Template, FormSubmission
3+
4+
# Templates
5+
def create_template(session: Session, template: Template) -> Template:
6+
session.add(template)
7+
session.commit()
8+
session.refresh(template)
9+
return template
10+
11+
def get_template(session: Session, template_id: int) -> Template | None:
12+
return session.get(Template, template_id)
13+
14+
# Forms
15+
def create_form(session: Session, form: FormSubmission) -> FormSubmission:
16+
session.add(form)
17+
session.commit()
18+
session.refresh(form)
19+
return form

api/deps.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from api.db.database import get_session
2+
3+
def get_db():
4+
yield from get_session()

api/errors/__init__.py

Whitespace-only changes.

api/errors/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class AppError(Exception):
2+
def __init__(self, message: str, status_code: int = 400):
3+
self.message = message
4+
self.status_code = status_code

0 commit comments

Comments
 (0)