package Ġcz . mart info re jt . p isk v ork y . server . features . users . repository Ċ Ċ import Ġcz . mart info re jt . p isk v ork y . api . model . Friend Request Ċ import Ġcz . mart info re jt . p isk v ork y . domain . model . Friend ship Ċ import Ġcz . mart info re jt . p isk v ork y . domain . model . Public User Ċ import Ġcz . mart info re jt . p isk v ork y . domain . repository . Friends Repository Ċ import Ġcz . mart info re jt . p isk v ork y . domain . repository . Game Repository Ċ import Ġcz . mart info re jt . p isk v ork y . domain . repository . Users Repository Ċ import Ġcz . mart info re jt . p isk v ork y . server . core . database . schema . Friend ship Entity Ċ import Ġcz . mart info re jt . p isk v ork y . server . core . database . schema . Friend ship Id Ċ import Ġcz . mart info re jt . p isk v ork y . server . core . database . schema . Friend ships Ċ import Ġcz . mart info re jt . p isk v ork y . server . core . database . schema . User Entity Ċ import Ġcz . mart info re jt . p isk v ork y . server . features . users . mapper . as Friend ship DO Ċ import Ġcz . mart info re jt . p isk v ork y . server . features . users . mapper . as Public User Ċ import Ġcz . mart info re jt . p isk v ork y . server . features . users . mapper . to Friend Request Ċ import Ġorg . jetbrains . ex posed . sql .* Ċ import Ġorg . jetbrains . ex posed . sql . transactions . experimental . new Sus pended Transaction Ċ import Ġjava . time . LocalDateTime Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠMartin ĠFore jt Ġon Ġ 2 6 . 1 2 . 2 0 2 0 . Ċ Ġ* Ġme @ mart info re jt . cz Ċ Ġ* Ċ Ġ* Ġ@ author ĠMartin ĠFore jt Ċ Ġ*/ Ċ class ĠF riends Repository Impl ( ĊĠĠĠ Ġprivate Ġval Ġusers Repository : ĠUsers Repository , ĊĠĠĠ Ġprivate Ġval Ġgame Repository : ĠGame Repository Ċ ) Ġ: ĠF riends Repository Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete Friend ship ( userId 1 : ĠInt , ĠuserId 2 : ĠInt ): ĠUnit Ġ= Ġnew Sus pended Transaction Ġ{ ĊĠĠĠĠĠĠĠ ĠFriend ships . delete Where Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( Friend ships . user 1 Ġeq ĠuserId 1 ) Ġand Ġ( Friend ships . user 2 Ġeq ĠuserId 2 )) Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( Friend ships . user 1 Ġeq ĠuserId 2 ) Ġand Ġ( Friend ships . user 2 Ġeq ĠuserId 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate Friend ship ( userId 1 : ĠInt , ĠuserId 2 : ĠInt ): ĠUnit Ġ= Ġnew Sus pended Transaction Ġ{ ĊĠĠĠĠĠĠĠ ĠFriend ships . insert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ user 1 ] Ġ= ĠuserId 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ user 2 ] Ġ= ĠuserId 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ author ] Ġ= ĠuserId 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ created ] Ġ= ĠLocalDateTime . now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ pending ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ id ] Ġ= ĠFriend ship Id ( userId 1 , ĠuserId 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġconfirm Friend ship ( userId 1 : ĠInt , ĠuserId 2 : ĠInt ): ĠUnit Ġ= Ġnew Sus pended Transaction Ġ{ ĊĠĠĠĠĠĠĠ ĠFriend ships . update ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( Friend ships . user 1 Ġeq ĠuserId 1 ) Ġand Ġ( Friend ships . user 2 Ġeq ĠuserId 2 )) Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( Friend ships . user 1 Ġeq ĠuserId 2 ) Ġand Ġ( Friend ships . user 2 Ġeq ĠuserId 1 )) ĊĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ pending ] Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Friend ship ( userId 1 : ĠInt , ĠuserId 2 : ĠInt ): ĠFriend ship ? Ġ= Ġnew Sus pended Transaction Ġ{ ĊĠĠĠĠĠĠĠ ĠFriend ships . select Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( Friend ships . user 1 Ġeq ĠuserId 1 ) Ġand Ġ( Friend ships . user 2 Ġeq ĠuserId 2 )) Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( Friend ships . user 1 Ġeq ĠuserId 2 ) Ġand Ġ( Friend ships . user 2 Ġeq ĠuserId 1 )) ĊĠĠĠĠĠĠĠ Ġ}. map NotNull Ġ{ Ġit . as Friend ship DO () Ġ}. single OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Friends ( userId : ĠInt ): ĠList < Public User > Ġ= Ġnew Sus pended Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfriends Ġ= ĠUser Entity . findById ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . friends Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġfriends . map Ġ{ Ġentity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity . as Public User (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġonline Ġ= Ġusers Repository . is Online ( it . id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Game Ġ= Ġgame Repository . get Game ( it . id ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Requests ( userId : ĠInt ): ĠList < Friend Request > Ġ= Ġnew Sus pended Transaction Ġ{ ĊĠĠĠĠĠĠĠ ĠFriend ship Entity . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( Friend ships . user 1 Ġeq ĠuserId ) Ġor Ġ( Friend ships . user 2 Ġeq ĠuserId )) Ġand ĠFriend ships . pending . eq ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit . to Friend Request ( userId ) Ġ} ĊĠĠĠ Ġ} Ċ }