-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconsumers.py
91 lines (78 loc) · 3.65 KB
/
consumers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import json
from fastapi import HTTPException
'''
Essa função é responsável por criar uma nova entrega.
Ela recebe um estado e um evento como parâmetros, extrai os dados relevantes do evento e retorna um dicionário com informações sobre a entrega, como o ID, o orçamento, as notas e o status
'''
def create_delivery(state, event):
data = json.loads(event.data)
return {
"id": event.delivery_id,
"budget": int(data["budget"]),
"notes": data["notes"],
"status": "ready"
}
'''
Essa função é chamada para iniciar uma entrega.
Ela verifica se o status da entrega é "ready" (pronta) no estado atual. Se não for, lança uma exceção HTTP com código de status 400.
Caso contrário, atualiza o estado da entrega para "active" (ativa) e retorna o estado atualizado.
'''
def start_delivery(state, event):
if state['status'] != 'ready':
raise HTTPException(status_code=400, detail="Delivery already started")
return state | {
"status": "active"
}
'''
Essa função é usada para registrar a coleta de produtos durante uma entrega.
Ela recebe um estado e um evento como parâmetros, extrai os dados relevantes do evento e realiza cálculos com base no preço de compra e na quantidade de produtos coletados.
Se o orçamento atual não for suficiente para cobrir o custo da compra, uma exceção HTTP com código de status 400 é lançada.
Caso contrário, o estado é atualizado com as informações da compra e o status é definido como "collected" (coletado). O estado atualizado é retornado.
'''
def pickup_products(state, event):
data = json.loads(event.data)
new_budget = state["budget"] - \
int(data['purchase_price']) * int(data['quantity'])
if new_budget < 0:
raise HTTPException(status_code=400, detail="Not enough budget")
return state | {
"budget": new_budget,
"purchase_price": int(data['purchase_price']),
"quantity": int(data['quantity']),
"status": "collected"
}
'''
Essa função é usada para registrar a entrega de produtos durante uma entrega.
Ela recebe um estado e um evento como parâmetros, extrai os dados relevantes do evento e realiza cálculos com base no preço de venda e na quantidade de produtos entregues.
Se a quantidade de produtos no estado atual for insuficiente para atender à entrega, uma exceção HTTP com código de status 400 é lançada.
Caso contrário, o estado é atualizado com as informações da venda e a quantidade de produtos é atualizada. O status é definido como "completed" (concluído) e o estado atualizado é retornado.
'''
def deliver_products(state, event):
data = json.loads(event.data)
new_budget = state["budget"] + \
int(data['sell_price']) * int(data['quantity'])
new_quantity = state["quantity"] - int(data['quantity'])
if new_quantity < 0:
raise HTTPException(status_code=400, detail="Not enough quantity")
return state | {
"budget": new_budget,
"sell_price": int(data['sell_price']),
"quantity": new_quantity,
"status": "completed"
}
'''
Essa função é usada para aumentar o orçamento de uma entrega.
Ela recebe um estado e um evento como parâmetros, extrai o valor do orçamento do evento e adiciona esse valor ao orçamento atual no estado.
O estado atualizado é retornado.
'''
def increase_budget(state, event):
data = json.loads(event.data)
state['budget'] += int(data['budget'])
return state
CONSUMERS = {
"CREATE_DELIVERY": create_delivery,
"START_DELIVERY": start_delivery,
"PICKUP_PRODUCTS": pickup_products,
"DELIVER_PRODUCTS": deliver_products,
"INCREASE_BUDGET": increase_budget,
}