package Ġcom . rar ible . core . reduce . service . model Ċ Ċ import Ġorg . bson . types . ObjectId Ċ import Ġorg . springframework . data . annotation . Id Ċ import Ġorg . springframework . data . mongodb . core . mapping . Document Ċ import Ġjava . math . BigInteger Ċ import Ġjava . util .* Ċ Ċ enum Ġclass ĠEventType Ġ{ ĊĠĠĠ ĠIN CO ME _ TRANSFER , ĊĠĠĠ ĠOUT CO ME _ TRANSFER Ċ } Ċ Ċ @ Document ( collection Ġ= Ġ" account _ balance _ event ") Ċ sealed Ġclass ĠAccount Balance Event ( ĊĠĠĠ Ġvar Ġtype : ĠEventType Ċ ) Ġ{ ĊĠĠĠ Ġabstract Ġval Ġid : ĠObjectId ĊĠĠĠ Ġabstract Ġval Ġblock Number : ĠLong ĊĠĠĠ Ġabstract Ġval Ġbank : ĠAddress ĊĠĠĠ Ġabstract Ġval Ġowner : ĠAddress ĊĠĠĠ Ġabstract Ġval Ġvalue : ĠBigInteger ĊĠĠĠ Ġabstract Ġval Ġdate : ĠDate Ċ } Ċ Ċ data Ġclass ĠAccount Income Transfer ( ĊĠĠĠ Ġoverride Ġval Ġblock Number : ĠLong , ĊĠĠĠ Ġoverride Ġval Ġowner : ĠAddress , ĊĠĠĠ Ġoverride Ġval Ġvalue : ĠBigInteger , ĊĠĠĠ Ġoverride Ġval Ġbank : ĠAddress , ĊĠĠĠ Ġoverride Ġval Ġdate : ĠDate , ĊĠĠĠ Ġ@ Id ĊĠĠĠ Ġoverride Ġval Ġid : ĠObjectId Ġ= ĠObjectId () Ċ ) Ġ: ĠAccount Balance Event ( ĊĠĠĠ Ġtype Ġ= ĠEventType . IN CO ME _ TRANSFER Ċ ) Ċ Ċ data Ġclass ĠAccount Outcome Transfer ( ĊĠĠĠ Ġoverride Ġval Ġblock Number : ĠLong , ĊĠĠĠ Ġoverride Ġval Ġowner : ĠAddress , ĊĠĠĠ Ġoverride Ġval Ġvalue : ĠBigInteger , ĊĠĠĠ Ġoverride Ġval Ġbank : ĠAddress , ĊĠĠĠ Ġoverride Ġval Ġdate : ĠDate , ĊĠĠĠ Ġ@ Id ĊĠĠĠ Ġoverride Ġval Ġid : ĠObjectId Ġ= ĠObjectId () Ċ ) Ġ: ĠAccount Balance Event ( ĊĠĠĠ Ġtype Ġ= ĠEventType . OUT CO ME _ TRANSFER Ċ )