AssetController.java
package com.nashtech.rookie.asset_management_0701.controllers;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import com.nashtech.rookie.asset_management_0701.dtos.filters.AssetFilter;
import com.nashtech.rookie.asset_management_0701.dtos.requests.asset.AssetCreateDto;
import com.nashtech.rookie.asset_management_0701.dtos.requests.asset.AssetUpdateDto;
import com.nashtech.rookie.asset_management_0701.dtos.responses.APIResponse;
import com.nashtech.rookie.asset_management_0701.dtos.responses.PaginationResponse;
import com.nashtech.rookie.asset_management_0701.dtos.responses.asset.AssetResponseDto;
import com.nashtech.rookie.asset_management_0701.services.asset.AssetService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
@RestController
@RequestMapping("/api/v1/assets")
@RequiredArgsConstructor
public class AssetController {
private final AssetService assetService;
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
@PreAuthorize("hasRole('ADMIN')")
public APIResponse<AssetResponseDto> createAsset (@Valid @RequestBody AssetCreateDto assetCreateDto) {
return APIResponse.<AssetResponseDto>builder()
.result(assetService.createAsset(assetCreateDto))
.build();
}
@GetMapping
@PreAuthorize("hasRole('ADMIN')")
public APIResponse<PaginationResponse<AssetResponseDto>> getAllAssets (@Valid @ModelAttribute AssetFilter filter) {
return APIResponse.<PaginationResponse<AssetResponseDto>>builder()
.result(assetService.getAllAssets(filter))
.build();
}
@GetMapping("/{id}")
@PreAuthorize("hasRole('ADMIN')")
public APIResponse<AssetResponseDto> getAssetById (@PathVariable Long id) {
return APIResponse.<AssetResponseDto>builder()
.result(assetService.getAssetById(id))
.build();
}
@DeleteMapping("/{id}")
@PreAuthorize("hasRole('ADMIN')")
public APIResponse<String> deleteAsset (@PathVariable Long id) {
assetService.deleteAsset(id);
return APIResponse.<String>builder()
.message("Delete asset successfully")
.build();
}
@GetMapping("/exist-assignments/{id}")
@PreAuthorize("hasRole('ADMIN')")
public APIResponse<Boolean> existAssignments (@PathVariable Long id) {
return APIResponse.<Boolean>builder()
.result(assetService.existAssignments(id))
.build();
}
@PutMapping("/{id}")
@PreAuthorize("hasRole('ADMIN')")
public APIResponse<AssetResponseDto> updateAsset (@PathVariable("id") Long id
, @RequestBody @Valid AssetUpdateDto assetUpdateDto) {
return APIResponse.<AssetResponseDto>builder()
.result(assetService.updateAsset(id, assetUpdateDto))
.build();
}
}