package Ġme . and rew da . handlers Ċ Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . auth . authenticate Ċ import Ġio . ktor . request . receive OrNull Ċ import Ġio . ktor . routing .* Ċ import Ġio . netty . handler . codec . http . HttpResponse Status Ċ import Ġme . and rew da . authentication . Auth Level Ċ import Ġme . and rew da . controllers . Item Controller Ċ import Ġme . and rew da . models . New Item Ċ import Ġme . and rew da . utils .* Ċ Ċ fun ĠRoute . item () Ġ{ ĊĠĠĠ Ġroute ("/ items ") Ġ{ ĊĠĠĠĠĠĠĠ Ġget Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠItem Controller . findAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( items . map Ġ{ Ġit . get ApiResponse () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ { id }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcall . parameters [" id "] ?. toInt OrNull () Ġ?: Ġthrow ĠNotFound () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠItem Controller . findById ( id ) Ġ?: Ġthrow ĠNotFound () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( item . get ApiResponse ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġauthenticate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . ensure Auth Level ( Auth Level . ADMIN ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= Ġcall . receive OrNull < New Item >() Ġ?: Ġthrow ĠMissing Fields () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Item . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠItem Controller . create ( new Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( user . get ApiResponse ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMissing Fields () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatch ("/ { id }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . ensure Auth Level ( Auth Level . ADMIN ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ( call . parameters [" id "] Ġ?: Ġ""). toInt OrNull () Ġ?: Ġthrow ĠNotFound () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= Ġcall . receive OrNull < New Item >() Ġ?: Ġthrow ĠMissing Fields () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠItem Controller . patch ( id , Ġnew Item ) Ġ?: Ġthrow ĠNotFound () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( item . get ApiResponse ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete ("/ { id }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . ensure Auth Level ( Auth Level . ADMIN ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ( call . parameters [" id "] Ġ?: Ġ""). toInt OrNull () Ġ?: Ġthrow ĠNotFound () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Item Controller . delete ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpResponse Status . OK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNotFound () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ