Commit de04a10b authored by Henrique Baptista De Oliveira's avatar Henrique Baptista De Oliveira
Browse files

Merge branch 'task/adding-delete-file-service' into 'story/remove-insurance'

feat(insurance):adding delete file service and updating delete at insurance service

See merge request !23
parents 4d4cd4d3 d3cf8bbe
Showing with 185 additions and 8 deletions
+185 -8
package design.boilerplate.springboot.adapters.controllers;
import design.boilerplate.springboot.adapters.controllers.responses.GetUploadFileResponse;
import design.boilerplate.springboot.application.useCases.DeleteFileUC;
import design.boilerplate.springboot.application.useCases.UploadFileUC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
......@@ -14,14 +16,22 @@ import java.security.NoSuchAlgorithmException;
@RequestMapping("/file")
public class FileController {
private UploadFileUC uploadFileUC;
private DeleteFileUC deleteFileUC;
@Autowired
public FileController(UploadFileUC uploadFileUC) {
public FileController(UploadFileUC uploadFileUC, DeleteFileUC deleteFileUC) {
this.uploadFileUC = uploadFileUC;
this.deleteFileUC = deleteFileUC;
}
@PostMapping(value = "/upload")
@PostMapping("/upload")
public ResponseEntity<GetUploadFileResponse> upload(@RequestParam("file") MultipartFile file) throws IOException, NoSuchAlgorithmException {
return ResponseEntity.ok(uploadFileUC.execute(file));
}
@DeleteMapping("/delete/{filename}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteInsurance(@PathVariable String filename) {
deleteFileUC.execute(filename);
}
}
......@@ -2,11 +2,12 @@ package design.boilerplate.springboot.adapters.controllers;
import design.boilerplate.springboot.adapters.controllers.requests.PostInsuranceRequest;
import design.boilerplate.springboot.adapters.controllers.responses.GetCreatedInsuranceResponse;
import design.boilerplate.springboot.adapters.controllers.responses.GetInsuranceCompanyResponse;
import design.boilerplate.springboot.adapters.controllers.responses.GetInsuranceResponse;
import design.boilerplate.springboot.application.useCases.CreateInsuranceUC;
import design.boilerplate.springboot.application.useCases.DeleteInsuranceUC;
import design.boilerplate.springboot.application.useCases.ListAllInsuranceUC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
......@@ -18,11 +19,13 @@ public class InsuranceController {
private CreateInsuranceUC createInsuranceUC;
private ListAllInsuranceUC listAllInsuranceUC;
private DeleteInsuranceUC deleteInsuranceUC;
@Autowired
public InsuranceController(CreateInsuranceUC createInsuranceUC, ListAllInsuranceUC listAllInsuranceUC) {
public InsuranceController(CreateInsuranceUC createInsuranceUC, ListAllInsuranceUC listAllInsuranceUC, DeleteInsuranceUC deleteInsuranceUC) {
this.createInsuranceUC = createInsuranceUC;
this.listAllInsuranceUC = listAllInsuranceUC;
this.deleteInsuranceUC = deleteInsuranceUC;
}
@GetMapping("/all")
......@@ -34,4 +37,11 @@ public class InsuranceController {
public ResponseEntity<GetCreatedInsuranceResponse> createDocument(@RequestBody @Valid PostInsuranceRequest insuranceRequest){
return ResponseEntity.ok(createInsuranceUC.execute(insuranceRequest));
}
@DeleteMapping("/delete/{insuranceId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteInsurance(@PathVariable Integer insuranceId) {
deleteInsuranceUC.execute(insuranceId);
}
}
\ No newline at end of file
......@@ -40,6 +40,11 @@ public class FakeInsurancesRepository implements IInsurance {
return Optional.of(existentInsurance.get(0));
}
@Override
public void delete(Insurance insurance){
insurances.remove(insurance);
}
......
......@@ -32,6 +32,11 @@ public class Insurance_IMPL implements IInsurance {
return insuranceRepository.findByInsuranceId(insuranceId);
}
@Override
public void delete(Insurance insurance){
insuranceRepository.delete(insurance);
}
@Override
public Insurance create(Insurance newInsurance) {
return insuranceRepository.save(newInsurance);
......
package design.boilerplate.springboot.application.useCases;
import design.boilerplate.springboot.adapters.exceptions.InvalidFileNameException;
import design.boilerplate.springboot.domain.entities.Insurance;
import design.boilerplate.springboot.domain.services.ConvertFileDataService;
import design.boilerplate.springboot.domain.services.DeleteFileService;
import design.boilerplate.springboot.domain.services.InsuranceService;
import design.boilerplate.springboot.domain.validators.ExistentInsuranceValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class DeleteFileUC {
private InsuranceService insuranceService;
private ExistentInsuranceValidator existentInsuranceValidator;
private ConvertFileDataService convertFileDataService;
private DeleteFileService deleteFileService;
@Autowired
public DeleteFileUC(InsuranceService insuranceService, ExistentInsuranceValidator existentInsuranceValidator, ConvertFileDataService convertFileDataService, DeleteFileService deleteFileService) {
this.insuranceService = insuranceService;
this.existentInsuranceValidator = existentInsuranceValidator;
this.convertFileDataService = convertFileDataService;
this.deleteFileService = deleteFileService;
}
public void execute(String filename){
String[] fileData = convertFileDataService.execute(filename);
String fileInsuranceId = fileData[0];
String fileType = fileData[1];
existentInsuranceValidator.accept(insuranceService,fileInsuranceId);
Insurance insurance = insuranceService.findByInsuranceId(Integer.parseInt(fileInsuranceId)).get();
if(fileType.equals("policy") && insurance.getPolicyFileName()!=null)deleteFileService.execute(insurance.getPolicyFileName());
else if(fileType.equals("card") && insurance.getCardFileName()!=null)deleteFileService.execute(insurance.getCardFileName());
else if(fileType.equals("ticket") && insurance.getTicketFileName()!=null)deleteFileService.execute(insurance.getTicketFileName());
else throw new InvalidFileNameException();
insuranceService.update(fileInsuranceId,fileType,null);
}
}
package design.boilerplate.springboot.application.useCases;
import design.boilerplate.springboot.adapters.exceptions.InsuranceNotFoundException;
import design.boilerplate.springboot.domain.entities.Insurance;
import design.boilerplate.springboot.domain.services.DeleteFileService;
import design.boilerplate.springboot.domain.services.InsuranceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class DeleteInsuranceUC {
private InsuranceService insuranceService;
private DeleteFileService deleteFileService;
@Autowired
public DeleteInsuranceUC(InsuranceService insuranceService, DeleteFileService deleteFileService) {
this.insuranceService = insuranceService;
this.deleteFileService = deleteFileService;
}
public void execute(Integer insuranceId) {
Insurance insurance = insuranceService.findByInsuranceId(insuranceId).orElseThrow(InsuranceNotFoundException::new);
if(insurance.getPolicyFileName()!=null)deleteFileService.execute(insurance.getPolicyFileName());
if(insurance.getCardFileName()!=null)deleteFileService.execute(insurance.getCardFileName());
if(insurance.getTicketFileName()!=null)deleteFileService.execute(insurance.getTicketFileName());
insuranceService.delete(insuranceId);
}
}
......@@ -38,11 +38,11 @@ public class Insurance {
@Column(name = "insurance_type")
private String insuranceType;
@OneToOne(cascade = CascadeType.ALL)
@OneToOne
@JoinColumn(name="user_id",referencedColumnName = "cic_number")
private User user;
@OneToOne(cascade = CascadeType.ALL)
@OneToOne
@JoinColumn(name="insurance_company_id",referencedColumnName = "insurance_company_id")
private InsuranceCompany insuranceCompany;
......
......@@ -11,6 +11,8 @@ public interface IInsurance {
Insurance create(Insurance newInsurance);
void delete(Insurance insurance);
List<Insurance> all();
Optional<Insurance> findByInsuranceId(Integer insuranceId);
......
......@@ -17,7 +17,7 @@ public class ConvertFileDataService {
this.fileDataValidator = fileDataValidator;
}
public String[] execute(String fileName) throws IOException, NoSuchAlgorithmException {
public String[] execute(String fileName){
String[] splittedFile = fileName.split("[\\-.]");
......
package design.boilerplate.springboot.domain.services;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.DeleteObjectRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import design.boilerplate.springboot.domain.services.AWS.BuildCredentialsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
@Service
public class DeleteFileService {
private BuildCredentialsService credentialsService;
private AmazonS3 s3client;
@Value("${AWS_BUCKET_NAME}")
private String bucketName = "";
@Autowired
public DeleteFileService(BuildCredentialsService credentialsService) {
this.credentialsService = credentialsService;
}
public void execute(String hashedFileName){
s3client = credentialsService.execute();
DeleteObjectRequest request = new DeleteObjectRequest(bucketName, hashedFileName);
s3client.deleteObject(request);
}
}
package design.boilerplate.springboot.domain.services;
import design.boilerplate.springboot.adapters.exceptions.InsuranceNotFoundException;
import design.boilerplate.springboot.domain.entities.Insurance;
import design.boilerplate.springboot.domain.entities.InsuranceCompany;
import design.boilerplate.springboot.domain.repositories.IInsurance;
......@@ -39,7 +40,7 @@ public class InsuranceService {
public void update(String fileInsuranceId, String fileType, String hashedFileName){
Insurance insurance = insuranceRepository.findByInsuranceId(Integer.parseInt(fileInsuranceId)).get();
Insurance insurance = insuranceRepository.findByInsuranceId(Integer.parseInt(fileInsuranceId)).orElseThrow(InsuranceNotFoundException::new);
switch (fileType) {
case "policy":
......@@ -57,4 +58,11 @@ public class InsuranceService {
}
public void delete(Integer insuranceId){
Insurance insurance = insuranceRepository.findByInsuranceId(insuranceId).orElseThrow(InsuranceNotFoundException::new);
insuranceRepository.delete(insurance);
}
}
......@@ -87,4 +87,26 @@ class InsuranceServiceTest {
assertEquals(2, result.size());
}
@Test
public void shouldBeAbleToDeleteInsurance(){
InsuranceCompany insuranceCompany_1 = new InsuranceCompany(1,"ACMECorp","1234-56789","ACME@acmecorp.com","6666-66666","evil@acmecorp.com");
User user_bob = new User("12345-6789", "Bob","bob@email.com","secret_password","123.456.789-01",false,null);
Insurance insurance_1 = new Insurance(1, LocalDate.now(),LocalDate.now(),"policy_file","card_file","ticket_file","policy",user_bob,insuranceCompany_1);
Insurance insurance_2 = new Insurance(2, LocalDate.now(),LocalDate.now(),"policy_file","card_file","ticket_file","policy",user_bob,insuranceCompany_1);
verifyInsuranceDateValidator = new VerifyInsuranceDateValidator();
List<Insurance> insurances = new ArrayList<>();
insurances.add(insurance_1);
insurances.add(insurance_2);
fakeInsurancesRepository = new FakeInsurancesRepository(insurances);
insuranceService = new InsuranceService(fakeInsurancesRepository,verifyInsuranceDateValidator);
insuranceService.delete(1);
assertEquals(fakeInsurancesRepository.all().size(),1);
}
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment