From 1897494d70a354b5706fbe15bc74718b8282a498 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Slov=C3=ADk?= <xslovik@fi.muni.cz>
Date: Fri, 7 Apr 2023 21:08:45 +0200
Subject: [PATCH] Adding Flight and Steward facades

---
 .../core/facade/flight/FlightFacade.java      | 24 ++++++
 .../core/facade/flight/FlightFacadeImpl.java  | 53 ++++++++++++
 .../core/facade/steward/StewardFacade.java    | 26 ++++++
 .../facade/steward/StewardFacadeImpl.java     | 85 +++++++++++++++++++
 4 files changed, 188 insertions(+)
 create mode 100644 core/src/main/java/cz/muni/fi/pa165/core/facade/flight/FlightFacade.java
 create mode 100644 core/src/main/java/cz/muni/fi/pa165/core/facade/flight/FlightFacadeImpl.java
 create mode 100644 core/src/main/java/cz/muni/fi/pa165/core/facade/steward/StewardFacade.java
 create mode 100644 core/src/main/java/cz/muni/fi/pa165/core/facade/steward/StewardFacadeImpl.java

diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/flight/FlightFacade.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/flight/FlightFacade.java
new file mode 100644
index 0000000..8e79380
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/facade/flight/FlightFacade.java
@@ -0,0 +1,24 @@
+package cz.muni.fi.pa165.core.facade.flight;
+
+import cz.muni.fi.pa165.core.model.FlightDto;
+import cz.muni.fi.pa165.core.model.NewFlightDtoRequest;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @param <K> Key
+ * @author martinslovik
+ */
+public interface FlightFacade<K> {
+
+    FlightDto save(NewFlightDtoRequest newFlightDtoRequest);
+
+    Optional<FlightDto> findById(K id);
+
+    List<FlightDto> findAll();
+
+    void deleteById(K id);
+
+    void deleteAll();
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/flight/FlightFacadeImpl.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/flight/FlightFacadeImpl.java
new file mode 100644
index 0000000..4bff4f3
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/facade/flight/FlightFacadeImpl.java
@@ -0,0 +1,53 @@
+package cz.muni.fi.pa165.core.facade.flight;
+
+import cz.muni.fi.pa165.core.data.domain.Flight;
+import cz.muni.fi.pa165.core.model.FlightDto;
+import cz.muni.fi.pa165.core.model.NewFlightDtoRequest;
+import cz.muni.fi.pa165.core.service.flight.FlightService;
+import org.modelmapper.ModelMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class FlightFacadeImpl implements FlightFacade<Long> {
+
+    private final FlightService flightService;
+    private final ModelMapper modelMapper;
+
+    @Autowired
+    public FlightFacadeImpl(FlightService flightService, ModelMapper modelMapper) {
+        this.flightService = flightService;
+        this.modelMapper = modelMapper;
+    }
+
+    @Override
+    public FlightDto save(NewFlightDtoRequest newFlightDtoRequest) {
+        var entityToSave = modelMapper.map(newFlightDtoRequest, Flight.class);
+        var savedEntity = flightService.save(entityToSave);
+        return modelMapper.map(savedEntity, FlightDto.class);
+    }
+
+    @Override
+    public Optional<FlightDto> findById(Long id) {
+        var foundEntity = flightService.findById(id);
+        return foundEntity.map(e -> modelMapper.map(e, FlightDto.class));
+    }
+
+    @Override
+    public List<FlightDto> findAll() {
+        return null;
+    }
+
+    @Override
+    public void deleteById(Long id) {
+
+    }
+
+    @Override
+    public void deleteAll() {
+
+    }
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/steward/StewardFacade.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/steward/StewardFacade.java
new file mode 100644
index 0000000..f76532b
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/facade/steward/StewardFacade.java
@@ -0,0 +1,26 @@
+package cz.muni.fi.pa165.core.facade.steward;
+
+import cz.muni.fi.pa165.core.model.NewStewardDtoRequest;
+import cz.muni.fi.pa165.core.model.StewardDto;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @param <K> Key
+ * @author martinslovik
+ */
+public interface StewardFacade<K> {
+
+    StewardDto save(NewStewardDtoRequest newStewardDtoRequest);
+
+    Optional<StewardDto> findById(K id);
+
+    List<StewardDto> findAll();
+
+    void deleteById(K id);
+
+    void deleteAll();
+
+    StewardDto assignStewardFlight(Long stewardId, Long flightId);
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/steward/StewardFacadeImpl.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/steward/StewardFacadeImpl.java
new file mode 100644
index 0000000..63ba97c
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/facade/steward/StewardFacadeImpl.java
@@ -0,0 +1,85 @@
+package cz.muni.fi.pa165.core.facade.steward;
+
+import cz.muni.fi.pa165.core.data.domain.FlightSteward;
+import cz.muni.fi.pa165.core.data.domain.Steward;
+import cz.muni.fi.pa165.core.exceptions.ResourceNotFoundException;
+import cz.muni.fi.pa165.core.model.NewStewardDtoRequest;
+import cz.muni.fi.pa165.core.model.StewardDto;
+import cz.muni.fi.pa165.core.service.flight.FlightService;
+import cz.muni.fi.pa165.core.service.steward.StewardService;
+import org.modelmapper.ModelMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class StewardFacadeImpl implements StewardFacade<Long> {
+
+    private final StewardService stewardService;
+    private final FlightService flightService;
+    private final ModelMapper modelMapper;
+
+    @Autowired
+    public StewardFacadeImpl(StewardService stewardService, FlightService flightService, ModelMapper modelMapper) {
+        this.stewardService = stewardService;
+        this.flightService = flightService;
+        this.modelMapper = modelMapper;
+    }
+
+    @Override
+    public StewardDto save(NewStewardDtoRequest newStewardDtoRequest) {
+        var entityToSave = modelMapper.map(newStewardDtoRequest, Steward.class);
+        var savedEntity = stewardService.save(entityToSave);
+        return modelMapper.map(savedEntity, StewardDto.class);
+    }
+
+    @Override
+    public Optional<StewardDto> findById(Long id) {
+        return Optional.empty();
+    }
+
+    @Override
+    public List<StewardDto> findAll() {
+        return null;
+    }
+
+    @Override
+    public void deleteById(Long id) {
+
+    }
+
+    @Override
+    public void deleteAll() {
+
+    }
+
+    @Override
+    public StewardDto assignStewardFlight(Long stewardId, Long flightId) {
+        var stewardEntityOpt = stewardService.findById(stewardId);
+        var flightEntityOpt = flightService.findById(flightId);
+
+        if (stewardEntityOpt.isEmpty() || flightEntityOpt.isEmpty()) {
+            throw new ResourceNotFoundException("Not Found.");
+        }
+
+        var stewardEntity = stewardEntityOpt.get();
+        var flightEntity = flightEntityOpt.get();
+
+        var flightSteward = new FlightSteward();
+        flightSteward.setStewardId(stewardId);
+        flightSteward.setSteward(stewardEntity);
+        flightSteward.setFlightId(flightId);
+        flightSteward.setFlight(flightEntity);
+
+        flightEntity.setFlightSteward(flightSteward);
+        flightService.save(flightEntity);
+
+        stewardEntity.setFlightSteward(flightSteward);
+        stewardService.save(stewardEntity);
+
+        //TODO create DTO without nested members
+        return null;
+    }
+}
-- 
GitLab