package Ġcom . dm all cott . aud itor . data Ċ Ċ import Ġcom . dm all cott . aud itor . codec . Log Codec Ċ import Ġcom . dm all cott . aud itor . model . Audit Log Ċ import Ġcom . dm all cott . aud itor . model . Audit ing Result Ċ import Ġcom . dm all cott . aud itor . model . Log Id Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . mongodb . Mongo Client Settings Ċ import Ġcom . mongodb . Mongo Exception Ċ import Ġcom . mongodb . client . Mongo Database Ċ import Ġcom . mongodb . client . model . Filters . eq Ċ import Ġorg . bson . code cs . configuration . Codec Regist ries Ċ Ċ internal Ġclass ĠRepository ( mongo Database : ĠMongo Database ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmapper Ġ= Ġj ack son ObjectMapper () ĊĠĠĠ Ġprivate Ġval Ġdatabase Ġ= Ġmongo Database . with Codec Registry ( Codec Regist ries . from Regist ries ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMongo Client Settings . getDefault Codec Registry (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCodec Regist ries . from Code cs ( Log Codec ( mapper , ĠMongo Client Settings . getDefault Codec Registry ()))) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID Ġ= Ġ"_ id " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġfind ( log Id : ĠLog Id , Ġclazz : ĠClass < T >): ĠAudit Log ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclazz . get Collection (). find ( eq ( ID , Ġlog Id . id ())). first () Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġcreate ( log : ĠAudit Log , Ġclazz : ĠClass < T >): ĠAudit ing Result Ġ= Ġperform Operation Ġ{ ĊĠĠĠĠĠĠĠ Ġclazz . get Collection (). insert One ( log ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġupdate ( new Log : ĠAudit Log , Ġclazz : ĠClass < T >): ĠAudit ing Result Ġ= Ġperform Operation Ġ{ ĊĠĠĠĠĠĠĠ Ġclazz . get Collection (). replace One ( eq ( ID , Ġnew Log . log Id ), Ġnew Log ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġdelete ( log Id : ĠLog Id , Ġclazz : ĠClass < T >): ĠAudit ing Result Ġ= Ġperform Operation Ġ{ ĊĠĠĠĠĠĠĠ Ġclazz . get Collection (). delete One ( eq ( ID , Ġlog Id . id ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > ĠClass < T >. get Collection () Ġ= Ġdatabase . get Collection ( this . simple Name , ĠAudit Log :: class . java ) ĊĊĠĠĠ Ġprivate Ġfun Ġperform Operation ( operation : Ġ() Ġ-> ĠUnit ): ĠAudit ing Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudit ing Result . Success ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠMongo Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudit ing Result . Error ( e . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }