11from __future__ import annotations
2- from typing import Optional , TYPE_CHECKING
3- from datetime import date
4-
5- from allocation .domain import model
2+ from typing import TYPE_CHECKING
3+ from allocation .domain import events , model
64from allocation .domain .model import OrderLine
75
86if TYPE_CHECKING :
@@ -14,27 +12,42 @@ class InvalidSku(Exception):
1412
1513
1614def add_batch (
17- ref : str , sku : str , qty : int , eta : Optional [ date ] ,
15+ event : events . BatchCreated ,
1816 uow : unit_of_work .AbstractUnitOfWork ,
1917):
2018 with uow :
21- product = uow .products .get (sku = sku )
19+ product = uow .products .get (sku = event . sku )
2220 if product is None :
23- product = model .Product (sku , batches = [])
21+ product = model .Product (event . sku , batches = [])
2422 uow .products .add (product )
25- product .batches .append (model .Batch (ref , sku , qty , eta ))
23+ product .batches .append (
24+ model .Batch (event .ref , event .sku , event .qty , event .eta )
25+ )
2626 uow .commit ()
2727
2828
2929def allocate (
30- orderid : str , sku : str , qty : int ,
30+ event : events . AllocationRequired ,
3131 uow : unit_of_work .AbstractUnitOfWork ,
3232) -> str :
33- line = OrderLine (orderid , sku , qty )
33+ line = OrderLine (event . orderid , event . sku , event . qty )
3434 with uow :
3535 product = uow .products .get (sku = line .sku )
3636 if product is None :
3737 raise InvalidSku (f"Invalid sku { line .sku } " )
3838 batchref = product .allocate (line )
3939 uow .commit ()
4040 return batchref
41+
42+
43+ # pylint: disable=unused-argument
44+
45+
46+ def send_out_of_stock_notification (
47+ event : events .OutOfStock ,
48+ uow : unit_of_work .AbstractUnitOfWork ,
49+ ):
50+ email .send (
51+ "stock@made.com" ,
52+ f"Out of stock for { event .sku } " ,
53+ )
0 commit comments