finance-analyzer/src/main/java/de/arminwolf/financeanalyzer/controller/ConverterController.java

112 lines
4.1 KiB
Java

package de.arminwolf.financeanalyzer.controller;
import de.arminwolf.financeanalyzer.conf.BankAccount;
import de.arminwolf.financeanalyzer.conf.Configuration;
import de.arminwolf.financeanalyzer.service.CacheService;
import de.arminwolf.financeanalyzer.service.ConverterService;
import de.arminwolf.financeanalyzer.service.FileService;
import de.arminwolf.financeanalyzer.util.Constants;
import org.springframework.beans.factory.annotation.Autowired;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@Controller
@RequestMapping("/data")
public class ConverterController {
@Autowired
ConverterService service;
@Autowired
CacheService cacheService;
@Autowired
FileService fileService;
@PostMapping("/convert")
public String convert(RedirectAttributes redirectAttributes, @RequestParam("file") MultipartFile file) {
try (InputStream in = file.getInputStream()) {
Optional<String> json = service.convert(in);
if (json.isPresent()) {
File workingDirectory = fileService.getOrCreateWorkingDirectory();
Path tempFile = Files.createFile(Paths.get(workingDirectory.getPath(), "finance-analyzer.json"));
Path path = Files.writeString(tempFile, json.get(), StandardCharsets.UTF_8);
cacheService.put("currentJsonFile", path.toAbsolutePath().toFile().toString());
Configuration configuration = new Configuration();
Set<BankAccount> bankAccounts =
Arrays.stream(fileService.getJsonFile())
.map(t -> new BankAccount(t.getReferenzkonto(), t.getNameReferenzkonto()))
.collect(Collectors.toSet());
configuration.setBankAccounts(bankAccounts);
fileService.saveConfiguration(configuration);
redirectAttributes.addFlashAttribute("result", "Converted successfully!");
return "redirect:/data/success";
} else {
redirectAttributes.addFlashAttribute("result", "Error while converting");
return "redirect:/data/error";
}
} catch (IOException e) {
redirectAttributes.addFlashAttribute("result", "Error while converting");
return "redirect:/data/error";
}
}
@PostMapping("/load")
public String convert(RedirectAttributes redirectAttributes,
@RequestParam("account") String account,
@RequestParam("month") String month) {
redirectAttributes.addFlashAttribute("result", "Converted successfully!");
redirectAttributes.addFlashAttribute("account", account);
redirectAttributes.addFlashAttribute("month", month);
System.out.println("[ Load Method ] Account: " + account);
System.out.println("[ Load Method ] Month: " + month);
return "redirect:/data/success";
}
@GetMapping("/templates/error")
public String handleError(@ModelAttribute("result") String result, Model model) {
model.addAttribute("result", result);
return Constants.ERROR;
}
@GetMapping("/success")
public String handleSuccess(RedirectAttributes redirectAttributes,
@ModelAttribute("result") String result,
@ModelAttribute("account") String account,
@ModelAttribute("month") String month,
Model model) {
redirectAttributes.addFlashAttribute("result", "Converted successfully!");
redirectAttributes.addFlashAttribute("account", account);
redirectAttributes.addFlashAttribute("month", month);
redirectAttributes.addFlashAttribute("result", result);
return "redirect:/".concat(Constants.REPORTS).concat("/");
}
}