package Ġspace . yar os lav . family bot . repos Ċ Ċ import Ġio . micro meter . core . annotation . Timed Ċ import Ġorg . springframework . jdbc . core . Jdbc Template Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġspace . yar os lav . family bot . common . extensions . to Ask World Question Ċ import Ġspace . yar os lav . family bot . models . ask world . Ask World Question Ċ import Ġspace . yar os lav . family bot . models . ask world . Ask World Reply Ċ import Ġspace . yar os lav . family bot . models . telegram . Chat Ċ import Ġspace . yar os lav . family bot . models . telegram . User Ċ import Ġspace . yar os lav . family bot . telegram . Family Bot Ċ import Ġjava . sql . Timestamp Ċ import Ġjava . time . Instant Ċ Ċ @ Component Ċ class ĠAsk World Repository ( val Ġtemplate : ĠJdbc Template ) Ġ{ ĊĊĠĠĠ Ġ@ Timed (" repository . Ask World Repository . find Question By MessageId ") ĊĠĠĠ Ġfun Ġfind Question By MessageId ( message Id : ĠLong , Ġchat Id : ĠLong ): ĠAsk World Question ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" SELECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . question , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . chat _ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . user _ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc 2 . name Ġas Ġchat _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . name Ġas Ġcommon _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . username ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġask _ world _ questions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN Ġch ats Ġc 2 Ġon Ġask _ world _ questions . chat _ id Ġ= Ġc 2 . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN Ġusers Ġu Ġon Ġask _ world _ questions . user _ id Ġ= Ġu . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġask _ world _ questions . id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( SELECT Ġask _ world _ questions _ delivery . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġask _ world _ questions _ delivery Ġwhere Ġmessage _ id Ġ= Ġ? Ġand Ġchat _ id Ġ= Ġ? ) """, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġrs , Ġ_ Ġ-> Ġrs . to Ask World Question () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat Id ĊĠĠĠĠĠĠĠ Ġ). first OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Timed (" repository . Ask World Repository . find Question By Text ") ĊĠĠĠ Ġfun Ġfind Question By Text ( message : ĠString , Ġdate : ĠInstant ): ĠList < Ask World Question > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" SELECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . question , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . chat _ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . user _ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc 2 . name Ġas Ġchat _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . name Ġas Ġcommon _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . username ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġask _ world _ questions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN Ġch ats Ġc 2 Ġon Ġask _ world _ questions . chat _ id Ġ= Ġc 2 . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN Ġusers Ġu Ġon Ġask _ world _ questions . user _ id Ġ= Ġu . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġdate Ġ>= Ġ? Ġand Ġquestion Ġ= Ġ? """, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġrs , Ġ_ Ġ-> Ġrs . to Ask World Question () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimestamp . from ( date ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Timed (" repository . Ask World Repository . search Question ") ĊĠĠĠ Ġfun Ġsearch Question ( message : ĠString , Ġchat : ĠChat ): ĠList < Ask World Question > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" SELECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . question , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . chat _ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . user _ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc 2 . name Ġas Ġchat _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . name Ġas Ġcommon _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . username ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġask _ world _ questions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN Ġch ats Ġc 2 Ġon Ġask _ world _ questions . chat _ id Ġ= Ġc 2 . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN Ġusers Ġu Ġon Ġask _ world _ questions . user _ id Ġ= Ġu . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġchat _ id Ġ= Ġ? Ġand Ġlower ( question ) Ġlike Ġ? """, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġrs , Ġ_ Ġ-> Ġrs . to Ask World Question () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% ${ message . lowercase ()} %" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Timed (" repository . Ask World Repository . add Question Deliver ") ĊĠĠĠ Ġfun Ġadd Question Deliver ( question : ĠAsk World Question , Ġchat : ĠChat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtemplate . update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" INSERT ĠINTO Ġask _ world _ questions _ delivery Ġ( id , Ġchat _ id , Ġmessage _ id ) ĠVALUES Ġ( ?, Ġ?, Ġ? )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestion . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestion . message Id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Timed (" repository . Ask World Repository . add Question ") ĊĠĠĠ Ġfun Ġadd Question ( question : ĠAsk World Question ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . query For Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" INSERT Ġinto Ġask _ world _ questions Ġ( question , Ġchat _ id , Ġuser _ id , Ġdate ) ĠVALUES Ġ( ?, Ġ?, Ġ?, Ġ? ) Ġreturning Ġid ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġrs , Ġ_ Ġ-> Ġrs . getLong (" id ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestion . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestion . chat . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestion . user . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimestamp . from ( question . date ) ĊĠĠĠĠĠĠĠ Ġ) Ġ?: Ġthrow ĠFamily Bot . Internal Exception (" Something Ġhas Ġgone Ġwrong , Ġinvestigate Ġplease ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Timed (" repository . Ask World Repository . get Questions From Date ") ĊĠĠĠ Ġfun Ġget Questions From Date ( ĊĠĠĠĠĠĠĠ Ġdate : ĠInstant ĊĠĠĠ Ġ): ĠList < Ask World Question > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" SELECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . question , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . chat _ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . user _ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask _ world _ questions . date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc 2 . name Ġas Ġchat _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . name Ġas Ġcommon _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . username ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġask _ world _ questions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN Ġch ats Ġc 2 Ġon Ġask _ world _ questions . chat _ id Ġ= Ġc 2 . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN Ġusers Ġu Ġon Ġask _ world _ questions . user _ id Ġ= Ġu . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġdate Ġ>= Ġ? """, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġrs , Ġ_ Ġ-> Ġrs . to Ask World Question () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimestamp . from ( date ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Timed (" repository . Ask World Repository . add Reply ") ĊĠĠĠ Ġfun Ġadd Reply ( reply : ĠAsk World Reply ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . query For Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" INSERT Ġinto Ġask _ world _ replies Ġ( question _ id , Ġreply , Ġchat _ id , Ġuser _ id , Ġdate ) ĠVALUES Ġ( ?, Ġ?, Ġ?, Ġ?, Ġ? ) Ġreturning Ġid ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġrs , Ġ_ Ġ-> Ġrs . getLong (" id ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreply . question Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreply . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreply . chat . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreply . user . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimestamp . from ( reply . date ) ĊĠĠĠĠĠĠĠ Ġ) Ġ?: Ġthrow ĠFamily Bot . Internal Exception (" Something Ġhas Ġgone Ġwrong , Ġinvestigate Ġplease ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Timed (" repository . Ask World Repository . is Rep lied ") ĊĠĠĠ Ġfun Ġis Rep lied ( ĊĠĠĠĠĠĠĠ Ġask World Question : ĠAsk World Question , ĊĠĠĠĠĠĠĠ Ġchat : ĠChat , ĊĠĠĠĠĠĠĠ Ġuser : ĠUser ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . query For List ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ 1 ĠFROM Ġask _ world _ replies ĠWHERE Ġquestion _ id Ġ= Ġ? ĠAND Ġchat _ id Ġ= Ġ? ĠAND Ġuser _ id Ġ= ?", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġask World Question . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotEmpty () ĊĠĠĠ Ġ} Ċ } Ċ