| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- # app/services/product_service.py
- from sqlalchemy.orm import Session
- from typing import Optional, List
- from app.utils.search import apply_keyword_search
- from app.utils.pagination import paginate
- from app.core.biz_exception import NotFoundError, PermissionDeniedError, BizLogicError
- from app.models.product import VasProduct
- from app.schemas.product import VasProductCreate, VasProductUpdate, VasProductOut
- class ProductService:
- def create(db: Session, data: VasProductCreate):
- rec = VasProduct(**data.dict())
- db.add(rec)
- db.commit()
- db.refresh(rec)
- return rec
- def get(db: Session, id:int):
- obj = db.query(VasProduct).filter_by(id=id).first()
- if not obj:
- raise NotFoundError('Product not exist')
- return obj
- def update(db: Session, id:int, data: VasProductUpdate):
- rec = db.query(VasProduct).filter_by(id=id).first()
- if not rec:
- raise NotFoundError('Product not exist')
- for k,v in data.dict(exclude_unset=True).items():
- setattr(rec,k,v)
- db.commit()
- db.refresh(rec)
- return rec
-
- def list_product(db: Session, country: str = None, visa_type: str = None, page: int=0, size: int=10, keyword: str=None):
- query = db.query(VasProduct)
-
- if country:
- query = query.filter(VasProduct.country == country)
-
- if visa_type:
- query = query.filter(VasProduct.visa_type == visa_type)
-
- query = apply_keyword_search(
- query=query,
- model=VasProduct,
- keyword=keyword,
- fields=["title", "provider", "description"]
- )
- return paginate(query, page, size)
|