blog.bouzuya.net

2022-09-24 ABC270 に参加した / twiq 実装メモ (4)

ABC270 に参加した。 1161 → 1181 (+20) 。 D も F もうまくやれば解けそうな気がした……。 E が解けたのは良かった。解けなかったらかなり落ちたはず。

https://atcoder.jp/users/bouzuya/history/share/abc270


bouzuya/rust-sandbox twiq 実装メモ (4)

作業のスタックの把握。

  • user を解決するところまで動作させたい
  • repository などの実装が提供されていない
  • EventStore trait を実装したい
  • FirestoreEventStore は一意性検査などで時間がかかってしまう
  • InMemoryEventStore を使う InMemoryUserRepository をつくりたい
  • User::from_event_stream をつくりたい
  • RawEvent (event_store_core::Event) から Eventtype が原因でうまくとりだせない

Event, EventType, EventStream, EventStreamType の ERD 。

erDiagram
  Event
  EventType
  EventStream
  EventStreamType

  Event }o--|| EventType : ""
  Event }|--|| EventStream : ""
  Event }o--|| EventStreamType : "(via EventType)"
  EventType }|--|| EventStream : "(via Event)"
  EventType }|--|| EventStreamType : ""
  EventStream }o--|| EventStreamType : ""
  • impl TryFrom<RawEvent> for Event をつくっていく
  • 各 aggregate event に type を追加する
  • impl TryFrom<RawEvent> for domain::aggregate::x::Event をつくる
  • domain event と aggregate event の重複が多いので RawEvent への変換をひとまず domain event のみにして domain event と aggregate event 間の変換を設ける

今日のコミット。