package Ġcom . github . fn une z kan ut . repository Ċ Ċ import Ġcom . github . fn une z kan ut . model . Course Ċ import Ġcom . github . fn une z kan ut . util . k String Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . springframework . beans . factory . annotation . Qualifier Ċ import Ġorg . springframework . jdbc . core . named param . Map Sql Parameter Source Ċ import Ġorg . springframework . jdbc . core . named param . Named Parameter Jdbc Template Ċ import Ġorg . springframework . stereotype . Repository Ċ import Ġjava . util .* Ċ Ċ @ Repository Ċ class ĠCour ses Postgres Repo ( ĊĠĠĠ Ġ@ Qualifier (" jdbc ") Ġprivate Ġval Ġjdbc : ĠNamed Parameter Jdbc Template Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĊĠĠĠ Ġ// create Ġnew Ġcourse Ġentry , Ġreturns Ġits Ġuuid , Ġnull Ġif Ġsomething Ġwent Ġwrong ĊĠĠĠ Ġfun Ġadd ( course : ĠCourse ): ĠCourse ? Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= ĠUUID . randomUUID () ĊĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ""" Ċ INSERT ĠINTO Ġcourses Ġ( ĊĠĠĠ Ġuid , ĊĠĠĠ Ġcode , ĊĠĠĠ Ġname Ċ ) ĠVALUES Ġ( ĊĠĠĠ Ġ: uid , ĊĠĠĠ Ġ: code , ĊĠĠĠ Ġ: name Ċ ); Ċ """. trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" code ", Ġcourse . code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" name ", Ġcourse . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" uid ", Ġuuid ) ĊĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjdbc . update ( sql , Ġparameters ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" failed Ġto Ġadd Ġcourse ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcourse . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuid Ġ= Ġuuid . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// lookup Ġa Ġsingle Ġentry Ġgiven Ġunique Ġcourse Ġcode ĊĠĠĠ Ġfun Ġfetch By Code ( code : ĠString ): ĠCourse ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ""" Ċ SELECT Ġuid , Ġcode , Ġname Ġ Ċ FROM Ġcourses Ġ Ċ WHERE Ġcourses . code Ġ= Ġ: code ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" code ", Ġcode ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġjdbc . query ( sql , Ġparameters ) Ġ{ Ġrs , Ġ_ Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// mapping Ġfrom Ġdb Ġrow Ġto Ġdto ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCourse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuid Ġ= Ġrs . k String (" uid "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġrs . k String (" code "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġrs . k String (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresults . first OrNull () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// lookup Ġa Ġsingle Ġentry Ġwith Ġprimary Ġkey ĊĠĠĠ Ġfun Ġfetch ( uid : ĠString ): ĠCourse ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ""" Ċ SELECT Ġuid , Ġcode , Ġname Ġ Ċ FROM Ġcourses Ġ Ċ WHERE Ġcourses . uid Ġ= Ġ: uid ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" uid ", ĠUUID . fromString ( uid )) ĊĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġjdbc . query ( sql , Ġparameters ) Ġ{ Ġrs , Ġ_ Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// mapping Ġfrom Ġdb Ġrow Ġto Ġdto ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCourse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuid Ġ= Ġrs . k String (" uid "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġrs . k String (" code "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġrs . k String (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresults . first OrNull () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// creates Ġa Ġcourse <> prof essor Ġrelation , Ġtrue Ġon Ġsuccess ĊĠĠĠ Ġfun Ġadd Prof essor Relation ( course Uid : ĠString , Ġprof essor Uid : ĠString ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ""" Ċ INSERT ĠINTO Ġcourses _ prof ess ors Ġ( ĊĠĠĠ Ġcourse _ uid , ĊĠĠĠ Ġprof essor _ uid Ċ ) ĠVALUES Ġ( ĊĠĠĠ Ġ: course _ uid , ĊĠĠĠ Ġ: prof essor _ uid Ċ ) ĠON ĠCON FLI CT ĠDO ĠNOT H ING ; Ċ """. trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" course _ uid ", ĠUUID . fromString ( course Uid )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" prof essor _ uid ", ĠUUID . fromString ( prof essor Uid )) ĊĊĠĠĠĠĠĠĠ Ġval Ġnum Rows Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjdbc . update ( sql , Ġparameters ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" failed Ġto Ġadd Ġcourse <> prof essor Ġrelation ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnum Rows Ġ== Ġ 1 Ġ// if Ġall Ġwent Ġwell Ġ 1 Ġrow Ġwas Ġadded ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// creates Ġa Ġcourse <> prof essor Ġrelation , Ġtrue Ġon Ġsuccess ĊĠĠĠ Ġfun Ġadd Student Relation ( course Uid : ĠString , Ġstudent Uid : ĠString ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ""" Ċ INSERT ĠINTO Ġcourses _ students Ġ( ĊĠĠĠ Ġcourse _ uid , ĊĠĠĠ Ġstudent _ uid Ċ ) ĠVALUES Ġ( ĊĠĠĠ Ġ: course _ uid , ĊĠĠĠ Ġ: student _ uid Ċ ) ĠON ĠCON FLI CT ĠDO ĠNOT H ING ; Ċ """. trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" course _ uid ", ĠUUID . fromString ( course Uid )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" student _ uid ", ĠUUID . fromString ( student Uid )) ĊĊĠĠĠĠĠĠĠ Ġval Ġnum Rows Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjdbc . update ( sql , Ġparameters ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" failed Ġto Ġadd Ġcourse <> prof essor Ġrelation ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnum Rows Ġ== Ġ 1 Ġ// if Ġall Ġwent Ġwell Ġ 1 Ġrow Ġwas Ġadded ĊĠĠĠ Ġ} Ċ }