Consolidate search endpoints for better API organization
- Removed duplicate /api/search endpoint - Kept /search as the main JSON API endpoint with proper documentation - Added /search/form for web form submissions - Updated HTML form to use /search/form endpoint - Clear separation between API and web interface - Media type enums still visible in /docs for API usage - Maintains all functionality while reducing endpoint confusion
This commit is contained in:
16
main.py
16
main.py
@@ -1,10 +1,10 @@
|
||||
from fastapi import FastAPI, Request, Form
|
||||
from fastapi.responses import HTMLResponse
|
||||
from fastapi import FastAPI, Request, Form, Body
|
||||
from fastapi.responses import HTMLResponse, JSONResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from fastapi.templating import Jinja2Templates
|
||||
import httpx
|
||||
import asyncio
|
||||
from typing import Optional, List
|
||||
from typing import Optional, List, Union
|
||||
import json
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
@@ -59,10 +59,10 @@ async def home(request: Request):
|
||||
"""Serve the main search form"""
|
||||
return templates.TemplateResponse("index.html", {"request": request})
|
||||
|
||||
@app.post("/api/search", response_model=List[MediaItem])
|
||||
@app.post("/search", response_model=List[MediaItem])
|
||||
async def api_search_media(search_request: SearchRequest):
|
||||
"""
|
||||
Search for media items via API
|
||||
Search for media items via JSON API
|
||||
|
||||
**Media Types:**
|
||||
- `book`: Search books using OpenLibrary API
|
||||
@@ -88,14 +88,14 @@ async def api_search_media(search_request: SearchRequest):
|
||||
|
||||
return results
|
||||
|
||||
@app.post("/search")
|
||||
async def search_media(
|
||||
@app.post("/search/form")
|
||||
async def form_search_media(
|
||||
request: Request,
|
||||
media_type: str = Form(...),
|
||||
query: str = Form(...),
|
||||
artist: Optional[str] = Form(None)
|
||||
):
|
||||
"""Search for media based on type and query"""
|
||||
"""Search for media via web form submission - returns HTML page"""
|
||||
|
||||
if not query.strip():
|
||||
return templates.TemplateResponse("index.html", {
|
||||
|
@@ -16,7 +16,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form method="post" action="/search">
|
||||
<form method="post" action="/search/form">
|
||||
<div class="mb-3">
|
||||
<label for="media_type" class="form-label">Media Type</label>
|
||||
<select class="form-select" id="media_type" name="media_type" required>
|
||||
|
Reference in New Issue
Block a user