starting backend

Signed-off-by: Peter Siegmund <peter@rdkr.com>
This commit is contained in:
Peter Siegmund
2024-05-30 14:26:45 +02:00
parent 35efe393d7
commit c4ccf27130
15 changed files with 741 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
package com.rdkr.tide_display.backend;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

View File

@@ -0,0 +1,35 @@
package com.rdkr.tide_display.backend.firmware.controller;
import com.rdkr.tide_display.backend.firmware.service.FirmwareService;
import com.rdkr.tide_display.backend.gcp.Firmware;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/versions")
public class VersionController {
private final FirmwareService firmwareService;
@GetMapping()
public ResponseEntity<List<Firmware>> getVersions() {
return ResponseEntity.of(Optional.of(firmwareService.getFirmwareVersions()));
}
@GetMapping("latest")
public ResponseEntity<Firmware> getLatestVersion() {
return ResponseEntity.of(Optional.of(firmwareService.getLatestFirmwareVersion()));
}
@GetMapping("{version:\\d\\.\\d\\.\\d}")
public ResponseEntity<Firmware> getVersion(@PathVariable String version) {
return ResponseEntity.of(firmwareService.getFirmwareVersion(version));
}
}

View File

@@ -0,0 +1,14 @@
package com.rdkr.tide_display.backend.firmware.service;
import com.rdkr.tide_display.backend.gcp.Firmware;
import java.util.List;
import java.util.Optional;
public interface FirmwareService {
List<Firmware> getFirmwareVersions();
Firmware getLatestFirmwareVersion();
Optional<Firmware> getFirmwareVersion(String version);
}

View File

@@ -0,0 +1,33 @@
package com.rdkr.tide_display.backend.firmware.service;
import com.rdkr.tide_display.backend.gcp.Firmware;
import com.rdkr.tide_display.backend.gcp.StorageService;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class FirmwareServiceImpl implements FirmwareService {
private final StorageService storageService;
@Override
public List<Firmware> getFirmwareVersions() {
return storageService.getFirmwareVersions();
}
@Override
public Firmware getLatestFirmwareVersion() {
return storageService.getFirmwareVersions().getFirst();
}
@Override
public Optional<Firmware> getFirmwareVersion(String version) {
return
storageService.getFirmwareVersions().stream()
.filter(firmware -> firmware.version().equals(version))
.findFirst();
}
}

View File

@@ -0,0 +1,5 @@
package com.rdkr.tide_display.backend.gcp;
public record Firmware(String version, String url, String checksum) {
}

View File

@@ -0,0 +1,7 @@
package com.rdkr.tide_display.backend.gcp;
import java.util.List;
public interface StorageService {
List<Firmware> getFirmwareVersions();
}

View File

@@ -0,0 +1,18 @@
package com.rdkr.tide_display.backend.gcp.service;
import com.rdkr.tide_display.backend.gcp.Firmware;
import com.rdkr.tide_display.backend.gcp.StorageService;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class StorageServiceImpl implements StorageService {
@Override
public List<Firmware> getFirmwareVersions() {
return List.of(
new Firmware("1.0.1", "/firmware/1.0.1/firmware.bin", "0987654321"),
new Firmware("1.0.0", "/firmware/1.0.0/firmware.bin", "1234567890")
);
}
}

View File

@@ -0,0 +1 @@
spring.application.name=Backend

View File

@@ -0,0 +1,33 @@
package com.rdkr.tide_display.backend;
import lombok.val;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.modulith.core.ApplicationModules;
import org.springframework.modulith.docs.Documenter;
@SpringBootTest
class ApplicationTests {
@Test
void contextLoads() {
}
@Test
void modules() {
ApplicationModules.of(Application.class).forEach(System.out::println);
}
@Test
void verify() {
ApplicationModules.of(Application.class).verify();
}
@Test
void documentation() {
val modules = ApplicationModules.of(Application.class).verify();
new Documenter(modules).writeModulesAsPlantUml();
}
}