package Ġcom . lar or r . todo _ app . controllers Ċ Ċ // ĠTODO Ġit 's Ġbetter Ġto Ġadd ĠServices Ġlayer Ġand Ġexception Ġhandler Ġfor Ġcontrollers Ċ Ċ import Ġcom . lar or r . todo _ app . entities . Task Ċ import Ġcom . lar or r . todo _ app . repositories . Task Repository Ċ import Ġcom . lar or r . todo _ app . repositories . Todo List Repository Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġorg . springframework . web . server . ResponseStatus Exception Ċ Ċ @ RestController Ċ @ Cross Origin Ċ @ RequestMapping ("/ tasks ") Ċ //@ Repository RestController Ċ class ĠTask Controller ( private Ġval Ġtask Repository : ĠTask Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtodo List Repository : ĠTodo List Repository ) Ġ{ ĊĊĠĠĠ Ġ@ GetMapping ("/ { taskId }") ĊĠĠĠ Ġfun Ġget Task ById (@ PathVariable ĠtaskId : ĠLong ): ĠTask ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtask Repository . findById ( taskId ). orElse Throw Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Status Exception ( HttpStatus . NOT _ FOUND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Task Ġwith Ġsuch Ġid Ġ${ taskId } Ġdoesn 't Ġexist ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ĊĠĠĠ Ġfun Ġget Tasks (@ RequestParam ( required Ġ= Ġfalse ) ĠuserId : ĠLong ?): ĠIterable < Task > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( userId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġtask Repository . findAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtask Repository . findAll By Todo List _ User _ UserId ( userId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ĊĠĠĠ Ġ@ ResponseStatus ( HttpStatus . CREATED ) ĊĠĠĠ Ġfun Ġcreate Task (@ RequestBody Ġtask : ĠTask ): ĠTask ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( task . list Id Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠResponse Status Exception ( HttpStatus . BAD _ REQUEST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\" list Id \" Ġof Ġtask Ġobject Ġmust Ġbe Ġpresent Ġin Ġthe Ġrequest ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtask . todo List Ġ= Ġtodo List Repository . findById ( task . list Id ). orElse Throw Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Status Exception ( HttpStatus . NOT _ FOUND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" List Ġwith Ġsuch Ġid Ġ${ task . list Id } Ġdoesn 't Ġexist ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtask Repository . save ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Put Mapping ("/ { taskId }") ĊĠĠĠ Ġfun Ġupdate Task (@ PathVariable ĠtaskId : ĠLong , Ġ@ RequestBody Ġtask : ĠTask ): ĠTask ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting Task Ġ= Ġtask Repository . findById ( taskId ). orElse Throw Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Status Exception ( HttpStatus . NOT _ FOUND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Task Ġwith Ġsuch Ġid Ġ${ taskId } Ġdoesn 't Ġexist ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( task . list Id Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . list Id Ġ= Ġexisting Task . list Id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠSo Ġit 's Ġpossible Ġto Ġmove Ġlist Ġto Ġanother Ġlist ĊĠĠĠĠĠĠĠ Ġtask . todo List Ġ= Ġtodo List Repository . findById ( task . list Id ). orElse Throw Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Status Exception ( HttpStatus . NOT _ FOUND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" List Ġwith Ġsuch Ġid Ġ${ task . list Id } Ġdoesn 't Ġexist ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtask Repository . save ( task . copy ( taskId Ġ= ĠtaskId )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Delete Mapping ("/ { taskId }") ĊĠĠĠ Ġfun Ġdelete Task (@ PathVariable ĠtaskId : ĠLong ) Ġ= Ġtask Repository . delete ById ( taskId ) Ċ }