Add initial files for Audio Dashboard Management System

- Created .env.example for environment variable configuration.
- Added docker-compose.yml for service orchestration.
- Implemented frequency response extraction in extract_frequency_response.py and convert_to_frequency_db.py.
- Generated output files: frequency_response_detailed.json, frequency_response_points.json, frequency_response.csv, and frequency_response_curve.png.
- Included sample measurement data for FiiO FA19 in CSV format.
This commit is contained in:
yangy
2026-03-17 14:20:08 +08:00
parent 75b1d16453
commit 90aec37461
25 changed files with 7570 additions and 47 deletions
+26
View File
@@ -1,11 +1,15 @@
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from typing import List, Optional
import logging
from database import get_db
from models.brand import Brand
from schemas import BrandCreate, BrandUpdate, BrandResponse
from response import ApiResponse, PageData
# Configure logging
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/api/brands", tags=["brands"])
@@ -18,6 +22,7 @@ def get_brands(
):
"""获取所有品牌列表(支持按名称模糊查询)"""
try:
logger.info(f"Getting brands: skip={skip}, limit={limit}, name={name}")
query = db.query(Brand)
if name:
query = query.filter(Brand.name.like(f"%{name}%"))
@@ -25,7 +30,10 @@ def get_brands(
total = query.count()
brands = query.offset(skip).limit(limit).all()
logger.info(f"Found {len(brands)} brands, total={total}")
if not brands:
logger.warning("No brands found")
return ApiResponse(code=2, msg="empty", data=None)
# 转换为字典列表
@@ -33,6 +41,7 @@ def get_brands(
return ApiResponse(code=1, msg="success", data={"items": brands_data, "total": total, "skip": skip, "limit": limit})
except Exception as e:
logger.error(f"Error getting brands: {str(e)}", exc_info=True)
return ApiResponse(code=0, msg="error", data=None)
@@ -40,11 +49,15 @@ def get_brands(
def get_brand(brand_id: int, db: Session = Depends(get_db)):
"""获取单个品牌"""
try:
logger.info(f"Getting brand: id={brand_id}")
brand = db.query(Brand).filter(Brand.id == brand_id).first()
if not brand:
logger.warning(f"Brand not found: id={brand_id}")
return ApiResponse(code=2, msg="empty", data=None)
logger.info(f"Brand found: {brand.to_dict()}")
return ApiResponse(code=1, msg="success", data=brand.to_dict())
except Exception as e:
logger.error(f"Error getting brand {brand_id}: {str(e)}", exc_info=True)
return ApiResponse(code=0, msg="error", data=None)
@@ -52,17 +65,21 @@ def get_brand(brand_id: int, db: Session = Depends(get_db)):
def create_brand(brand: BrandCreate, db: Session = Depends(get_db)):
"""创建新品牌"""
try:
logger.info(f"Creating brand: name={brand.name}")
# 检查是否已存在
existing = db.query(Brand).filter(Brand.name == brand.name).first()
if existing:
logger.warning(f"Brand already exists: name={brand.name}")
return ApiResponse.error(msg="品牌名称已存在", code=0)
db_brand = Brand(name=brand.name)
db.add(db_brand)
db.commit()
db.refresh(db_brand)
logger.info(f"Brand created successfully: id={db_brand.id}, name={db_brand.name}")
return ApiResponse.success(data=db_brand.to_dict(), msg="品牌创建成功")
except Exception as e:
logger.error(f"Error creating brand: {str(e)}", exc_info=True)
db.rollback()
return ApiResponse.error(msg=f"创建失败:{str(e)}", code=0)
@@ -71,21 +88,26 @@ def create_brand(brand: BrandCreate, db: Session = Depends(get_db)):
def update_brand(brand_id: int, brand: BrandUpdate, db: Session = Depends(get_db)):
"""更新品牌"""
try:
logger.info(f"Updating brand: id={brand_id}, data={brand.dict()}")
db_brand = db.query(Brand).filter(Brand.id == brand_id).first()
if not db_brand:
logger.warning(f"Brand not found: id={brand_id}")
return ApiResponse.no_data(msg="品牌不存在")
# 如果更新名称,检查是否冲突
if brand.name and brand.name != db_brand.name:
existing = db.query(Brand).filter(Brand.name == brand.name).first()
if existing:
logger.warning(f"Brand name already exists: name={brand.name}")
return ApiResponse.error(msg="品牌名称已存在", code=0)
db_brand.name = brand.name
db.commit()
db.refresh(db_brand)
logger.info(f"Brand updated successfully: id={db_brand.id}")
return ApiResponse.success(data=db_brand.to_dict(), msg="品牌更新成功")
except Exception as e:
logger.error(f"Error updating brand {brand_id}: {str(e)}", exc_info=True)
db.rollback()
return ApiResponse.error(msg=f"更新失败:{str(e)}", code=0)
@@ -94,13 +116,17 @@ def update_brand(brand_id: int, brand: BrandUpdate, db: Session = Depends(get_db
def delete_brand(brand_id: int, db: Session = Depends(get_db)):
"""删除品牌"""
try:
logger.info(f"Deleting brand: id={brand_id}")
db_brand = db.query(Brand).filter(Brand.id == brand_id).first()
if not db_brand:
logger.warning(f"Brand not found: id={brand_id}")
return ApiResponse.no_data(msg="品牌不存在")
db.delete(db_brand)
db.commit()
logger.info(f"Brand deleted successfully: id={brand_id}")
return ApiResponse.success(msg="删除成功")
except Exception as e:
logger.error(f"Error deleting brand {brand_id}: {str(e)}", exc_info=True)
db.rollback()
return ApiResponse.error(msg=f"删除失败:{str(e)}", code=0)