package Ġorg . got son . kom ga . infrastructure . jooq Ċ Ċ import Ġorg . got son . kom ga . domain . model . Book Page Ċ import Ġorg . got son . kom ga . domain . model . Media Ċ import Ġorg . got son . kom ga . domain . persistence . Media Repository Ċ import Ġorg . got son . kom ga . jooq . Tables Ċ import Ġorg . got son . kom ga . jooq . tables . records . Media Page Record Ċ import Ġorg . got son . kom ga . jooq . tables . records . Media Record Ċ import Ġorg . jooq . DSL Context Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . time . LocalDateTime Ċ Ċ @ Component Ċ class ĠMedia Dao ( ĊĠ Ġprivate Ġval Ġd sl : ĠDSL Context Ċ ) Ġ: ĠMedia Repository Ġ{ ĊĊĠ Ġprivate Ġval Ġm Ġ= ĠTables . MEDIA ĊĠ Ġprivate Ġval Ġp Ġ= ĠTables . MEDIA _ PAGE ĊĠ Ġprivate Ġval Ġf Ġ= ĠTables . MEDIA _ FILE ĊĊĠ Ġprivate Ġval Ġgroup Fields Ġ= ĠarrayOf (* m . fields (), Ġ* p . fields ()) ĊĊĠ Ġoverride Ġfun Ġfind ById ( book Id : ĠLong ): ĠMedia Ġ= ĊĠĠĠ Ġd sl . select (* group Fields ) ĊĠĠĠĠĠ Ġ. from ( m ) ĊĠĠĠĠĠ Ġ. leftJoin ( p ). on ( m . BOOK _ ID . eq ( p . BOOK _ ID )) ĊĠĠĠĠĠ Ġ. where ( m . BOOK _ ID . eq ( book Id )) ĊĠĠĠĠĠ Ġ. groupBy (* group Fields ) ĊĠĠĠĠĠ Ġ. orderBy ( p . NUMBER . asc ()) ĊĠĠĠĠĠ Ġ. fetch Groups ( ĊĠĠĠĠĠĠĠ Ġ{ Ġit . into ( m ) Ġ}, Ġ{ Ġit . into ( p ) Ġ} ĊĠĠĠĠĠ Ġ). map Ġ{ Ġ( mr , Ġpr ) Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġd sl . select From ( f ) ĊĠĠĠĠĠĠĠĠĠ Ġ. where ( f . BOOK _ ID . eq ( book Id )) ĊĠĠĠĠĠĠĠĠĠ Ġ. fetch Into ( f ) ĊĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . fileName Ġ} ĊĊĠĠĠĠĠĠĠ Ġmr . to Domain ( pr . filter Not Ġ{ Ġit . book Id Ġ== Ġnull Ġ}. map Ġ{ Ġit . to Domain () Ġ}, Ġfiles ) ĊĠĠĠĠĠ Ġ}. first () ĊĊĊĠ Ġoverride Ġfun Ġget Thumbnail ( book Id : ĠLong ): ĠByteArray ? Ġ= ĊĠĠĠ Ġd sl . select ( m . TH UMB NA IL ) ĊĠĠĠĠĠ Ġ. from ( m ) ĊĠĠĠĠĠ Ġ. where ( m . BOOK _ ID . eq ( book Id )) ĊĠĠĠĠĠ Ġ. fetch One ( 0 , ĠByteArray :: class . java ) ĊĊĊĠ Ġoverride Ġfun Ġinsert ( media : ĠMedia ): ĠMedia Ġ{ ĊĠĠĠ Ġd sl . transaction Ġ{ Ġconfig Ġ-> ĊĠĠĠĠĠ Ġwith ( config . dsl ()) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġinsert Into ( m ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . BOOK _ ID , Ġmedia . book Id ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . STATUS , Ġmedia . status . toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . MEDIA _ TYPE , Ġmedia . media Type ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . TH UMB NA IL , Ġmedia . thumbnail ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . COMMENT , Ġmedia . comment ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . PAGE _ COUNT , Ġmedia . pages . size . to Long ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĊĠĠĠĠĠĠĠ Ġinsert Pages ( this , Ġmedia ) ĊĠĠĠĠĠĠĠ Ġinsert Files ( this , Ġmedia ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġfind ById ( media . book Id ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinsert Pages ( dsl : ĠDSL Context , Ġmedia : ĠMedia ) Ġ{ ĊĠĠĠ Ġmedia . pages . forEach Indexed Ġ{ Ġindex , Ġpage Ġ-> ĊĠĠĠĠĠ Ġd sl . insert Into ( p ) ĊĠĠĠĠĠĠĠ Ġ. set ( p . BOOK _ ID , Ġmedia . book Id ) ĊĠĠĠĠĠĠĠ Ġ. set ( p . FILE _ NAME , Ġpage . fileName ) ĊĠĠĠĠĠĠĠ Ġ. set ( p . MEDIA _ TYPE , Ġpage . media Type ) ĊĠĠĠĠĠĠĠ Ġ. set ( p . NUMBER , Ġindex ) ĊĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinsert Files ( dsl : ĠDSL Context , Ġmedia : ĠMedia ) Ġ{ ĊĠĠĠ Ġmedia . files . forEach Ġ{ ĊĠĠĠĠĠ Ġd sl . insert Into ( f ) ĊĠĠĠĠĠĠĠ Ġ. set ( f . BOOK _ ID , Ġmedia . book Id ) ĊĠĠĠĠĠĠĠ Ġ. set ( f . FILE _ NAME , Ġit ) ĊĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġupdate ( media : ĠMedia ) Ġ{ ĊĠĠĠ Ġd sl . transaction Ġ{ Ġconfig Ġ-> ĊĠĠĠĠĠ Ġwith ( config . dsl ()) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate ( m ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . STATUS , Ġmedia . status . toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . MEDIA _ TYPE , Ġmedia . media Type ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . TH UMB NA IL , Ġmedia . thumbnail ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . COMMENT , Ġmedia . comment ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . PAGE _ COUNT , Ġmedia . pages . size . to Long ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. set ( m . LAST _ MODI FIED _ DATE , ĠLocalDateTime . now ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. where ( m . BOOK _ ID . eq ( media . book Id )) ĊĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĊĠĠĠĠĠĠĠ Ġdelete From ( p ) ĊĠĠĠĠĠĠĠĠĠ Ġ. where ( p . BOOK _ ID . eq ( media . book Id )) ĊĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĊĠĠĠĠĠĠĠ Ġdelete From ( f ) ĊĠĠĠĠĠĠĠĠĠ Ġ. where ( f . BOOK _ ID . eq ( media . book Id )) ĊĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĊĠĠĠĠĠĠĠ Ġinsert Pages ( this , Ġmedia ) ĊĠĠĠĠĠĠĠ Ġinsert Files ( this , Ġmedia ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdelete ( book Id : ĠLong ) Ġ{ ĊĠĠĠ Ġd sl . transaction Ġ{ Ġconfig Ġ-> ĊĠĠĠĠĠ Ġwith ( config . dsl ()) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete From ( p ). where ( p . BOOK _ ID . eq ( book Id )). execute () ĊĠĠĠĠĠĠĠ Ġdelete From ( f ). where ( f . BOOK _ ID . eq ( book Id )). execute () ĊĠĠĠĠĠĠĠ Ġdelete From ( m ). where ( m . BOOK _ ID . eq ( book Id )). execute () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠMedia Record . to Domain ( pages : ĠList < Book Page >, Ġfiles : ĠList < String >) Ġ= ĊĠĠĠ ĠMedia ( ĊĠĠĠĠĠ Ġstatus Ġ= ĠMedia . Status . valueOf ( status ), ĊĠĠĠĠĠ Ġmedia Type Ġ= Ġmedia Type , ĊĠĠĠĠĠ Ġthumbnail Ġ= Ġthumbnail , ĊĠĠĠĠĠ Ġpages Ġ= Ġpages , ĊĠĠĠĠĠ Ġfiles Ġ= Ġfiles , ĊĠĠĠĠĠ Ġcomment Ġ= Ġcomment , ĊĠĠĠĠĠ Ġbook Id Ġ= Ġbook Id , ĊĠĠĠĠĠ Ġcreated Date Ġ= Ġcreated Date , ĊĠĠĠĠĠ Ġlast ModifiedDate Ġ= Ġlast ModifiedDate ĊĠĠĠ Ġ) ĊĊĠ Ġprivate Ġfun ĠMedia Page Record . to Domain () Ġ= ĊĠĠĠ ĠBook Page ( ĊĠĠĠĠĠ ĠfileName Ġ= ĠfileName , ĊĠĠĠĠĠ Ġmedia Type Ġ= Ġmedia Type ĊĠĠĠ Ġ) Ċ } Ċ