Spaces:
Sleeping
Sleeping
File size: 2,621 Bytes
b2be963 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | from fastapi import APIRouter, Depends, HTTPException, status, UploadFile, File
from datetime import datetime
import os
from app.core.config import settings as app_settings
from sqlalchemy.orm import Session
from typing import Any
from app.db.base import get_db
from app.models.settings import StoreSettings
from app.schemas.settings import StoreSettingsResponse, StoreSettingsUpdate
from app.api.auth import get_current_admin_user
from app.schemas.api_response import APIResponse
router = APIRouter(prefix="/settings", tags=["Settings"])
@router.get("/", response_model=APIResponse)
def get_settings(db: Session = Depends(get_db)) -> Any:
settings = db.query(StoreSettings).first()
if not settings:
settings = StoreSettings() # create default
db.add(settings)
db.commit()
db.refresh(settings)
return APIResponse(
isSuccess=True,
value=StoreSettingsResponse.model_validate(settings).model_dump(),
statusCode=200
)
@router.put("/", response_model=APIResponse)
def update_settings(
settings_in: StoreSettingsUpdate,
db: Session = Depends(get_db),
current_admin=Depends(get_current_admin_user)
) -> Any:
settings = db.query(StoreSettings).first()
if not settings:
settings = StoreSettings(**settings_in.model_dump(exclude_unset=True))
db.add(settings)
else:
update_data = settings_in.model_dump(exclude_unset=True)
for field, value in update_data.items():
setattr(settings, field, value)
db.commit()
db.refresh(settings)
return APIResponse(
isSuccess=True,
value=StoreSettingsResponse.model_validate(settings).model_dump(),
statusCode=200
)
@router.post("/upload-image", response_model=APIResponse)
def upload_settings_image(
file: UploadFile = File(...),
db: Session = Depends(get_db),
current_admin=Depends(get_current_admin_user)
) -> Any:
# Convert file to base64 string
file_bytes = file.file.read()
import base64
ext = os.path.splitext(file.filename)[1].lower()
mime_type = "image/jpeg"
if ext in [".png"]:
mime_type = "image/png"
elif ext in [".gif"]:
mime_type = "image/gif"
elif ext in [".webp"]:
mime_type = "image/webp"
b64_encoded = base64.b64encode(file_bytes).decode('utf-8')
data_uri = f"data:{mime_type};base64,{b64_encoded}"
return APIResponse(
isSuccess=True,
value={"url": data_uri},
statusCode=200
)
|