sync - build workin

This commit is contained in:
2025-09-29 10:27:02 -07:00
parent 850a9efaa3
commit b436c1ec33
2 changed files with 41 additions and 21 deletions

41
main.py
View File

@@ -12,7 +12,7 @@ from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import HTMLResponse
from sqlalchemy import create_engine, Column, Integer, String, Float, DateTime, ForeignKey, Text, Date, Boolean
from sqlalchemy import or_
from sqlalchemy.orm import sessionmaker, Session, relationship, declarative_base
from sqlalchemy.orm import sessionmaker, Session, relationship, declarative_base, orm
from pydantic import BaseModel, ConfigDict
from typing import List, Optional
from datetime import date, datetime
@@ -293,6 +293,18 @@ class TemplateExport(BaseModel):
model_config = ConfigDict(from_attributes=True)
class TemplateMealDetail(BaseModel):
meal_id: int
meal_time: str
meal_name: str
class TemplateDetail(BaseModel):
id: int
name: str
template_meals: List[TemplateMealDetail]
model_config = ConfigDict(from_attributes=True)
class WeeklyMenuDayExport(BaseModel):
day_of_week: int
template_id: int
@@ -2180,12 +2192,29 @@ async def test_route():
@app.get("/templates", response_class=HTMLResponse)
async def templates_page(request: Request, db: Session = Depends(get_db)):
templates_list = db.query(Template).all()
logging.info(f"DEBUG: templates_list contains {len(templates_list)} templates.")
for t in templates_list:
logging.info(f"DEBUG: Template object: {t.__dict__}")
meals = db.query(Meal).all()
return templates.TemplateResponse(request, "templates.html", {"templates": templates_list, "meals": meals})
return templates.TemplateResponse(request, "templates.html", {"meals": meals})
@app.get("/api/templates", response_model=List[TemplateDetail])
async def get_templates_api(db: Session = Depends(get_db)):
"""API endpoint to get all templates with meal details."""
templates = db.query(Template).options(orm.joinedload(Template.template_meals).joinedload(TemplateMeal.meal)).all()
results = []
for t in templates:
meal_details = [
TemplateMealDetail(
meal_id=tm.meal_id,
meal_time=tm.meal_time,
meal_name=tm.meal.name
) for tm in t.template_meals
]
results.append(TemplateDetail(
id=t.id,
name=t.name,
template_meals=meal_details
))
return results
@app.post("/templates/upload")
async def bulk_upload_templates(file: UploadFile = File(...), db: Session = Depends(get_db)):

View File

@@ -318,14 +318,9 @@ document.addEventListener('DOMContentLoaded', function() {
});
function loadTemplates() {
fetch('/templates')
.then(response => response.text())
.then(html => {
// Extract templates data from the HTML response
const parser = new DOMParser();
const doc = parser.parseFromString(html, 'text/html');
const templates = JSON.parse(doc.querySelector('script[data-templates]')?.textContent || '[]');
fetch('/api/templates')
.then(response => response.json())
.then(templates => {
const tbody = document.querySelector('#templatesTable tbody');
tbody.innerHTML = '';
@@ -340,7 +335,7 @@ function loadTemplates() {
<td><strong>${template.name}</strong></td>
<td>
${template.template_meals && template.template_meals.length > 0 ? template.template_meals.map(tm =>
`<span class="badge bg-secondary me-1">${tm.meal_time}: ${tm.meal.name}</span>`
`<span class="badge bg-secondary me-1">${tm.meal_time}: ${tm.meal_name}</span>`
).join('') : 'No meals assigned'}
</td>
<td>
@@ -502,8 +497,4 @@ function deleteTemplate(templateId) {
}
</script>
<!-- Hidden script to pass templates data -->
<script type="application/json" data-templates>
{{ templates|tojson }}
</script>
{% endblock %}