auto_booking_service.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from sqlalchemy.orm import Session
  2. from sqlalchemy import func
  3. from app.models.auto_booking import AutoBooking
  4. from app.schemas.auto_booking import AutoBookingCreate
  5. from typing import List
  6. class AutoBookingService:
  7. @staticmethod
  8. def create(db: Session, obj_in: AutoBookingCreate) -> AutoBooking:
  9. db_obj = AutoBooking(**obj_in.dict())
  10. db.add(db_obj)
  11. db.commit()
  12. db.refresh(db_obj)
  13. return db_obj
  14. @staticmethod
  15. def get_by_id(db: Session, id: int):
  16. return db.query(AutoBooking).filter(AutoBooking.id == id).first()
  17. @staticmethod
  18. def delete_by_id(db: Session, id: int):
  19. obj = db.query(AutoBooking).filter(AutoBooking.id == id).first()
  20. if obj:
  21. db.delete(obj)
  22. db.commit()
  23. return True
  24. return False
  25. @staticmethod
  26. def update_by_id(db: Session, id: int, updated_data: dict):
  27. obj = db.query(AutoBooking).filter(AutoBooking.id == id).first()
  28. if not obj:
  29. return None
  30. for key, value in updated_data.items():
  31. setattr(obj, key, value)
  32. db.commit()
  33. db.refresh(obj)
  34. return obj
  35. @staticmethod
  36. def get_paginated(db: Session, tech_provider: str, keyword: str, page: int, size: int):
  37. query = db.query(AutoBooking)
  38. if tech_provider:
  39. query = query.filter(AutoBooking.provider == tech_provider)
  40. if keyword:
  41. like_str = f"%{keyword}%"
  42. query = query.filter(
  43. (AutoBooking.first_name.like(like_str)) |
  44. (AutoBooking.last_name.like(like_str)) |
  45. (AutoBooking.email.like(like_str)) |
  46. (AutoBooking.visa_center.like(like_str))
  47. )
  48. return query.offset(page * size).limit(size).all()
  49. @staticmethod
  50. def batch_get_by_ids(db: Session, ids: List[int]):
  51. return db.query(AutoBooking).filter(AutoBooking.id.in_(ids)).all()
  52. @staticmethod
  53. def statistics(db: Session, tech_provider: str):
  54. query = db.query(AutoBooking.provider, func.count(AutoBooking.id)).group_by(AutoBooking.provider)
  55. if tech_provider:
  56. query = query.filter(AutoBooking.provider == tech_provider)
  57. return query.all()
  58. @staticmethod
  59. def get_pending(db: Session, tech_provider: str):
  60. query = db.query(AutoBooking).filter(AutoBooking.status == 0)
  61. if tech_provider:
  62. query = query.filter(AutoBooking.provider == tech_provider)
  63. return query.all()