package Ġde . al x gr k . persistence Ċ Ċ import Ġde . al x gr k . input . Sources Ċ import Ġorg . jetbrains . ex posed . sql .* Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġpush . Keys Ċ import Ġpush . Push Subscription Ċ Ċ class ĠPush Subscription Repo Ġ{ ĊĊĠĠĠ Ġfun Ġcreate ( subscription : ĠPush Subscription , Ġcoordinate : ĠS ources . Coordinate , Ġmax Radius Km : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPush Subscription Table . insert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . endpoint ] Ġ= Ġsubscription . endpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . auth ] Ġ= Ġsubscription . keys . auth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . key ] Ġ= Ġsubscription . keys . p 2 5 6 dh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . latitude ] Ġ= Ġcoordinate . latitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . longitude ] Ġ= Ġcoordinate . longitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . max Radius Km ] Ġ= Ġmax Radius Km . to BigDecimal () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Matching ( new Fire Coord : ĠS ources . Coordinate ): ĠList < Push Subscription > Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠ ĠPush Subscription Table . selectAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlat Ġ= Ġit [ Push Subscription Table . latitude ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlon Ġ= Ġit [ Push Subscription Table . longitude ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS ources . Coordinate ( lat , Ġlon ). ha vers in Distance ( new Fire Coord ) Ġ< Ġit [ Push Subscription Table . max Radius Km ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPush Subscription ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Push Subscription Table . endpoint ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys ( it [ Push Subscription Table . auth ], Ġit [ Push Subscription Table . key ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( subscription : ĠPush Subscription ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPush Subscription Table . delete Where Ġ{ Ġequal ( subscription ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcount (): ĠLong Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠ ĠPush Subscription Table . slice ( Push Subscription Table . id . count Distinct ()). selectAll (). count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSql Expression Builder . equal ( push Subscription : ĠPush Subscription ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( Push Subscription Table . endpoint Ġeq Ġpush Subscription . endpoint ) Ġand Ġ( Push Subscription Table . auth Ġeq Ġpush Subscription . keys . auth ) Ġand Ġ( Push Subscription Table . key Ġeq Ġpush Subscription . keys . p 2 5 6 dh ) Ċ } Ċ