package Ġorg . six dou glas . git . build Ċ Ċ import Ġorg . six dou glas . git . module . IM odule Component Ċ import Ġorg . six dou glas . git . module . Module Ċ import Ġorg . springframework . r 2 dbc . core . Database Client Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġreactor . core . publisher . Flux Ċ import Ġreactor . core . publisher . Mono Ċ import Ġreactor . util . Logger Ċ import Ġreactor . util . Log gers Ċ import Ġjava . time . Offset DateTime Ċ Ċ @ Service Ċ internal Ġclass ĠBuild Component Ġinternal Ġconstructor ( internal Ġval Ġbuild Repository : ĠBuild Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġinternal Ġval Ġmodule Component : ĠI Module Component ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġinternal Ġval Ġclient : ĠDatabase Client ) Ġ: ĠI Build Component Ġ{ ĊĊĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĠLog gers . getLogger (" com . ade o . gest ach ats . git vis u . build ") ĊĊĠĠĠ Ġval Ġdeployment Servers Query Ġ= Ġ" select Ġe . name Ġenv _ name , Ġe . weight , Ġe . color , Ġs . name Ġserver _ name , Ġa . name Ġartifact _ name , Ġi . port , Ġi . profile , Ġmax ( d . deployment _ date ) Ġdeployment _ date Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġfrom Ġdeployment Ġd " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġleft Ġouter Ġjoin Ġinstallation Ġi Ġon Ġd . installation _ id Ġ= Ġi . id Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġleft Ġouter Ġjoin Ġartifact Ġa Ġon Ġa . id Ġ= Ġi . artifact _ id Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġleft Ġouter Ġjoin Ġserver Ġs Ġon Ġs . id Ġ= Ġi . server _ id Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġleft Ġouter Ġjoin Ġenvironment Ġe Ġon Ġe . id Ġ= Ġs . environment _ id Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwhere Ġd . build _ id Ġ= Ġ: build Id Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġgroup Ġby Ġe . name , Ġe . weight , Ġe . color , Ġs . name , Ġa . name , Ġi . port , Ġi . profile Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġorder Ġby Ġe . weight , Ġs . name , Ġa . name , Ġdeployment _ date " ĊĊĠĠĠ Ġoverride Ġfun Ġadd Build ( module Build : ĠModule Build ) Ġ: ĠMono < Build > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmodule Component . find Module By Code ( module Build . module Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. log ( logger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch If Empty ( Ġmodule Component . save ( Module ( null , Ġmodule Build . module Code , Ġmodule Build . module Code ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. log ( logger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġmodule Ġ-> Ġbuild Repository . find Build ByName And Module Id ( module Build . name , Ġmodule . id !! )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. log ( logger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch If Empty ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Component . find Module By Code ( module Build . module Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. log ( logger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap { Ġmodule Ġ-> Ġsave ( Build ( null , Ġmodule Build . name , Ġmodule Build . branch , Ġmodule Build . build Date , Ġmodule . id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. log ( logger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Build s () Ġ= Ġbuild Repository . findAll () ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Build ( id : ĠInt , Ġbuild : ĠBuild ): ĠMono < Build > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuild ToBe Saved Ġ= ĠBuild ( id , Ġbuild . name , Ġbuild . branch , Ġbuild . build Date , Ġbuild . module Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsave ( build ToBe Saved ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Build ( id : ĠInt ) Ġ= Ġbuild Repository . delete ById ( id ) ĊĠĠĠ Ġoverride Ġfun Ġfind Build sBy Module Id ( id : ĠInt ) Ġ= Ġbuild Repository . find Build sBy Module Id ( id ) ĊĠĠĠ Ġoverride Ġfun Ġfind Build ByName And Module Id ( build Name : ĠString , Ġmodule Id : ĠInt ) Ġ= Ġbuild Repository . find Build ByName And Module Id ( clean Build Name ( build Name ), Ġmodule Id ) ĊĠĠĠ Ġoverride Ġfun Ġsave ( build : ĠBuild ) Ġ= Ġbuild Repository . save ( clean Build ( build )) ĊĊĠĠĠ Ġfun Ġclean Build ( build : ĠBuild ): ĠBuild Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBuild ( build . id , Ġclean Build Name ( build . name ), Ġbuild . branch , Ġbuild . build Date , Ġbuild . module Id , Ġbuild . name . contains (" SNAPSHOT ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclean Build Name ( build Name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( build Name . endsWith ("- 1 ")){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Name . drop Last ( 2 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Build Deployments ( build Id : ĠInt ): ĠFlux < Environment > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclient ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sql ( deployment Servers Query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind (" build Id ", Ġbuild Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map { row Ġ-> ĠBuild Deployment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . get (" env _ name ") Ġas ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . get (" weight ") Ġas ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . get (" color ") Ġas ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . get (" server _ name ") Ġas ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . get (" artifact _ name ") Ġas ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . get (" port ") Ġas ? ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . get (" profile ") Ġas ? ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . get (" deployment _ date ") Ġas ? ĠOffset DateTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. all () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ ĠEnvironment ( it . env Name , Ġit . weight , Ġit . color , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap { Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment . groupBy Ġ{ ĠServer ( it . server Name , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġserver Group Ġ-> Ġserver Group . flatMap Ġ{ Ġserver Ġ-> ĠMono . just ( Artifact ( server . artifact Name , ĠDeployment ( server . port , Ġserver . profile , Ġserver . deployment Date ))) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġartifact List Ġ-> ĠServer ( server Group . key (). name , Ġartifact List ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġlist Ġ-> ĠEnvironment ( environment . key (). name , Ġenvironment . key (). weight , Ġenvironment . key (). color , Ġlist ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }