package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.InstansiRequest; import com.iconplus.smartproc.model.response.GetListInstansiResponse; import com.iconplus.smartproc.model.response.InstansiResponse; import com.iconplus.smartproc.service.instansi.*; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; @CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/instansi") public class InstansiController { private final GetListInstansiService getListInstansiService; private final PostCreateInstansiService postCreateInstansiService; private final PutUpdateInstansiService putUpdateInstansiService; private final GetInstansiByIdService getInstansiByIdService; private final DeleteInstansiService deleteInstansiService; public InstansiController(GetListInstansiService getListInstansiService, PostCreateInstansiService postCreateInstansiService, PutUpdateInstansiService putUpdateInstansiService, GetInstansiByIdService getInstansiByIdService, DeleteInstansiService deleteInstansiService) { this.getListInstansiService = getListInstansiService; this.postCreateInstansiService = postCreateInstansiService; this.putUpdateInstansiService = putUpdateInstansiService; this.getInstansiByIdService = getInstansiByIdService; this.deleteInstansiService = deleteInstansiService; } @GetMapping public GetListInstansiResponse getListInstansi(@RequestParam(name = "search", required = false) String search, @RequestParam(name = "page", defaultValue = "1") Integer page, @RequestParam(name = "size", defaultValue = "5") Integer size){ Pageable pageable = PageRequest.of((page - 1), size); InstansiRequest instansiRequest = InstansiRequest.builder() .search(search) .pageable(pageable) .build(); return getListInstansiService.execute(instansiRequest); } @PostMapping public InstansiResponse createInstansi(@RequestBody InstansiRequest request) { return postCreateInstansiService.execute(request); } @GetMapping("/{id}") public InstansiResponse getInstansiById(@PathVariable Long id) { return getInstansiByIdService.execute(InstansiRequest.builder() .id(id) .build()); } @PutMapping("/{id}") public InstansiResponse updateInstansi(@PathVariable Long id, @RequestBody InstansiRequest request){ request.setId(id); return putUpdateInstansiService.execute(request); } @DeleteMapping("/{id}") public EmptyResponse deleteInstansi(@PathVariable Long id){ return deleteInstansiService.execute(InstansiRequest.builder() .id(id) .build()); } }