Skip to content

Commit 5ce56a0

Browse files
committed
Revert "view now users redis, tweak tests+app. [...]" [chapter_12_cqrs_ends]
This reverts commit 6dd38db04ea7c637f2d2510e7f587ac2009dd2ac. Revert "new helpers to update read model ..." This reverts commit dbaebdf249d952f2c3915526fd4d1bc6fe3cd18f. Revert "handlers talk to redis ..." This reverts commit 00658e2181de3e118579fa0a0da9b7ebb9e081f9.
1 parent 53eb950 commit 5ce56a0

File tree

5 files changed

+32
-35
lines changed

5 files changed

+32
-35
lines changed

src/allocation/adapters/redis_eventpublisher.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,3 @@
1414
def publish(channel, event: events.Event):
1515
logging.debug('publishing: channel=%s, event=%s', channel, event)
1616
r.publish(channel, json.dumps(asdict(event)))
17-
18-
19-
def update_readmodel(orderid, sku, batchref):
20-
r.hset(orderid, sku, batchref)
21-
22-
23-
def get_readmodel(orderid):
24-
return r.hgetall(orderid)

src/allocation/entrypoints/flask_app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ def allocate_endpoint():
4040

4141
@app.route("/allocations/<orderid>", methods=['GET'])
4242
def allocations_view_endpoint(orderid):
43-
result = views.allocations(orderid)
43+
uow = unit_of_work.SqlAlchemyUnitOfWork()
44+
result = views.allocations(orderid, uow)
4445
if not result:
4546
return 'not found', 404
4647
return jsonify(result), 200

src/allocation/service_layer/handlers.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,24 @@ def publish_allocated_event(
7272
redis_eventpublisher.publish('line_allocated', event)
7373

7474

75-
def add_allocation_to_read_model(event: events.Allocated, _):
76-
redis_eventpublisher.update_readmodel(event.orderid, event.sku, event.batchref)
75+
def add_allocation_to_read_model(
76+
event: events.Allocated, uow: unit_of_work.SqlAlchemyUnitOfWork,
77+
):
78+
with uow:
79+
uow.session.execute(
80+
'INSERT INTO allocations_view (orderid, sku, batchref)'
81+
' VALUES (:orderid, :sku, :batchref)',
82+
dict(orderid=event.orderid, sku=event.sku, batchref=event.batchref)
83+
)
84+
uow.commit()
7785

78-
def remove_allocation_from_read_model(event: events.Deallocated, _):
79-
redis_eventpublisher.update_readmodel(event.orderid, event.sku, None)
86+
def remove_allocation_from_read_model(
87+
event: events.Deallocated, uow: unit_of_work.SqlAlchemyUnitOfWork,
88+
):
89+
with uow:
90+
uow.session.execute(
91+
'DELETE FROM allocations_view '
92+
' WHERE orderid = :orderid AND sku = :sku',
93+
dict(orderid=event.orderid, sku=event.sku)
94+
)
95+
uow.commit()

src/allocation/views.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
from allocation.adapters import redis_eventpublisher
21
from allocation.service_layer import unit_of_work
32

4-
def allocations(orderid):
5-
batches = redis_eventpublisher.get_readmodel(orderid)
6-
return [
7-
{'batchref': b.decode(), 'sku': s.decode()}
8-
for s, b in batches.items()
9-
]
3+
def allocations(orderid: str, uow: unit_of_work.SqlAlchemyUnitOfWork):
4+
with uow:
5+
results = list(uow.session.execute(
6+
'SELECT sku, batchref FROM allocations_view WHERE orderid = :orderid',
7+
dict(orderid=orderid)
8+
))
9+
return [dict(r) for r in results]

tests/integration/test_views.py

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,8 @@
11
from datetime import date
2-
import pytest
3-
import redis
4-
from allocation import config, views
2+
from allocation import views
53
from allocation.domain import commands
64
from allocation.service_layer import messagebus, unit_of_work
75

8-
@pytest.fixture
9-
def cleanup_redis():
10-
r = redis.Redis(**config.get_redis_host_and_port())
11-
yield
12-
for k in r.keys():
13-
print('cleaning up redis key', k)
14-
r.delete(k)
15-
16-
pytestmark = pytest.mark.usefixtures('cleanup_redis')
17-
186

197
def test_allocations_view(sqlite_session_factory):
208
uow = unit_of_work.SqlAlchemyUnitOfWork(sqlite_session_factory)
@@ -27,7 +15,7 @@ def test_allocations_view(sqlite_session_factory):
2715
messagebus.handle(commands.Allocate('otherorder', 'sku1', 30), uow)
2816
messagebus.handle(commands.Allocate('otherorder', 'sku2', 10), uow)
2917

30-
assert views.allocations('order1') == [
18+
assert views.allocations('order1', uow) == [
3119
{'sku': 'sku1', 'batchref': 'sku1batch'},
3220
{'sku': 'sku2', 'batchref': 'sku2batch'},
3321
]
@@ -40,6 +28,6 @@ def test_deallocation(sqlite_session_factory):
4028
messagebus.handle(commands.Allocate('o1', 'sku1', 40), uow)
4129
messagebus.handle(commands.ChangeBatchQuantity('b1', 10), uow)
4230

43-
assert views.allocations('o1') == [
31+
assert views.allocations('o1', uow) == [
4432
{'sku': 'sku1', 'batchref': 'b2'},
4533
]

0 commit comments

Comments
 (0)