Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.example.crimearchive.DTO;

import java.util.UUID;

public record ReportResponse(
UUID uuid,
String name,
String event
) {}
21 changes: 20 additions & 1 deletion src/main/java/org/example/crimearchive/bevis/Report.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,19 @@ public class Report {
private UUID uuid;
private String name;
private String event;
private String s3KeyPdf;
private String s3KeyFile;


public Report() {
}

public Report(UUID id, String name, String event) {
public Report(UUID id, String name, String event, String s3KeyPdf, String s3KeyFile) {
this.uuid = id;
this.name = name;
this.event = event;
this.s3KeyPdf = s3KeyPdf;
this.s3KeyFile = s3KeyFile;
}

public UUID getUuid() {
Expand All @@ -48,6 +52,21 @@ public void setEvent(String event) {
this.event = event;
}

public String getS3KeyPdf() {
return s3KeyPdf;
}

public void setS3KeyPdf(String s3KeyPdf) {
this.s3KeyPdf = s3KeyPdf;
}
public String getS3KeyFile() {
return s3KeyFile;
}

public void setS3KeyFile(String s3KeyFile) {
this.s3KeyFile = s3KeyFile;
}

@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Expand Down
64 changes: 64 additions & 0 deletions src/main/java/org/example/crimearchive/config/S3Config.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package org.example.crimearchive.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
import software.amazon.awssdk.services.s3.model.HeadBucketRequest;
import software.amazon.awssdk.services.s3.model.S3Exception;

import java.net.URI;

@Configuration
public class S3Config {

@Value("${minio.endpoint}")
private String endpoint;

@Value("${minio.access-key}")
private String accessKey;

@Value("${minio.secret-key}")
private String secretKey;

@Value("${minio.bucket}")
private String bucket;

@Bean
public S3Client s3Client() {
return S3Client.builder()
.endpointOverride(URI.create(endpoint))
.credentialsProvider(StaticCredentialsProvider.create(
AwsBasicCredentials.create(accessKey, secretKey)
))
.region(Region.US_EAST_1)
.forcePathStyle(true)
.build();
}

@Bean
public ApplicationRunner createBucket(S3Client s3Client) {
return args -> {
try {
s3Client.headBucket(HeadBucketRequest.builder()
.bucket(bucket)
.build());
System.out.println("Bucket finns redan: " + bucket);
} catch (S3Exception e) {
if (e.statusCode() == 404) {
s3Client.createBucket(CreateBucketRequest.builder()
.bucket(bucket)
.build());
System.out.println("Bucket skapad: " + bucket);
} else {
throw new RuntimeException("Fel vid kontroll av bucket: " + e.getMessage(), e);
}
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,29 @@

import jakarta.validation.Valid;
import org.example.crimearchive.DTO.CreateReport;
import org.example.crimearchive.DTO.ReportResponse;
import org.example.crimearchive.service.ReportService;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.UUID;

@Controller
public class HomeController {

ReportService reportService;
private final ReportService reportService;

public HomeController(ReportService reportService) {
this.reportService = reportService;
}

@GetMapping("/")
public String indexPage(Model model) {
//model.addAttribute("reports", reportService.getAllReports());
return "index";
}

Expand All @@ -30,9 +34,33 @@ public String privatePage(Model model) {
return "private";
}

@PostMapping("/reports/add")
public String saveReport(@ModelAttribute("newReport") @Valid CreateReport newReport) {
reportService.saveReport(newReport);
return "redirect:/";
@PostMapping("/reports/add")
public String saveReport(
@ModelAttribute("newReport") @Valid CreateReport newReport,
@RequestParam(value = "file", required = false) MultipartFile file,
Model model) {
try {
reportService.saveReport(newReport, file);
return "redirect:/";
} catch (IOException e) {
model.addAttribute("error", "Kunde inte spara rapporten. Försök igen.");
model.addAttribute("newReport", newReport);
return "private";
}
}

@GetMapping("/reports")
public ResponseEntity<List<ReportResponse>> getAllReports() {
return ResponseEntity.ok(reportService.getAllReportResponses());
}

@GetMapping("/reports/{uuid}/download/pdf")
public ResponseEntity<byte[]> downloadPdf(@PathVariable UUID uuid) {
return reportService.downloadPdf(uuid);
}

@GetMapping("/reports/{uuid}/download/file")
public ResponseEntity<byte[]> downloadFile(@PathVariable UUID uuid) {
return reportService.downloadFile(uuid);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@

public class ReportMapper {

public static Report toEntity(CreateReport report) {
public static Report toEntity(CreateReport report, String s3KeyPdf, String s3KeyFile) {
return new Report(
UUID.randomUUID(),
report.name(),
report.event()
report.event(),
s3KeyPdf,
s3KeyFile

);
}

Expand Down
Loading