package Ġcom . oct o . wo api . kat apis pr ing boot kotlin . infrastructure . product . persistence Ċ Ċ import Ġcom . oct o . wo api . kat apis pr ing boot kotlin . domain . product . Product Ċ import Ġcom . oct o . wo api . kat apis pr ing boot kotlin . domain . product . Product Service Ċ import Ġcom . oct o . wo api . kat apis pr ing boot kotlin . domain . product . Product Sort Attributes Ċ import Ġcom . oct o . wo api . kat apis pr ing boot kotlin . infrastructure . product . exception . Product NotFoundException Ċ import Ġorg . springframework . dao . Empty Result Data AccessException Ċ import Ġorg . springframework . data . domain . Page Request Ċ import Ġorg . springframework . data . domain . Sort Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ class ĠProduct DB ServiceImpl ( val Ġproduct DB Repository : ĠProduct DB Repository ) Ġ: ĠProduct Service Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠgetAll Products (): ĠList < Product > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproduct DB Repository . findAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġproduct DB Ġ-> Ġproduct DB . to Product () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Product ById ( id : ĠLong ): ĠProduct Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproduct DB Repository . findById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠProduct NotFoundException ( id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Product () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Product ( product : ĠProduct ): ĠProduct Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct DB Ġ= ĠProduct DB ( name Ġ= Ġproduct . name , Ġprice Ġ= Ġproduct . price , Ġweight Ġ= Ġproduct . weight ) ĊĠĠĠĠĠĠĠ Ġproduct DB Repository . save ( product DB ) ĊĠĠĠĠĠĠĠ Ġreturn Ġproduct DB . to Product () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Product ( id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct DB Repository . delete ById ( id ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠEmpty Result Data AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠProduct NotFoundException ( id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Sorted And Pag inated Products ( ĊĠĠĠĠĠĠĠ Ġsort Field : ĠProduct Sort Attributes , ĊĠĠĠĠĠĠĠ Ġpage : ĠInt , ĊĠĠĠĠĠĠĠ Ġper Page : ĠInt ĊĠĠĠ Ġ): ĠList < Product > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Request Ġ= ĠPage Request . of ( page , Ġper Page , ĠSort . by ( sort Field . attribute LowerCase )) ĊĠĠĠĠĠĠĠ Ġreturn Ġproduct DB Repository . findAll ( page Request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġproduct DB Ġ-> Ġproduct DB . to Product () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} Ċ }