byceps.services.shop.order.actions._ticketing   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 3
eloc 33
dl 0
loc 50
rs 10
c 0
b 0
f 0
ccs 13
cts 13
cp 1

2 Functions

Rating   Name   Duplication   Size   Complexity  
A create_tickets_sold_event() 0 24 2
A send_tickets_sold_event() 0 2 1
1
"""
2
byceps.services.shop.order.actions._ticketing
3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
:Copyright: 2014-2024 Jochen Kupperschmidt
6
:License: Revised BSD (see `LICENSE` file for details)
7
"""
8
9 1
from byceps.events.base import EventParty, EventUser
10 1
from byceps.events.ticketing import TicketsSoldEvent
11 1
from byceps.services.party import party_service
12 1
from byceps.services.shop.order import order_service
13 1
from byceps.services.shop.order.errors import OrderNotPaidError
14 1
from byceps.services.shop.order.models.order import OrderID
15 1
from byceps.services.ticketing import ticket_category_service
16
from byceps.services.ticketing.models.ticket import TicketCategoryID
17
from byceps.services.user.models.user import User
18 1
from byceps.signals import ticketing as ticketing_signals
19
from byceps.util.result import Err, Ok, Result
20
21
22
def create_tickets_sold_event(
23
    order_id: OrderID,
24
    initiator: User,
25 1
    category_id: TicketCategoryID,
26 1
    owner: User,
27
    quantity: int,
28 1
) -> Result[TicketsSoldEvent, OrderNotPaidError]:
29
    order_paid_at_result = order_service.get_payment_date(order_id)
30
    if order_paid_at_result.is_err():
31
        return Err(order_paid_at_result.unwrap_err())
32
33
    paid_at = order_paid_at_result.unwrap()
34
    category = ticket_category_service.get_category(category_id)
35
    party = party_service.get_party(category.party_id)
36
37
    event = TicketsSoldEvent(
38
        occurred_at=paid_at,
39 1
        initiator=EventUser.from_user(initiator),
40 1
        party=EventParty.from_party(party),
41
        owner=EventUser.from_user(owner),
42
        quantity=quantity,
43
    )
44
45
    return Ok(event)
46
47
48
def send_tickets_sold_event(event: TicketsSoldEvent) -> None:
49
    ticketing_signals.tickets_sold.send(None, event=event)
50