From db5d1cb95721061992378e2fa631bffe3a39ae4c Mon Sep 17 00:00:00 2001 From: Markus Kreth Date: Sat, 12 Sep 2020 21:26:35 +0200 Subject: [PATCH] fixed controllers and daos --- .../model/controller/AbstractController.java | 218 +++++++++--------- .../model/controller/AdressController.java | 22 +- .../model/controller/ContactController.java | 22 +- .../model/controller/PersonController.java | 74 +++--- .../model/controller/RelativeController.java | 24 +- .../kreth/clubhelper/model/dao/AdressDao.java | 10 +- .../clubhelper/model/dao/AttendanceDao.java | 3 +- .../clubhelper/model/dao/ContactDao.java | 7 +- .../clubhelper/model/dao/RelativeDao.java | 8 +- .../kreth/clubhelper/model/data/Relative.java | 209 ++++++++--------- 10 files changed, 280 insertions(+), 317 deletions(-) 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 ff9e871..9f60fa2 100644 --- a/src/main/java/de/kreth/clubhelper/model/controller/AbstractController.java +++ b/src/main/java/de/kreth/clubhelper/model/controller/AbstractController.java @@ -12,6 +12,7 @@ import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.repository.CrudRepository; import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -25,131 +26,130 @@ import de.kreth.clubhelper.model.data.BaseEntity; /** * Default Controller implementing all functionality for all {@link Data} types. * - * @param - * Data type + * @param Data type */ - +@Controller //@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'STAFF')") public abstract class AbstractController> - implements - ClubController { - - @Autowired - protected D dao; - private Class elementClass; - - public AbstractController(Class element) { - super(); - this.elementClass = element; + implements + ClubController { + + @Autowired + protected D dao; + private Class elementClass; + + protected AbstractController(Class element) { + super(); + this.elementClass = element; + } + + @Override + @GetMapping(value = "/{id}") + public T getById(@PathVariable("id") long id) { + return dao.findById(id).orElseThrow( + () -> new IllegalArgumentException(elementClass.getName() + " with id=" + id + " not found")); + } + + protected List iterableToList(Iterable in) { + List result = new ArrayList<>(); + in.forEach(result::add); + return result; + } + + @Override + @GetMapping(value = { "/", "" }) + public List getAll() { + Iterable findAll = dao.findAll(); + List result = new ArrayList<>(); + findAll.forEach(result::add); + return result; + } + + @Override + @GetMapping(value = "/for/{id}") + public List getByParentId(@PathVariable("id") long id) { + if (dao instanceof ClubhelperDao) { + ClubhelperDao specialDao = (ClubhelperDao) dao; + return specialDao.findByPersonId(id); } + return Collections.emptyList(); + } - @Override - @GetMapping(value = "/{id}", produces = "application/json") - public T getById(@PathVariable("id") long id) { - return dao.findById(id).orElseThrow(() -> new IllegalArgumentException(elementClass.getName() + " with id=" + id + " not found")); - } + @Override + @GetMapping(value = "/changed/{changed}") + public List getChangedSince(@PathVariable("changed") long changed) { - protected List iterableToList(Iterable in) { - List result = new ArrayList<>(); - in.forEach(result::add); - return result; + if (dao instanceof ClubhelperDao) { + ClubhelperDao specialDao = (ClubhelperDao) dao; + return specialDao.findByChangedGreaterThan(new Date(changed)); } - - @Override - @GetMapping(value = {"/", - ""}, produces = "application/json") - public List getAll() { - Iterable findAll = dao.findAll(); - List result = new ArrayList<>(); - findAll.forEach(result::add); - return result; + return Collections.emptyList(); + } + + @Override + @PutMapping(value = "/{id}") + public T put(@PathVariable("id") long id, @RequestBody T toUpdate) { + + LocalDateTime now = LocalDateTime.now(); + LocalDateTime created = toUpdate.getCreated(); + LocalDateTime changed = null; + + if (toUpdate.getChanged() != null) { + changed = toUpdate.getChanged(); + long minutes = MINUTES.between(created, changed); + if (minutes < 1) { + toUpdate.setChanged(now); + } + } else { + toUpdate.setChanged(now); } - @Override - @GetMapping(value = "/for/{id}", produces = "application/json") - public List getByParentId(@PathVariable("id") long id) { - if (dao instanceof ClubhelperDao) { - ClubhelperDao specialDao = (ClubhelperDao) dao; - return specialDao.findByPersonId(id); - } - return Collections.emptyList(); - } - - @Override - @GetMapping(value = "/changed/{changed}", produces = "application/json") - public List getChangedSince(@PathVariable("changed") long changed) { + dao.save(toUpdate); + return toUpdate; + } - if (dao instanceof ClubhelperDao) { - ClubhelperDao specialDao = (ClubhelperDao) dao; - return specialDao.findByChangedGreaterThan(new Date(changed)); - } - return Collections.emptyList(); + @Override + @DeleteMapping(value = "/{id}") + public ResponseEntity delete(@PathVariable("id") long id) { + T byId = getById(id); + if (not(byId.isDeleted())) { + dao.delete(byId); } - - @Override - @PutMapping(value = "/{id}", produces = "application/json") - public T put(@PathVariable("id") long id, @RequestBody T toUpdate) { - - LocalDateTime now = LocalDateTime.now(); - LocalDateTime created = toUpdate.getCreated(); - LocalDateTime changed = null; - - if (toUpdate.getChanged() != null) { - changed = toUpdate.getChanged(); - long minutes = MINUTES.between(created, changed); - if (minutes < 1) { - toUpdate.setChanged(now); - } - } else { - toUpdate.setChanged(now); - } - - dao.save(toUpdate); - return toUpdate; + return ResponseEntity.ok(getById(id)); + } + + @Override + @PostMapping(value = "/") + public T post(@RequestBody T toCreate) { + return post(toCreate.getId(), toCreate); + } + + @Override + @PostMapping(value = "/{id}") + public T post(@PathVariable("id") Long id, @RequestBody T toCreate) { + if (id == null) { + id = -1L; } + toCreate.setId(id); + LocalDateTime now = LocalDateTime.now(); - @Override - @DeleteMapping(value = "/{id}", produces = "application/json") - public ResponseEntity delete(@PathVariable("id") long id) { - T byId = getById(id); - if (not(byId.isDeleted())) { - dao.delete(byId); - } - return ResponseEntity.ok(getById(id)); - } + toCreate.setChanged(now); - @Override - @PostMapping(value = "/", produces = "application/json") - public T post(@RequestBody T toCreate) { - return post(-1L, toCreate); + if (toCreate.getCreated() == null) { + toCreate.setCreated(now); } - @Override - @PostMapping(value = "/{id}", produces = "application/json") - public T post(@PathVariable("id") Long id, @RequestBody T toCreate) { - if (id == null) { - id = -1L; - } - toCreate.setId(id); - LocalDateTime now = LocalDateTime.now(); - - toCreate.setChanged(now); - - if (toCreate.getCreated() == null) { - toCreate.setCreated(now); - } - - if (toCreate.getId() < 0) { - return dao.save(toCreate); - } else { - T byId = getById(toCreate.getId()); - if (byId != null) { - toCreate.setDeleted(null); - return dao.save(toCreate); - } else { - return dao.save(toCreate); - } - } + if (toCreate.getId() < 0) { + return dao.save(toCreate); + } else { + T byId = getById(toCreate.getId()); + if (byId != null) { + toCreate.setDeleted(null); + return dao.save(toCreate); + } else { + return dao.save(toCreate); + } } + } } \ No newline at end of file diff --git a/src/main/java/de/kreth/clubhelper/model/controller/AdressController.java b/src/main/java/de/kreth/clubhelper/model/controller/AdressController.java index 5ce356e..68a77f0 100644 --- a/src/main/java/de/kreth/clubhelper/model/controller/AdressController.java +++ b/src/main/java/de/kreth/clubhelper/model/controller/AdressController.java @@ -1,33 +1,19 @@ package de.kreth.clubhelper.model.controller; -import java.time.LocalDateTime; -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import de.kreth.clubhelper.model.dao.AdressDao; import de.kreth.clubhelper.model.data.Adress; -import de.kreth.clubhelper.model.data.Person; @RestController @RequestMapping("/adress") @PreAuthorize("isAuthenticated()") -public class AdressController -{ - @Autowired - private AdressDao adressDao; +public class AdressController extends AbstractController { - public List getByParent(Person person) - { - return adressDao.findByPerson(person); - } + public AdressController() { + super(Adress.class); + } - public void delete(Adress a) - { - a.setDeleted(LocalDateTime.now()); - adressDao.save(a); - } } diff --git a/src/main/java/de/kreth/clubhelper/model/controller/ContactController.java b/src/main/java/de/kreth/clubhelper/model/controller/ContactController.java index 576de01..a546ec7 100644 --- a/src/main/java/de/kreth/clubhelper/model/controller/ContactController.java +++ b/src/main/java/de/kreth/clubhelper/model/controller/ContactController.java @@ -1,33 +1,19 @@ package de.kreth.clubhelper.model.controller; -import java.time.LocalDateTime; -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import de.kreth.clubhelper.model.dao.ContactDao; import de.kreth.clubhelper.model.data.Contact; -import de.kreth.clubhelper.model.data.Person; @RestController @RequestMapping("/contact") @PreAuthorize("isAuthenticated()") -public class ContactController -{ - @Autowired - private ContactDao contactDao; +public class ContactController extends AbstractController { - public List getByParent(Person person) - { - return contactDao.findByPerson(person); - } + public ContactController() { + super(Contact.class); + } - public void delete(Contact c) - { - c.setDeleted(LocalDateTime.now()); - contactDao.save(c); - } } diff --git a/src/main/java/de/kreth/clubhelper/model/controller/PersonController.java b/src/main/java/de/kreth/clubhelper/model/controller/PersonController.java index 5c46616..f6febca 100644 --- a/src/main/java/de/kreth/clubhelper/model/controller/PersonController.java +++ b/src/main/java/de/kreth/clubhelper/model/controller/PersonController.java @@ -21,46 +21,42 @@ import io.swagger.annotations.ApiOperation; @Controller @RequestMapping("/person") @PreAuthorize("isAuthenticated()") -public class PersonController -{ - @Autowired - private PersonDao personDao; - - @Autowired - private ContactController contactController; - - @Autowired - private AdressController adressController; +public class PersonController { + @Autowired + private PersonDao personDao; - @GetMapping - @PreAuthorize("hasAnyRole('trainer', 'admin')") - @ApiOperation("Get a list of all persons. Restricted to trainers and admins.") - public @ResponseBody Iterable getAll() - { - return personDao.findAll(); - } + @Autowired + private ContactController contactController; - @GetMapping(value = "/{id}") - public @ResponseBody Optional getById(@PathVariable("id") final long id) - { - return personDao.findById(id); - } + @Autowired + private AdressController adressController; - @DeleteMapping(value = "/{id}") - public @ResponseBody Person delete(@PathVariable("id") final long id) - { - Optional optional = personDao.findById(id); - if (optional.isPresent()) { - Person person = optional.get(); - for (Contact c : contactController.getByParent(person)) { - contactController.delete(c); - } - for (Adress a : adressController.getByParent(person)) { - adressController.delete(a); - } - person.setDeleted(LocalDateTime.now()); - personDao.save(person); - } - return optional.orElseThrow(() -> new RuntimeException("Person not found by id=" + id)); - } + @GetMapping + @PreAuthorize("hasAnyRole('trainer', 'admin')") + @ApiOperation("Get a list of all persons. Restricted to trainers and admins.") + public @ResponseBody Iterable getAll() { + return personDao.findAll(); + } + + @GetMapping(value = "/{id}") + public @ResponseBody Optional getById(@PathVariable("id") final long id) { + return personDao.findById(id); + } + + @DeleteMapping(value = "/{id}") + public @ResponseBody Person delete(@PathVariable("id") final long id) { + Optional optional = personDao.findById(id); + if (optional.isPresent()) { + Person person = optional.get(); + for (Contact c : contactController.getByParentId(person.getId())) { + contactController.delete(c.getId()); + } + for (Adress a : adressController.getByParentId(person.getId())) { + adressController.delete(a.getId()); + } + person.setDeleted(LocalDateTime.now()); + personDao.save(person); + } + return optional.orElseThrow(() -> new RuntimeException("Person not found by id=" + id)); + } } 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 25c29e2..f49fbd3 100644 --- a/src/main/java/de/kreth/clubhelper/model/controller/RelativeController.java +++ b/src/main/java/de/kreth/clubhelper/model/controller/RelativeController.java @@ -1,5 +1,7 @@ package de.kreth.clubhelper.model.controller; +import java.util.List; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -11,17 +13,15 @@ import de.kreth.clubhelper.model.data.Relative; @RequestMapping("/relative") public class RelativeController extends AbstractController { - @Autowired - public RelativeController() { - super(Relative.class); - } -// -// @Override -// @RequestMapping(value = "/for/{id}", method = RequestMethod.GET) -// public List getByParentId(@PathVariable("id") long id) { -// StringBuilder whereClause = new StringBuilder("person1="); -// whereClause.append(id).append(" OR person2=").append(id); -// return dao.getByWhere(whereClause.toString()); -// } + @Autowired + private RelativeDao relativeDao; + + public RelativeController() { + super(Relative.class); + } + @Override + public List getByParentId(long id) { + return relativeDao.findByPerson1ORPerson2(id); + } } diff --git a/src/main/java/de/kreth/clubhelper/model/dao/AdressDao.java b/src/main/java/de/kreth/clubhelper/model/dao/AdressDao.java index 37abb2b..1250f59 100644 --- a/src/main/java/de/kreth/clubhelper/model/dao/AdressDao.java +++ b/src/main/java/de/kreth/clubhelper/model/dao/AdressDao.java @@ -10,11 +10,11 @@ import de.kreth.clubhelper.model.data.Person; public interface AdressDao extends CrudRepository, ClubhelperDao { - List findByPerson(Person person); + List findByPerson(Person person); - @Override - List findByPersonId(long personId); + @Override + List findByPersonId(long personId); - @Override - List findByChangedGreaterThan(Date date); + @Override + List findByChangedGreaterThan(Date date); } diff --git a/src/main/java/de/kreth/clubhelper/model/dao/AttendanceDao.java b/src/main/java/de/kreth/clubhelper/model/dao/AttendanceDao.java index ec9d89d..1f41eb1 100644 --- a/src/main/java/de/kreth/clubhelper/model/dao/AttendanceDao.java +++ b/src/main/java/de/kreth/clubhelper/model/dao/AttendanceDao.java @@ -10,7 +10,7 @@ import org.springframework.data.repository.CrudRepository; import de.kreth.clubhelper.model.data.Attendance; import de.kreth.clubhelper.model.data.Person; -public interface AttendanceDao extends CrudRepository { +public interface AttendanceDao extends CrudRepository, ClubhelperDao { List findByOnDate(LocalDate onDate); @@ -18,6 +18,7 @@ public interface AttendanceDao extends CrudRepository { Attendance findByPersonAndOnDate(Person person, Date onDate); + @Override List findByPersonId(long personId); List findByChangedGreaterThan(LocalDateTime date); diff --git a/src/main/java/de/kreth/clubhelper/model/dao/ContactDao.java b/src/main/java/de/kreth/clubhelper/model/dao/ContactDao.java index 2bf0023..13f5ec5 100644 --- a/src/main/java/de/kreth/clubhelper/model/dao/ContactDao.java +++ b/src/main/java/de/kreth/clubhelper/model/dao/ContactDao.java @@ -7,8 +7,11 @@ import org.springframework.data.repository.CrudRepository; import de.kreth.clubhelper.model.data.Contact; import de.kreth.clubhelper.model.data.Person; -public interface ContactDao extends CrudRepository { +public interface ContactDao extends CrudRepository, ClubhelperDao { - List findByPerson(Person person); + List findByPerson(Person person); + + @Override + List findByPersonId(long personId); } 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 c4c7ea4..1210535 100644 --- a/src/main/java/de/kreth/clubhelper/model/dao/RelativeDao.java +++ b/src/main/java/de/kreth/clubhelper/model/dao/RelativeDao.java @@ -1,9 +1,13 @@ package de.kreth.clubhelper.model.dao; +import java.util.List; + import org.springframework.data.repository.CrudRepository; import de.kreth.clubhelper.model.data.Relative; -public interface RelativeDao extends CrudRepository -{ +public interface RelativeDao extends CrudRepository { + + List findByPerson1ORPerson2(long personId); + } diff --git a/src/main/java/de/kreth/clubhelper/model/data/Relative.java b/src/main/java/de/kreth/clubhelper/model/data/Relative.java index 1f37cc9..8c17057 100644 --- a/src/main/java/de/kreth/clubhelper/model/data/Relative.java +++ b/src/main/java/de/kreth/clubhelper/model/data/Relative.java @@ -8,7 +8,6 @@ import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; -import javax.persistence.NamedQuery; import javax.persistence.Table; /** @@ -17,114 +16,102 @@ import javax.persistence.Table; @Entity @Table(name = "relative") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) -@NamedQuery(name = Relative.QUERY_FINDALL, query = "SELECT r FROM Relative r") -public class Relative extends BaseEntity implements Serializable -{ - public static final String QUERY_FINDALL = "Relative.findAll"; - @Column(name = "TO_PERSON1_RELATION") - private String toPerson1Relation; - @Column(name = "TO_PERSON2_RELATION") - private String toPerson2Relation; - // bi-directional many-to-one association to Person - @ManyToOne - @JoinColumn(name = "person1") - private Person person1Bean; - // bi-directional many-to-one association to Person - @ManyToOne - @JoinColumn(name = "person2") - private Person person2Bean; - - public Relative() - { - } - - public Relative(long id, String toPerson1Relation, String toPerson2Relation, Person person1Bean, Person person2Bean) - { - super(); - setId(id); - this.toPerson1Relation = toPerson1Relation; - this.toPerson2Relation = toPerson2Relation; - this.person1Bean = person1Bean; - this.person2Bean = person2Bean; - } - - - public String getToPerson1Relation() - { - return toPerson1Relation; - } - - public void setToPerson1Relation(String toPerson1Relation) - { - this.toPerson1Relation = toPerson1Relation; - } - - public String getToPerson2Relation() - { - return toPerson2Relation; - } - - public void setToPerson2Relation(String toPerson2Relation) - { - this.toPerson2Relation = toPerson2Relation; - } - - public Person getPerson1Bean() - { - return person1Bean; - } - - public void setPerson1Bean(Person person1Bean) - { - this.person1Bean = person1Bean; - } - - public Person getPerson2Bean() - { - return person2Bean; - } - - public void setPerson2Bean(Person person2Bean) - { - this.person2Bean = person2Bean; - } - - public Relation getRelationTo(Person person) - { - if (person == null) { - return null; - } - if (person.equals(person1Bean)) { - return new Relation(person2Bean, toPerson2Relation); - } - else if (person.equals(person2Bean)) { - return new Relation(person1Bean, toPerson1Relation); - } - else { - return null; - } - } - - @Override - public int hashCode() - { - final int prime = 73; - int result = super.hashCode(); - result = prime * result; - return result; - } - - @Override - public boolean equals(Object obj) - { - if (this == obj) - return true; - return super.equals(obj); - } - - @Override - public String toString() - { - return "Relative [person1Bean=" + person1Bean + ", toPerson2Relation=" + toPerson2Relation + ", person2Bean=" + person2Bean + "]"; - } +public class Relative extends BaseEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + @Column(name = "TO_PERSON1_RELATION") + private String toPerson1Relation; + + @Column(name = "TO_PERSON2_RELATION") + private String toPerson2Relation; + + // bi-directional many-to-one association to Person + @ManyToOne + @JoinColumn(name = "person1") + private Person person1Bean; + + // bi-directional many-to-one association to Person + @ManyToOne + @JoinColumn(name = "person2") + private Person person2Bean; + + public Relative() { + } + + public Relative(long id, String toPerson1Relation, String toPerson2Relation, Person person1Bean, + Person person2Bean) { + super(); + setId(id); + this.toPerson1Relation = toPerson1Relation; + this.toPerson2Relation = toPerson2Relation; + this.person1Bean = person1Bean; + this.person2Bean = person2Bean; + } + + public String getToPerson1Relation() { + return toPerson1Relation; + } + + public void setToPerson1Relation(String toPerson1Relation) { + this.toPerson1Relation = toPerson1Relation; + } + + public String getToPerson2Relation() { + return toPerson2Relation; + } + + public void setToPerson2Relation(String toPerson2Relation) { + this.toPerson2Relation = toPerson2Relation; + } + + public Person getPerson1Bean() { + return person1Bean; + } + + public void setPerson1Bean(Person person1Bean) { + this.person1Bean = person1Bean; + } + + public Person getPerson2Bean() { + return person2Bean; + } + + public void setPerson2Bean(Person person2Bean) { + this.person2Bean = person2Bean; + } + + public Relation getRelationTo(Person person) { + if (person == null) { + return null; + } + if (person.equals(person1Bean)) { + return new Relation(person2Bean, toPerson2Relation); + } else if (person.equals(person2Bean)) { + return new Relation(person1Bean, toPerson1Relation); + } else { + return null; + } + } + + @Override + public int hashCode() { + final int prime = 73; + int result = super.hashCode(); + result = prime * result; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + return super.equals(obj); + } + + @Override + public String toString() { + return "Relative [person1Bean=" + person1Bean + ", toPerson2Relation=" + toPerson2Relation + ", person2Bean=" + + person2Bean + "]"; + } }