package Ġorg . m ga id am ak . dao . seat Ċ Ċ import Ġorg . m ga id am ak . dao . Page Ċ import Ġorg . m ga id am ak . dao . Seat Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġkotlin . streams . toList Ċ Ċ /** Ċ Ġ* ĠNot Ġthread - safe Ġrepository Ġfor ĠHall Ġapplication . Ċ Ġ*/ Ċ class ĠFile Seat Repo : ĠI Seat Repo Ġ{ ĊĊĠĠĠ Ġval Ġnext Ġ= ĠAtomicInteger () ĊĠĠĠ Ġval Ġmap Ġ= ĠHashMap < Int , ĠSe at >() ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Seat ( seat : ĠSe at ): ĠSe at ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( map . values . stream (). any Match Ġ{ Ġs Ġ-> Ġs . x Ġ== Ġseat . x Ġ&& Ġs . y Ġ== Ġseat . y Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew One Ġ= Ġseat . copy ( id Ġ= Ġnext . increment AndGet ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ new One . id ] Ġ= Ġnew One ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew One ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Se ats ( hall : ĠInt , Ġpage : ĠPage ): ĠCollection < Seat > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . values . stream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġc Ġ-> Ġc . hall Ġ== Ġhall Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. skip ( page . offset . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. limit ( page . limit . to Long ()). toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Seat ById ( id : ĠInt ): ĠSe at ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap [ id ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Seat ById ( id : ĠInt ): ĠSe at ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . remove ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtotal (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . size ĊĠĠĠ Ġ} Ċ }