Skip to content

Commit

Permalink
(PC-29090)[API] feat: add route for offers stocks
Browse files Browse the repository at this point in the history
  • Loading branch information
thconte committed Apr 25, 2024
1 parent 3af8be5 commit 94203ac
Show file tree
Hide file tree
Showing 4 changed files with 499 additions and 320 deletions.
16 changes: 16 additions & 0 deletions api/src/pcapi/routes/native/v1/offers.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,22 @@ def get_offer(offer_id: str) -> serializers.OfferResponse:
return serializers.OfferResponse.from_orm(offer)


@blueprint.native_route("/offers/stocks", methods=["POST"])
@spectree_serialize(response_model=serializers.OffersStocksResponse, api=blueprint.api)
def get_offers_showtimes(body: serializers.OffersStocksRequest) -> serializers.OffersStocksResponse:
offer_ids = body.offer_ids
offers = (
Offer.query.filter(Offer.id.in_(offer_ids))
.options(joinedload(Offer.stocks).joinedload(Stock.priceCategory).joinedload(PriceCategory.priceCategoryLabel))
.options(joinedload(Offer.mediations))
.options(joinedload(Offer.venue).joinedload(Venue.managingOfferer))
.all()
)
serialized_offers = [serializers.OfferPreviewResponse.from_orm(offer) for offer in offers]
offers_response = serializers.OffersStocksResponse(offers=serialized_offers)
return offers_response


@blueprint.native_route("/offer/<int:offer_id>/report", methods=["POST"])
@spectree_serialize(on_success_status=204, api=blueprint.api)
@authenticated_and_active_user_required
Expand Down
34 changes: 34 additions & 0 deletions api/src/pcapi/routes/native/v1/serialization/offers.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,40 @@ class Config:
json_encoders = {datetime: format_into_utc_date}


class OfferPreviewResponse(BaseModel):
@classmethod
def from_orm(cls, offer: Offer) -> "OfferPreviewResponse":
offer_preview = super().from_orm(offer)
offer_preview.stocks = [OfferStockResponse.from_orm(stock) for stock in offer.activeStocks]

return offer_preview

id: int
durationMinutes: int | None
extraData: OfferExtraData | None
image: OfferImageResponse | None
# FIXME: (thconte, 24-04-2024): unused for now
# Will be used from the merge of the ticket PC-29406
last30DaysBookings: int | None
name: str
stocks: list[OfferStockResponse]

class Config:
orm_mode = True
allow_population_by_field_name = True


class OffersStocksResponse(BaseModel):
offers: list[OfferPreviewResponse]

class Config:
json_encoders = {datetime: format_into_utc_date}


class OffersStocksRequest(BaseModel):
offer_ids: list[int]


class OfferReportRequest(BaseModel):
class Config:
alias_generator = to_camel
Expand Down
Loading

0 comments on commit 94203ac

Please sign in to comment.