Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 19b7304

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 5b0cc20 commit 19b7304

File tree

5 files changed

+40
-37
lines changed

5 files changed

+40
-37
lines changed

src/allocation/adapters/redis_eventpublisher.py

-8
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

+2-1
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

+26-4
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,31 @@ def publish_allocated_event(
8080
redis_eventpublisher.publish("line_allocated", event)
8181

8282

83-
def add_allocation_to_read_model(event: events.Allocated, _):
84-
redis_eventpublisher.update_readmodel(event.orderid, event.sku, event.batchref)
83+
def add_allocation_to_read_model(
84+
event: events.Allocated,
85+
uow: unit_of_work.SqlAlchemyUnitOfWork,
86+
):
87+
with uow:
88+
uow.session.execute(
89+
"""
90+
INSERT INTO allocations_view (orderid, sku, batchref)
91+
VALUES (:orderid, :sku, :batchref)
92+
""",
93+
dict(orderid=event.orderid, sku=event.sku, batchref=event.batchref),
94+
)
95+
uow.commit()
8596

8697

87-
def remove_allocation_from_read_model(event: events.Deallocated, _):
88-
redis_eventpublisher.update_readmodel(event.orderid, event.sku, None)
98+
def remove_allocation_from_read_model(
99+
event: events.Deallocated,
100+
uow: unit_of_work.SqlAlchemyUnitOfWork,
101+
):
102+
with uow:
103+
uow.session.execute(
104+
"""
105+
DELETE FROM allocations_view
106+
WHERE orderid = :orderid AND sku = :sku
107+
""",
108+
dict(orderid=event.orderid, sku=event.sku),
109+
)
110+
uow.commit()

src/allocation/views.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
from allocation.adapters import redis_eventpublisher
21
from allocation.service_layer import unit_of_work
32

43

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

tests/integration/test_views.py

+3-17
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,11 @@
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

86
today = date.today()
97

108

11-
@pytest.fixture
12-
def cleanup_redis():
13-
r = redis.Redis(**config.get_redis_host_and_port())
14-
yield
15-
for k in r.keys():
16-
print("cleaning up redis key", k)
17-
r.delete(k)
18-
19-
20-
pytestmark = pytest.mark.usefixtures("cleanup_redis")
21-
22-
239
def test_allocations_view(sqlite_session_factory):
2410
uow = unit_of_work.SqlAlchemyUnitOfWork(sqlite_session_factory)
2511
messagebus.handle(commands.CreateBatch("sku1batch", "sku1", 50, None), uow)
@@ -31,7 +17,7 @@ def test_allocations_view(sqlite_session_factory):
3117
messagebus.handle(commands.Allocate("otherorder", "sku1", 30), uow)
3218
messagebus.handle(commands.Allocate("otherorder", "sku2", 10), uow)
3319

34-
assert views.allocations("order1") == [
20+
assert views.allocations("order1", uow) == [
3521
{"sku": "sku1", "batchref": "sku1batch"},
3622
{"sku": "sku2", "batchref": "sku2batch"},
3723
]
@@ -44,6 +30,6 @@ def test_deallocation(sqlite_session_factory):
4430
messagebus.handle(commands.Allocate("o1", "sku1", 40), uow)
4531
messagebus.handle(commands.ChangeBatchQuantity("b1", 10), uow)
4632

47-
assert views.allocations("o1") == [
33+
assert views.allocations("o1", uow) == [
4834
{"sku": "sku1", "batchref": "b2"},
4935
]

0 commit comments

Comments
 (0)