Add claims

This commit is contained in:
2025-08-29 11:04:29 +08:00
parent f38088b412
commit 57c5e6ed53
10 changed files with 172 additions and 5 deletions

View File

@@ -0,0 +1,35 @@
package com.hzwnrw.insurance.controller;
import com.hzwnrw.insurance.dto.ClaimDTO;
import com.hzwnrw.insurance.service.ClaimService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/claim")
public class ClaimController {
private final ClaimService claimService;
public ClaimController(ClaimService claimService) {
this.claimService = claimService;
}
@GetMapping
public ResponseEntity<Page<ClaimDTO>> getAllClaims(Pageable pageable) {
Page<ClaimDTO> claims = claimService.getAllClaims(pageable);
return ResponseEntity.ok(claims);
}
@PostMapping("/add")
public ResponseEntity<ClaimDTO> createClaim(@RequestBody ClaimDTO claim){
return ResponseEntity.ok(claimService.createClaim(claim));
}
@PutMapping("/{id}/status")
public ClaimDTO updateStatus(@PathVariable Long id, @RequestParam String status) {
return claimService.updateStatus(id, status);
}
}

View File

@@ -22,11 +22,12 @@ public class InsuranceController {
return ResponseEntity.ok(insuranceService.createInsurance(insurance));
}
@PostMapping("/all")
@GetMapping("/all")
public List<InsuranceDTO> getAllInsurance() {
return insuranceService.getAllInsurance();
}
@GetMapping("/detail/{id}")
public ResponseEntity<InsuranceDetailDTO> getInsuranceDetail(@PathVariable Long id) {
InsuranceDetailDTO detail = insuranceService.getInsuranceDetailById(id);

View File

@@ -0,0 +1,25 @@
package com.hzwnrw.insurance.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class ClaimDTO {
private Long id;
private String name;
private String policyID;
private String claimReason;
private double claimAmount;
private String status;
public ClaimDTO(Long id, String name, String policyID, String claimReason, double claimAmount, String status) {
this.id = id;
this.name = name;
this.policyID = policyID;
this.claimReason = claimReason;
this.claimAmount = claimAmount;
this.status = status;
}
}

View File

@@ -0,0 +1,7 @@
package com.hzwnrw.insurance.exception;
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}

View File

@@ -0,0 +1,17 @@
package com.hzwnrw.insurance.handler;
import com.hzwnrw.insurance.exception.ResourceNotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,32 @@
package com.hzwnrw.insurance.model;
import jakarta.persistence.*;
import lombok.*;
@Entity
@Table(name = "claim")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Claim {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "policy_id", nullable = false)
private String policyID;
@Column(name = "claim_reason", nullable = false)
private String claimReason;
@Column(name = "claim_amount", nullable = false)
private double claimAmount;
@Column(name = "status")
private String status;
}

View File

@@ -0,0 +1,9 @@
package com.hzwnrw.insurance.repository;
import com.hzwnrw.insurance.model.Claim;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ClaimRepository extends JpaRepository<Claim, Long> {
}

View File

@@ -2,6 +2,8 @@ package com.hzwnrw.insurance.repository;
import com.hzwnrw.insurance.model.InsuranceDetail;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface InsuranceDetailRepository extends JpaRepository<InsuranceDetail, Long> {
}

View File

@@ -0,0 +1,43 @@
package com.hzwnrw.insurance.service;
import com.hzwnrw.insurance.dto.ClaimDTO;
import com.hzwnrw.insurance.exception.ResourceNotFoundException;
import com.hzwnrw.insurance.mapper.GenericMapper;
import com.hzwnrw.insurance.model.Claim;
import com.hzwnrw.insurance.repository.ClaimRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@Service
public class ClaimService {
private final ClaimRepository claimRepository;
public ClaimService(ClaimRepository claimRepository) {
this.claimRepository = claimRepository;
}
public Page<ClaimDTO> getAllClaims(Pageable pageable) {
return claimRepository.findAll(pageable)
.map(entity -> GenericMapper.mapToDTO(entity, ClaimDTO.class));
}
public ClaimDTO createClaim(ClaimDTO dto) {
Claim entity = GenericMapper.mapToEntity(dto, Claim.class);
Claim saved = claimRepository.save(entity);
return GenericMapper.mapToDTO(saved, ClaimDTO.class);
}
public ClaimDTO updateStatus(Long claimId, String status) {
Claim claim = claimRepository.findById(claimId)
.orElseThrow(() -> new ResourceNotFoundException("Claim not found with id " + claimId));
claim.setStatus(status);
Claim updatedClaim = claimRepository.save(claim);
return GenericMapper.mapToDTO(updatedClaim,ClaimDTO.class);
}
}

View File

@@ -31,20 +31,16 @@ public class InsuranceService {
.collect(Collectors.toList());
}
public InsuranceDTO createInsurance(InsuranceDTO dto) {
Insurance entity = GenericMapper.mapToEntity(dto, Insurance.class);
Insurance saved = insuranceRepository.save(entity);
return GenericMapper.mapToDTO(saved, InsuranceDTO.class);
}
public InsuranceDetailDTO getInsuranceDetailById(Long id) {
return insuranceDetailRepository.findById(id)
.map(entity -> GenericMapper.mapToDTO(entity, InsuranceDetailDTO.class))
.orElse(null);
}
}