Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import groovy.transform.Canonical
- import groovy.transform.CompileStatic
- import io.swagger.annotations.ApiModel
- import io.swagger.annotations.ApiOperation
- import io.swagger.annotations.ApiResponse
- import io.swagger.annotations.ApiResponses
- import ninja.retro.api.components.Converter
- import ninja.retro.api.controllers.organizations.rooms.components.RoomFetcher
- import ninja.retro.api.controllers.organizations.rooms.components.RoomPathVars
- import ninja.retro.api.exceptions.ForbiddenException
- import ninja.retro.api.models.OrganizationRole
- import ninja.retro.api.projections.ActionPointDTO
- import ninja.retro.api.repositories.ActionsPointsRepo
- import ninja.retro.api.util.IdEncoder
- import ninja.retro.api.validation.EncodedIdConstraint
- import org.springframework.beans.factory.annotation.Autowired
- import org.springframework.web.bind.annotation.PatchMapping
- import org.springframework.web.bind.annotation.PathVariable
- import org.springframework.web.bind.annotation.RequestBody
- import org.springframework.web.bind.annotation.RestController
- import javax.validation.Valid
- import javax.validation.constraints.Size
- import static ninja.retro.api.util.LangUtils.coalesce
- @RestController
- @ActionPointsApi
- class UpdateActionPoint {
- @Autowired
- RoomFetcher roomFetcher
- @Autowired
- ActionsPointsRepo actionsPointsRepo
- @Autowired
- Converter converter
- @ApiOperation(
- value = "updates an action point",
- produces = "application/json",
- consumes = "application/json"
- )
- @ApiResponses([
- @ApiResponse(code = 200, response = ActionPointDTO, message = "OK")
- ])
- @PatchMapping("/{id}")
- ActionPointDTO patch(
- @Valid RoomPathVars roomPathVars,
- @PathVariable("id") @Valid @EncodedIdConstraint String sid,
- @Valid @RequestBody Payload payload) {
- def room = roomFetcher.fetch(roomPathVars, OrganizationRole.member)
- def id = IdEncoder.decode(sid)
- def actionPoint = actionsPointsRepo.findByRoomIdAndId(room.id, id).orElseThrow(ForbiddenException.SUPPLIER)
- actionPoint.description = coalesce(payload.description, actionPoint.description)
- actionPoint.resolved = coalesce(payload.resolved, actionPoint.resolved)
- actionPoint.dueDate = coalesce(payload.dueDate, actionPoint.dueDate)
- def saved = actionsPointsRepo.save(actionPoint)
- converter.convertOne(saved, ActionPointDTO, ActionPointDTO.CONVERT_FIELDS)
- }
- @ApiModel(value = "ninja.retro.api.controllers.organizations.rooms.actionpoints.UpdateActionPoint.Payload")
- @CompileStatic
- @Canonical
- static class Payload {
- @Size(min = 1, max = 10_000)
- String description
- Boolean resolved
- Date dueDate
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement