1
0
Fork 0
mirror of https://github.com/s-frick/effigenix.git synced 2026-03-28 13:49:36 +01:00

feat(tui): neue Backend-Features anbinden und Status-Werte korrigieren

TUI-Anbindung für Reservierung bestätigen (US-4.3), Produktionsauftrag
umterminieren und filtern (US-P17). Status-Werte CREATED→PLANNED und
IN_PRODUCTION→IN_PROGRESS korrigiert. Fehlenden GET /{id} Endpoint für
Produktionsaufträge im Backend ergänzt.
This commit is contained in:
Sebastian Frick 2026-02-25 23:36:42 +01:00
parent 8a84bf5f25
commit 417f8fcdae
14 changed files with 467 additions and 27 deletions

View file

@ -0,0 +1,29 @@
package de.effigenix.application.production;
import de.effigenix.domain.production.ProductionOrder;
import de.effigenix.domain.production.ProductionOrderError;
import de.effigenix.domain.production.ProductionOrderId;
import de.effigenix.domain.production.ProductionOrderRepository;
import de.effigenix.shared.common.Result;
public class GetProductionOrder {
private final ProductionOrderRepository productionOrderRepository;
public GetProductionOrder(ProductionOrderRepository productionOrderRepository) {
this.productionOrderRepository = productionOrderRepository;
}
public Result<ProductionOrderError, ProductionOrder> execute(String id) {
if (id == null || id.isBlank()) {
return Result.failure(new ProductionOrderError.ProductionOrderNotFound(ProductionOrderId.of(id)));
}
return switch (productionOrderRepository.findById(ProductionOrderId.of(id))) {
case Result.Failure(var err) -> Result.failure(new ProductionOrderError.RepositoryFailure(err.message()));
case Result.Success(var opt) -> opt
.<Result<ProductionOrderError, ProductionOrder>>map(Result::success)
.orElseGet(() -> Result.failure(new ProductionOrderError.ProductionOrderNotFound(ProductionOrderId.of(id))));
};
}
}

View file

@ -7,6 +7,7 @@ import de.effigenix.application.production.AddRecipeIngredient;
import de.effigenix.application.production.CancelProductionOrder;
import de.effigenix.application.production.CompleteProductionOrder;
import de.effigenix.application.production.CreateProductionOrder;
import de.effigenix.application.production.GetProductionOrder;
import de.effigenix.application.production.ListProductionOrders;
import de.effigenix.application.production.ReleaseProductionOrder;
import de.effigenix.application.production.RescheduleProductionOrder;
@ -187,6 +188,11 @@ public class ProductionUseCaseConfiguration {
return new RescheduleProductionOrder(productionOrderRepository, authorizationPort, unitOfWork);
}
@Bean
public GetProductionOrder getProductionOrder(ProductionOrderRepository productionOrderRepository) {
return new GetProductionOrder(productionOrderRepository);
}
@Bean
public ListProductionOrders listProductionOrders(ProductionOrderRepository productionOrderRepository,
AuthorizationPort authorizationPort) {

View file

@ -3,6 +3,7 @@ package de.effigenix.infrastructure.production.web.controller;
import de.effigenix.application.production.CancelProductionOrder;
import de.effigenix.application.production.CompleteProductionOrder;
import de.effigenix.application.production.CreateProductionOrder;
import de.effigenix.application.production.GetProductionOrder;
import de.effigenix.application.production.ListProductionOrders;
import de.effigenix.application.production.ReleaseProductionOrder;
import de.effigenix.application.production.RescheduleProductionOrder;
@ -45,6 +46,7 @@ public class ProductionOrderController {
private static final Logger logger = LoggerFactory.getLogger(ProductionOrderController.class);
private final CreateProductionOrder createProductionOrder;
private final GetProductionOrder getProductionOrder;
private final ReleaseProductionOrder releaseProductionOrder;
private final RescheduleProductionOrder rescheduleProductionOrder;
private final StartProductionOrder startProductionOrder;
@ -53,6 +55,7 @@ public class ProductionOrderController {
private final ListProductionOrders listProductionOrders;
public ProductionOrderController(CreateProductionOrder createProductionOrder,
GetProductionOrder getProductionOrder,
ReleaseProductionOrder releaseProductionOrder,
RescheduleProductionOrder rescheduleProductionOrder,
StartProductionOrder startProductionOrder,
@ -60,6 +63,7 @@ public class ProductionOrderController {
CancelProductionOrder cancelProductionOrder,
ListProductionOrders listProductionOrders) {
this.createProductionOrder = createProductionOrder;
this.getProductionOrder = getProductionOrder;
this.releaseProductionOrder = releaseProductionOrder;
this.rescheduleProductionOrder = rescheduleProductionOrder;
this.startProductionOrder = startProductionOrder;
@ -105,6 +109,20 @@ public class ProductionOrderController {
return ResponseEntity.ok(responses);
}
@GetMapping("/{id}")
@PreAuthorize("hasAuthority('PRODUCTION_ORDER_READ')")
public ResponseEntity<ProductionOrderResponse> getProductionOrder(@PathVariable String id) {
logger.info("Getting production order: {}", id);
var result = getProductionOrder.execute(id);
if (result.isFailure()) {
throw new ProductionOrderDomainErrorException(result.unsafeGetError());
}
return ResponseEntity.ok(ProductionOrderResponse.from(result.unsafeGetValue()));
}
@PostMapping
@PreAuthorize("hasAuthority('PRODUCTION_ORDER_WRITE')")
public ResponseEntity<ProductionOrderResponse> createProductionOrder(