VortexCommerceBackend / app /api /settings.py
hisham-cmd's picture
Full Sync: Explicit Commit Operations (Pure & Optimized)
b2be963 verified
Raw
History Blame Contribute Delete
2.62 kB
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
)