from typing import Optional from sqlalchemy.orm import Session from app.crud.base import CRUDBase from app.models.customer import Customer from app.schemas.customer import CustomerCreate, CustomerUpdate class CRUDCustomer(CRUDBase[Customer, CustomerCreate, CustomerUpdate]): def get_by_email(self, db: Session, *, email: str) -> Optional[Customer]: return db.query(Customer).filter(Customer.email == email).first() def get_by_stripe_id(self, db: Session, *, stripe_customer_id: str) -> Optional[Customer]: return db.query(Customer).filter(Customer.stripe_customer_id == stripe_customer_id).first() def create_with_stripe_id(self, db: Session, *, obj_in: CustomerCreate, stripe_customer_id: str) -> Customer: db_obj = Customer( first_name=obj_in.first_name, last_name=obj_in.last_name, email=obj_in.email, phone=obj_in.phone, address=obj_in.address, city=obj_in.city, state=obj_in.state, zip_code=obj_in.zip_code, country=obj_in.country, stripe_customer_id=stripe_customer_id ) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj customer = CRUDCustomer(Customer)