add repository logic. add service logic. it works now

This commit is contained in:
2025-11-26 19:19:57 +02:00
parent 557b33f395
commit 95aba39ea4
11 changed files with 177 additions and 23 deletions

View File

@@ -1,4 +1,4 @@
package ua.com.dxrkness.model;
public record Freight() {
public record Freight(long id) implements Identifiable {
}

View File

@@ -0,0 +1,5 @@
package ua.com.dxrkness.model;
public interface Identifiable {
long id();
}

View File

@@ -1,4 +1,6 @@
package ua.com.dxrkness.model;
public record Route() {
import java.util.List;
public record Route(long id, Vehicle vehicle, List<Freight> freights) implements Identifiable {
}

View File

@@ -1,4 +1,4 @@
package ua.com.dxrkness.model;
public record Vehicle() {
public record Vehicle(long id) implements Identifiable {
}

View File

@@ -0,0 +1,45 @@
package ua.com.dxrkness.repository;
import ua.com.dxrkness.model.Identifiable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
abstract class CrudRepository<T extends Identifiable> {
protected final List<T> STORAGE = new ArrayList<>();
public List<T> getAll() {
return new ArrayList<>(STORAGE); // defensive copy
}
public Optional<T> getById(long id) {
return STORAGE.stream().filter(el -> el.id() == id).findFirst();
}
public T add(T toAdd) {
STORAGE.add(toAdd);
return toAdd;
}
public T update(long id, T newT) {
for (int i = 0; i < STORAGE.size(); i++) {
if (STORAGE.get(i).id() == id) {
STORAGE.set(i, newT);
break;
}
}
return newT;
}
public Optional<T> delete(long id) {
T deleted = null;
for (int i = 0; i < STORAGE.size(); i++) {
if (STORAGE.get(i).id() == id) {
deleted = STORAGE.remove(i);
break;
}
}
return Optional.ofNullable(deleted);
}
}

View File

@@ -0,0 +1,8 @@
package ua.com.dxrkness.repository;
import org.springframework.stereotype.Repository;
import ua.com.dxrkness.model.Freight;
@Repository
public final class FreightRepository extends CrudRepository<Freight> {
}

View File

@@ -0,0 +1,21 @@
package ua.com.dxrkness.repository;
import org.springframework.stereotype.Repository;
import ua.com.dxrkness.model.Route;
import java.util.Optional;
@Repository
public final class RouteRepository extends CrudRepository<Route> {
public Optional<Route> getByFreightId(long freightId) {
return STORAGE.stream()
.filter(route -> route.freights().stream().anyMatch(freight -> freight.id() == freightId))
.findAny();
}
public Optional<Route> getByVehicleId(long vehicleId) {
return STORAGE.stream()
.filter(route -> route.vehicle().id() == vehicleId)
.findAny();
}
}

View File

@@ -0,0 +1,8 @@
package ua.com.dxrkness.repository;
import org.springframework.stereotype.Repository;
import ua.com.dxrkness.model.Vehicle;
@Repository
public final class VehicleRepository extends CrudRepository<Vehicle> {
}

View File

@@ -2,15 +2,36 @@ package ua.com.dxrkness.service;
import org.springframework.stereotype.Service;
import ua.com.dxrkness.model.Freight;
import ua.com.dxrkness.repository.FreightRepository;
import java.util.List;
import java.util.Optional;
@Service
public class FreightService {
public List<Freight> getAll() { }
public Freight add(Freight freight) { }
public Optional<Freight> getById(long id) { }
public Freight update(long id, Freight newFreight) { }
public Freight delete(long id) { }
public final class FreightService {
private final FreightRepository repo;
public FreightService(FreightRepository repo) {
this.repo = repo;
}
public List<Freight> getAll() {
return repo.getAll();
}
public Freight add(Freight freight) {
return repo.add(freight);
}
public Optional<Freight> getById(long id) {
return repo.getById(id);
}
public Freight update(long id, Freight newFreight) {
return repo.update(id, newFreight);
}
public Optional<Freight> delete(long id) {
return repo.delete(id);
}
}

View File

@@ -2,17 +2,44 @@ package ua.com.dxrkness.service;
import org.springframework.stereotype.Service;
import ua.com.dxrkness.model.Route;
import ua.com.dxrkness.repository.RouteRepository;
import java.util.List;
import java.util.Optional;
@Service
public class RouteService {
public List<Route> getAll() { }
public Optional<Route> getById(long id) { }
public Route add(Route route) { }
public Route getByFreightId(long freightId) { }
public Route getByVehicleId(long vehicleId) { }
public Route update(long id, Route newRoute) { }
public Route delete(long id) { }
public final class RouteService {
private final RouteRepository repo;
public RouteService(RouteRepository repo) {
this.repo = repo;
}
public List<Route> getAll() {
return repo.getAll();
}
public Optional<Route> getById(long id) {
return repo.getById(id);
}
public Route add(Route route) {
return repo.add(route);
}
public Optional<Route> getByFreightId(long freightId) {
return repo.getByFreightId(freightId);
}
public Optional<Route> getByVehicleId(long vehicleId) {
return repo.getByVehicleId(vehicleId);
}
public Route update(long id, Route newRoute) {
return repo.update(id, newRoute);
}
public Optional<Route> delete(long id) {
return repo.delete(id);
}
}

View File

@@ -2,19 +2,36 @@ package ua.com.dxrkness.service;
import org.springframework.stereotype.Service;
import ua.com.dxrkness.model.Vehicle;
import ua.com.dxrkness.repository.VehicleRepository;
import java.util.List;
import java.util.Optional;
@Service
public class VehicleService {
public List<Vehicle> getAll() { }
public final class VehicleService {
private final VehicleRepository repo;
public Vehicle add(Vehicle veh) { }
public VehicleService(VehicleRepository repo) {
this.repo = repo;
}
public Optional<Vehicle> getById(long id) { }
public List<Vehicle> getAll() {
return repo.getAll();
}
public Vehicle update(long id, Vehicle newVehicle) { }
public Vehicle add(Vehicle veh) {
return repo.add(veh);
}
public Vehicle delete(long id) { }
public Optional<Vehicle> getById(long id) {
return repo.getById(id);
}
public Vehicle update(long id, Vehicle newVehicle) {
return repo.update(id, newVehicle);
}
public Optional<Vehicle> delete(long id) {
return repo.delete(id);
}
}