package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.LokasiRequest; import com.iconplus.smartproc.model.response.GetListLokasiResponse; import com.iconplus.smartproc.model.response.LokasiResponse; import com.iconplus.smartproc.service.lokasi.*; 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/lokasi") public class LokasiController { private final GetListLokasiService getListLokasiService; private final GetLokasiByIdService getLokasiByIdService; private final PostCreateLokasiService postCreateLokasiService; private final PutUpdateLokasiService putUpdateLokasiService; private final DeleteLokasiService deleteLokasiService; public LokasiController(GetListLokasiService getListLokasiService, GetLokasiByIdService getLokasiByIdService, PostCreateLokasiService postCreateLokasiService, PutUpdateLokasiService putUpdateLokasiService, DeleteLokasiService deleteLokasiService) { this.getListLokasiService = getListLokasiService; this.getLokasiByIdService = getLokasiByIdService; this.postCreateLokasiService = postCreateLokasiService; this.putUpdateLokasiService = putUpdateLokasiService; this.deleteLokasiService = deleteLokasiService; } @GetMapping public GetListLokasiResponse getListLokasi(@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); LokasiRequest lokasiRequest = LokasiRequest.builder() .search(search) .pageable(pageable) .build(); return getListLokasiService.execute(lokasiRequest); } @PostMapping public LokasiResponse createLokasi(@RequestBody LokasiRequest lokasiRequest) { return postCreateLokasiService.execute(lokasiRequest); } @GetMapping("/{id}") public LokasiResponse getLokasiById(@PathVariable Long id) { return getLokasiByIdService.execute(LokasiRequest.builder() .id(id) .build()); } @PutMapping("/{id}") public LokasiResponse updateLokasi(@PathVariable Long id, @RequestBody LokasiRequest LokasiRequest){ LokasiRequest.setId(id); return putUpdateLokasiService.execute(LokasiRequest); } @DeleteMapping("/{id}") public EmptyResponse deleteLokasi(@PathVariable Long id) { return deleteLokasiService.execute(LokasiRequest.builder() .id(id) .build()); } }