def update_auction(*, id: int, auction_in: AuctionUpdate, ending_date: datetime = Body(None), db: Session = Depends(get_db)): auction = auction_repo.get(db, id=id) if not auction: raise AUCTION_NOT_FOUND_EXCEPTION return auction_repo.update_with_date(db, db_obj=auction, obj_in=auction_in, ending_date=ending_date)
def end_auction(cls, id: int): try: db = SessionLocal() english = EnglishAuction() auction = auction_repo.get(db, id=id) english.end(db, db_obj=auction) finally: db.close()
def buy_it_now(*, id: int, db: Session = Depends(get_db), current_user: User = Depends(get_current_active_user)): auction = auction_repo.get(db, id=id) if not auction: raise AUCTION_NOT_FOUND_EXCEPTION english = EnglishAuction() return english.buy_it_now(db, db_obj=auction, buyer_id=current_user.id)
def start_auction(*, id: int, starting_date: datetime = Body(None), db: Session = Depends(get_db)): auction = auction_repo.get(db, id=id) if not auction: raise AUCTION_NOT_FOUND_EXCEPTION english = EnglishAuction() return english.start(db, db_obj=auction, starting_date=starting_date)
def test_start(db: Session): auction = create_random_auction(db) assert auction.state == AuctionState.CREATED english = EnglishAuction() ending_date = (datetime.now() + timedelta(days=1)).isoformat() english.start(db, db_obj=auction, ending_date=ending_date) auction = auction_repo.get(db, id=auction.id) assert auction.state == AuctionState.ONGOING
def bid_in_auction(*, id: int, amount: float = Body(...), db: Session = Depends(get_db), current_user: User = Depends(get_current_active_user)): auction = auction_repo.get(db, id=id) if not auction: raise AUCTION_NOT_FOUND_EXCEPTION english = EnglishAuction() return english.bid(db, db_obj=auction, amount=amount, bidder_id=current_user.id)
def test_buy_it_now(db: Session): auction = create_random_auction(db) english = EnglishAuction() ending_date = (datetime.now() + timedelta(days=1)).isoformat() english.start(db, db_obj=auction, ending_date=ending_date) assert auction.state == AuctionState.ONGOING buyer = create_random_user(db) english.buy_it_now(db, db_obj=auction, buyer_id=buyer.id) db_obj = auction_repo.get(db, id=auction.id) assert db_obj.state == AuctionState.ENDED assert db_obj.current_bid_amount == db_obj.bid_cap assert db_obj.final_winner_id == buyer.id
def test_bid(db: Session): auction = create_random_auction(db) english = EnglishAuction() ending_date = (datetime.now() + timedelta(days=1)).isoformat() english.start(db, db_obj=auction, ending_date=ending_date) assert auction.state == AuctionState.ONGOING amount = auction.starting_amount + 1 bidder = create_random_user(db) english.bid(db, db_obj=auction, amount=amount, bidder_id=bidder.id) db_obj = auction_repo.get(db, id=auction.id) assert db_obj.current_bid_amount == amount + 1.25 assert db_obj.last_bid_at assert db_obj.winning_bid.amount == amount assert db_obj.bids
def test_end_when_reserve_not_met(db: Session): auction = create_random_auction(db) english = EnglishAuction() ending_date = (datetime.now() + timedelta(days=1)).isoformat() english.start(db, db_obj=auction, ending_date=ending_date) assert auction.state == AuctionState.ONGOING amount = auction.current_bid_amount + 2 bidder = create_random_user(db) english.bid(db, db_obj=auction, amount=amount, bidder_id=bidder.id) db_obj = auction_repo.get(db, id=auction.id) assert db_obj.winning_bid english.end(db, db_obj=db_obj) assert db_obj.state == AuctionState.CANCLED assert not db_obj.final_winner_id
def end_auction(*, id: int, db: Session = Depends(get_db), current_user: User = Depends(get_current_active_user)): auction = auction_repo.get(db, id=id) if not auction: raise AUCTION_NOT_FOUND_EXCEPTION if auction.state != AuctionState.ONGOING: if auction.state == AuctionState.CREATED: raise AUCTION_NOT_STARTED_EXCEPTION elif auction.state == AuctionState.ENDED: raise AUCTION_ENDED_EXCEPTION elif auction.state == AuctionState.CANCLED: raise AUCTION_CANCELED_EXCEPTION english = EnglishAuction() return english.end(db, db_obj=auction)
def bid_in_auction(*, id: int, amount: float = Body(...), db: Session = Depends(get_db), current_user: User = Depends(get_current_active_user)): auction = auction_repo.get(db, id=id) if not auction: raise AUCTION_NOT_FOUND_EXCEPTION if auction.state != AuctionState.ONGOING: if auction.state == AuctionState.CREATED: raise AUCTION_NOT_STARTED_EXCEPTION elif auction.state == AuctionState.ENDED: raise AUCTION_ENDED_EXCEPTION elif auction.state == AuctionState.CANCLED: raise AUCTION_CANCELED_EXCEPTION english = EnglishAuction() return english.bid(db, db_obj=auction, amount=amount, bidder_id=current_user.id)
def start_auction(*, id: int, starting_date: datetime = Body(None), ending_date: datetime = Body(...), db: Session = Depends(get_db), current_user: User = Depends(get_current_active_user)): auction = auction_repo.get(db, id=id) if not auction: raise AUCTION_NOT_FOUND_EXCEPTION if auction.state != AuctionState.CREATED: if auction.state == AuctionState.ONGOING: raise AUCTION_ONGOING_EXCEPTION elif auction.state == AuctionState.ENDED: raise AUCTION_ENDED_EXCEPTION elif auction.state == AuctionState.CANCLED: raise AUCTION_CANCELED_EXCEPTION english = EnglishAuction() return english.start(db, db_obj=auction, starting_date=starting_date, ending_date=ending_date)
def test_create_auction(db: Session): product = create_random_product(db) starting_amount = random_float() reserve = starting_amount + random_float() bid_cap = reserve + random_float() owner = product.owner auction = auction_repo.create(db, obj_in=AuctionCreate( product_id=product.id, starting_amount=starting_amount, reserve=reserve, bid_cap=bid_cap)) db_obj = auction_repo.get(db, id=auction.id) assert db_obj assert db_obj.product_id == product.id assert db_obj.starting_amount == starting_amount assert db_obj.reserve == reserve assert db_obj.bid_cap == bid_cap assert db_obj.state == AuctionState.CREATED
def get_auction(*, id: int, db: Session = Depends(get_db)): auction = auction_repo.get(db, id=id) if not auction: raise AUCTION_NOT_FOUND_EXCEPTION return auction
def end_auction(*, id: int, db: Session = Depends(get_db)): auction = auction_repo.get(db, id=id) if not auction: raise AUCTION_NOT_FOUND_EXCEPTION english = EnglishAuction() return english.end(db, db_obj=auction)