diff --git a/src/main/java/de/kreth/clubhelper/model/controller/AbstractController.java b/src/main/java/de/kreth/clubhelper/model/controller/AbstractController.java index 9f60fa2..994ff24 100644 --- a/src/main/java/de/kreth/clubhelper/model/controller/AbstractController.java +++ b/src/main/java/de/kreth/clubhelper/model/controller/AbstractController.java @@ -69,6 +69,7 @@ public abstract class AbstractController getByParentId(@PathVariable("id") long id) { if (dao instanceof ClubhelperDao) { + @SuppressWarnings("unchecked") ClubhelperDao specialDao = (ClubhelperDao) dao; return specialDao.findByPersonId(id); } @@ -80,6 +81,7 @@ public abstract class AbstractController getChangedSince(@PathVariable("changed") long changed) { if (dao instanceof ClubhelperDao) { + @SuppressWarnings("unchecked") ClubhelperDao specialDao = (ClubhelperDao) dao; return specialDao.findByChangedGreaterThan(new Date(changed)); } diff --git a/src/main/java/de/kreth/clubhelper/model/controller/RelativeController.java b/src/main/java/de/kreth/clubhelper/model/controller/RelativeController.java index f49fbd3..6da7fb5 100644 --- a/src/main/java/de/kreth/clubhelper/model/controller/RelativeController.java +++ b/src/main/java/de/kreth/clubhelper/model/controller/RelativeController.java @@ -1,12 +1,16 @@ package de.kreth.clubhelper.model.controller; import java.util.List; +import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.annotation.JsonIgnore; + import de.kreth.clubhelper.model.dao.RelativeDao; +import de.kreth.clubhelper.model.data.Person; import de.kreth.clubhelper.model.data.Relative; @RestController @@ -22,6 +26,69 @@ public class RelativeController extends AbstractController getByParentId(long id) { - return relativeDao.findByPerson1ORPerson2(id); + return relativeDao.findByPersonId1OrPerson2Id(id).stream() + .map(r -> map(id, r)) + .collect(Collectors.toList()); + } + + private Relation map(long forPersonId, Relative relative) { + Relation r; + if (relative.getPerson2Bean().getId() == forPersonId) { + r = new Relation(relative.getToPerson1Relation(), relative.getPerson1Bean()); + } else { + r = new Relation(relative.getToPerson2Relation(), relative.getPerson2Bean()); + } + r.setChanged(relative.getChanged()); + r.setCreated(relative.getCreated()); + r.setId(relative.getId()); + r.setDeleted(relative.getDeleted()); + return r; + } + + public class Relation extends Relative { + + private static final long serialVersionUID = -4881464721582462186L; + + private final String relationType; + private final Person relative; + + private Relation(String relationType, Person relative) { + super(); + this.relationType = relationType; + this.relative = relative; + + } + + public String getRelationType() { + return relationType; + } + + public Person getRelative() { + return relative; + } + + @JsonIgnore + @Override + public Person getPerson1Bean() { + return super.getPerson1Bean(); + } + + @JsonIgnore + @Override + public Person getPerson2Bean() { + return super.getPerson2Bean(); + } + + @JsonIgnore + @Override + public String getToPerson1Relation() { + return super.getToPerson1Relation(); + } + + @JsonIgnore + @Override + public String getToPerson2Relation() { + return super.getToPerson2Relation(); + } } } diff --git a/src/main/java/de/kreth/clubhelper/model/dao/RelativeDao.java b/src/main/java/de/kreth/clubhelper/model/dao/RelativeDao.java index 1210535..f1e9751 100644 --- a/src/main/java/de/kreth/clubhelper/model/dao/RelativeDao.java +++ b/src/main/java/de/kreth/clubhelper/model/dao/RelativeDao.java @@ -2,12 +2,14 @@ package de.kreth.clubhelper.model.dao; import java.util.List; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import de.kreth.clubhelper.model.data.Relative; public interface RelativeDao extends CrudRepository { - List findByPerson1ORPerson2(long personId); + @Query(value = "SELECT * FROM clubhelper.relative r where r.person1=?1 or r.person2=?1", nativeQuery = true) + List findByPersonId1OrPerson2Id(long personId); } diff --git a/src/main/java/de/kreth/clubhelper/model/dao/StartpassDao.java b/src/main/java/de/kreth/clubhelper/model/dao/StartpassDao.java index b664ccb..c2e8af6 100644 --- a/src/main/java/de/kreth/clubhelper/model/dao/StartpassDao.java +++ b/src/main/java/de/kreth/clubhelper/model/dao/StartpassDao.java @@ -4,6 +4,5 @@ import org.springframework.data.repository.CrudRepository; import de.kreth.clubhelper.model.data.Startpass; -public interface StartpassDao extends CrudRepository -{ +public interface StartpassDao extends CrudRepository, ClubhelperDao { }