fixed controllers and daos

REL-BRANCH-ClubhelperModel-0.0.1
Markus Kreth 5 years ago
parent fa352bbd32
commit db5d1cb957
  1. 218
      src/main/java/de/kreth/clubhelper/model/controller/AbstractController.java
  2. 22
      src/main/java/de/kreth/clubhelper/model/controller/AdressController.java
  3. 22
      src/main/java/de/kreth/clubhelper/model/controller/ContactController.java
  4. 74
      src/main/java/de/kreth/clubhelper/model/controller/PersonController.java
  5. 24
      src/main/java/de/kreth/clubhelper/model/controller/RelativeController.java
  6. 10
      src/main/java/de/kreth/clubhelper/model/dao/AdressDao.java
  7. 3
      src/main/java/de/kreth/clubhelper/model/dao/AttendanceDao.java
  8. 7
      src/main/java/de/kreth/clubhelper/model/dao/ContactDao.java
  9. 8
      src/main/java/de/kreth/clubhelper/model/dao/RelativeDao.java
  10. 209
      src/main/java/de/kreth/clubhelper/model/data/Relative.java

@ -12,6 +12,7 @@ import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.CrudRepository;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; 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. * Default Controller implementing all functionality for all {@link Data} types.
* *
* @param <T> * @param <T> Data type
* Data type
*/ */
@Controller
//@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'STAFF')") //@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'STAFF')")
public abstract class AbstractController<T extends BaseEntity, D extends CrudRepository<T, Long>> public abstract class AbstractController<T extends BaseEntity, D extends CrudRepository<T, Long>>
implements implements
ClubController<T> { ClubController<T> {
@Autowired @Autowired
protected D dao; protected D dao;
private Class<T> elementClass; private Class<T> elementClass;
public AbstractController(Class<T> element) { protected AbstractController(Class<T> element) {
super(); super();
this.elementClass = element; 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<T> iterableToList(Iterable<T> in) {
List<T> result = new ArrayList<>();
in.forEach(result::add);
return result;
}
@Override
@GetMapping(value = { "/", "" })
public List<T> getAll() {
Iterable<T> findAll = dao.findAll();
List<T> result = new ArrayList<>();
findAll.forEach(result::add);
return result;
}
@Override
@GetMapping(value = "/for/{id}")
public List<T> getByParentId(@PathVariable("id") long id) {
if (dao instanceof ClubhelperDao) {
ClubhelperDao<T> specialDao = (ClubhelperDao<T>) dao;
return specialDao.findByPersonId(id);
} }
return Collections.emptyList();
}
@Override @Override
@GetMapping(value = "/{id}", produces = "application/json") @GetMapping(value = "/changed/{changed}")
public T getById(@PathVariable("id") long id) { public List<T> getChangedSince(@PathVariable("changed") long changed) {
return dao.findById(id).orElseThrow(() -> new IllegalArgumentException(elementClass.getName() + " with id=" + id + " not found"));
}
protected List<T> iterableToList(Iterable<T> in) { if (dao instanceof ClubhelperDao) {
List<T> result = new ArrayList<>(); ClubhelperDao<T> specialDao = (ClubhelperDao<T>) dao;
in.forEach(result::add); return specialDao.findByChangedGreaterThan(new Date(changed));
return result;
} }
return Collections.emptyList();
@Override }
@GetMapping(value = {"/",
""}, produces = "application/json") @Override
public List<T> getAll() { @PutMapping(value = "/{id}")
Iterable<T> findAll = dao.findAll(); public T put(@PathVariable("id") long id, @RequestBody T toUpdate) {
List<T> result = new ArrayList<>();
findAll.forEach(result::add); LocalDateTime now = LocalDateTime.now();
return result; 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 dao.save(toUpdate);
@GetMapping(value = "/for/{id}", produces = "application/json") return toUpdate;
public List<T> getByParentId(@PathVariable("id") long id) { }
if (dao instanceof ClubhelperDao) {
ClubhelperDao<T> specialDao = (ClubhelperDao<T>) dao;
return specialDao.findByPersonId(id);
}
return Collections.emptyList();
}
@Override
@GetMapping(value = "/changed/{changed}", produces = "application/json")
public List<T> getChangedSince(@PathVariable("changed") long changed) {
if (dao instanceof ClubhelperDao) { @Override
ClubhelperDao<T> specialDao = (ClubhelperDao<T>) dao; @DeleteMapping(value = "/{id}")
return specialDao.findByChangedGreaterThan(new Date(changed)); public ResponseEntity<T> delete(@PathVariable("id") long id) {
} T byId = getById(id);
return Collections.emptyList(); if (not(byId.isDeleted())) {
dao.delete(byId);
} }
return ResponseEntity.ok(getById(id));
@Override }
@PutMapping(value = "/{id}", produces = "application/json")
public T put(@PathVariable("id") long id, @RequestBody T toUpdate) { @Override
@PostMapping(value = "/")
LocalDateTime now = LocalDateTime.now(); public T post(@RequestBody T toCreate) {
LocalDateTime created = toUpdate.getCreated(); return post(toCreate.getId(), toCreate);
LocalDateTime changed = null; }
if (toUpdate.getChanged() != null) { @Override
changed = toUpdate.getChanged(); @PostMapping(value = "/{id}")
long minutes = MINUTES.between(created, changed); public T post(@PathVariable("id") Long id, @RequestBody T toCreate) {
if (minutes < 1) { if (id == null) {
toUpdate.setChanged(now); id = -1L;
}
} else {
toUpdate.setChanged(now);
}
dao.save(toUpdate);
return toUpdate;
} }
toCreate.setId(id);
LocalDateTime now = LocalDateTime.now();
@Override toCreate.setChanged(now);
@DeleteMapping(value = "/{id}", produces = "application/json")
public ResponseEntity<T> delete(@PathVariable("id") long id) {
T byId = getById(id);
if (not(byId.isDeleted())) {
dao.delete(byId);
}
return ResponseEntity.ok(getById(id));
}
@Override if (toCreate.getCreated() == null) {
@PostMapping(value = "/", produces = "application/json") toCreate.setCreated(now);
public T post(@RequestBody T toCreate) {
return post(-1L, toCreate);
} }
@Override if (toCreate.getId() < 0) {
@PostMapping(value = "/{id}", produces = "application/json") return dao.save(toCreate);
public T post(@PathVariable("id") Long id, @RequestBody T toCreate) { } else {
if (id == null) { T byId = getById(toCreate.getId());
id = -1L; if (byId != null) {
} toCreate.setDeleted(null);
toCreate.setId(id); return dao.save(toCreate);
LocalDateTime now = LocalDateTime.now(); } else {
return dao.save(toCreate);
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);
}
}
} }
}
} }

@ -1,33 +1,19 @@
package de.kreth.clubhelper.model.controller; 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.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import de.kreth.clubhelper.model.dao.AdressDao; import de.kreth.clubhelper.model.dao.AdressDao;
import de.kreth.clubhelper.model.data.Adress; import de.kreth.clubhelper.model.data.Adress;
import de.kreth.clubhelper.model.data.Person;
@RestController @RestController
@RequestMapping("/adress") @RequestMapping("/adress")
@PreAuthorize("isAuthenticated()") @PreAuthorize("isAuthenticated()")
public class AdressController public class AdressController extends AbstractController<Adress, AdressDao> {
{
@Autowired
private AdressDao adressDao;
public List<Adress> getByParent(Person person) public AdressController() {
{ super(Adress.class);
return adressDao.findByPerson(person); }
}
public void delete(Adress a)
{
a.setDeleted(LocalDateTime.now());
adressDao.save(a);
}
} }

@ -1,33 +1,19 @@
package de.kreth.clubhelper.model.controller; 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.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import de.kreth.clubhelper.model.dao.ContactDao; import de.kreth.clubhelper.model.dao.ContactDao;
import de.kreth.clubhelper.model.data.Contact; import de.kreth.clubhelper.model.data.Contact;
import de.kreth.clubhelper.model.data.Person;
@RestController @RestController
@RequestMapping("/contact") @RequestMapping("/contact")
@PreAuthorize("isAuthenticated()") @PreAuthorize("isAuthenticated()")
public class ContactController public class ContactController extends AbstractController<Contact, ContactDao> {
{
@Autowired
private ContactDao contactDao;
public List<Contact> getByParent(Person person) public ContactController() {
{ super(Contact.class);
return contactDao.findByPerson(person); }
}
public void delete(Contact c)
{
c.setDeleted(LocalDateTime.now());
contactDao.save(c);
}
} }

@ -21,46 +21,42 @@ import io.swagger.annotations.ApiOperation;
@Controller @Controller
@RequestMapping("/person") @RequestMapping("/person")
@PreAuthorize("isAuthenticated()") @PreAuthorize("isAuthenticated()")
public class PersonController public class PersonController {
{ @Autowired
@Autowired private PersonDao personDao;
private PersonDao personDao;
@Autowired
private ContactController contactController;
@Autowired
private AdressController adressController;
@GetMapping @Autowired
@PreAuthorize("hasAnyRole('trainer', 'admin')") private ContactController contactController;
@ApiOperation("Get a list of all persons. Restricted to trainers and admins.")
public @ResponseBody Iterable<Person> getAll()
{
return personDao.findAll();
}
@GetMapping(value = "/{id}") @Autowired
public @ResponseBody Optional<Person> getById(@PathVariable("id") final long id) private AdressController adressController;
{
return personDao.findById(id);
}
@DeleteMapping(value = "/{id}") @GetMapping
public @ResponseBody Person delete(@PathVariable("id") final long id) @PreAuthorize("hasAnyRole('trainer', 'admin')")
{ @ApiOperation("Get a list of all persons. Restricted to trainers and admins.")
Optional<Person> optional = personDao.findById(id); public @ResponseBody Iterable<Person> getAll() {
if (optional.isPresent()) { return personDao.findAll();
Person person = optional.get(); }
for (Contact c : contactController.getByParent(person)) {
contactController.delete(c); @GetMapping(value = "/{id}")
} public @ResponseBody Optional<Person> getById(@PathVariable("id") final long id) {
for (Adress a : adressController.getByParent(person)) { return personDao.findById(id);
adressController.delete(a); }
}
person.setDeleted(LocalDateTime.now()); @DeleteMapping(value = "/{id}")
personDao.save(person); public @ResponseBody Person delete(@PathVariable("id") final long id) {
} Optional<Person> optional = personDao.findById(id);
return optional.orElseThrow(() -> new RuntimeException("Person not found by id=" + 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));
}
} }

@ -1,5 +1,7 @@
package de.kreth.clubhelper.model.controller; package de.kreth.clubhelper.model.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -11,17 +13,15 @@ import de.kreth.clubhelper.model.data.Relative;
@RequestMapping("/relative") @RequestMapping("/relative")
public class RelativeController extends AbstractController<Relative, RelativeDao> { public class RelativeController extends AbstractController<Relative, RelativeDao> {
@Autowired @Autowired
public RelativeController() { private RelativeDao relativeDao;
super(Relative.class);
} public RelativeController() {
// super(Relative.class);
// @Override }
// @RequestMapping(value = "/for/{id}", method = RequestMethod.GET)
// public List<Relative> getByParentId(@PathVariable("id") long id) {
// StringBuilder whereClause = new StringBuilder("person1=");
// whereClause.append(id).append(" OR person2=").append(id);
// return dao.getByWhere(whereClause.toString());
// }
@Override
public List<Relative> getByParentId(long id) {
return relativeDao.findByPerson1ORPerson2(id);
}
} }

@ -10,11 +10,11 @@ import de.kreth.clubhelper.model.data.Person;
public interface AdressDao extends CrudRepository<Adress, Long>, ClubhelperDao<Adress> { public interface AdressDao extends CrudRepository<Adress, Long>, ClubhelperDao<Adress> {
List<Adress> findByPerson(Person person); List<Adress> findByPerson(Person person);
@Override @Override
List<Adress> findByPersonId(long personId); List<Adress> findByPersonId(long personId);
@Override @Override
List<Adress> findByChangedGreaterThan(Date date); List<Adress> findByChangedGreaterThan(Date date);
} }

@ -10,7 +10,7 @@ import org.springframework.data.repository.CrudRepository;
import de.kreth.clubhelper.model.data.Attendance; import de.kreth.clubhelper.model.data.Attendance;
import de.kreth.clubhelper.model.data.Person; import de.kreth.clubhelper.model.data.Person;
public interface AttendanceDao extends CrudRepository<Attendance, Long> { public interface AttendanceDao extends CrudRepository<Attendance, Long>, ClubhelperDao<Attendance> {
List<Attendance> findByOnDate(LocalDate onDate); List<Attendance> findByOnDate(LocalDate onDate);
@ -18,6 +18,7 @@ public interface AttendanceDao extends CrudRepository<Attendance, Long> {
Attendance findByPersonAndOnDate(Person person, Date onDate); Attendance findByPersonAndOnDate(Person person, Date onDate);
@Override
List<Attendance> findByPersonId(long personId); List<Attendance> findByPersonId(long personId);
List<Attendance> findByChangedGreaterThan(LocalDateTime date); List<Attendance> findByChangedGreaterThan(LocalDateTime date);

@ -7,8 +7,11 @@ import org.springframework.data.repository.CrudRepository;
import de.kreth.clubhelper.model.data.Contact; import de.kreth.clubhelper.model.data.Contact;
import de.kreth.clubhelper.model.data.Person; import de.kreth.clubhelper.model.data.Person;
public interface ContactDao extends CrudRepository<Contact, Integer> { public interface ContactDao extends CrudRepository<Contact, Long>, ClubhelperDao<Contact> {
List<Contact> findByPerson(Person person); List<Contact> findByPerson(Person person);
@Override
List<Contact> findByPersonId(long personId);
} }

@ -1,9 +1,13 @@
package de.kreth.clubhelper.model.dao; package de.kreth.clubhelper.model.dao;
import java.util.List;
import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.CrudRepository;
import de.kreth.clubhelper.model.data.Relative; import de.kreth.clubhelper.model.data.Relative;
public interface RelativeDao extends CrudRepository<Relative, Long> public interface RelativeDao extends CrudRepository<Relative, Long> {
{
List<Relative> findByPerson1ORPerson2(long personId);
} }

@ -8,7 +8,6 @@ import javax.persistence.Inheritance;
import javax.persistence.InheritanceType; import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.Table; import javax.persistence.Table;
/** /**
@ -17,114 +16,102 @@ import javax.persistence.Table;
@Entity @Entity
@Table(name = "relative") @Table(name = "relative")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@NamedQuery(name = Relative.QUERY_FINDALL, query = "SELECT r FROM Relative r") public class Relative extends BaseEntity implements Serializable {
public class Relative extends BaseEntity implements Serializable
{ private static final long serialVersionUID = 1L;
public static final String QUERY_FINDALL = "Relative.findAll";
@Column(name = "TO_PERSON1_RELATION") @Column(name = "TO_PERSON1_RELATION")
private String toPerson1Relation; private String toPerson1Relation;
@Column(name = "TO_PERSON2_RELATION")
private String toPerson2Relation; @Column(name = "TO_PERSON2_RELATION")
// bi-directional many-to-one association to Person private String toPerson2Relation;
@ManyToOne
@JoinColumn(name = "person1") // bi-directional many-to-one association to Person
private Person person1Bean; @ManyToOne
// bi-directional many-to-one association to Person @JoinColumn(name = "person1")
@ManyToOne private Person person1Bean;
@JoinColumn(name = "person2")
private Person person2Bean; // bi-directional many-to-one association to Person
@ManyToOne
public Relative() @JoinColumn(name = "person2")
{ private Person person2Bean;
}
public Relative() {
public Relative(long id, String toPerson1Relation, String toPerson2Relation, Person person1Bean, Person person2Bean) }
{
super(); public Relative(long id, String toPerson1Relation, String toPerson2Relation, Person person1Bean,
setId(id); Person person2Bean) {
this.toPerson1Relation = toPerson1Relation; super();
this.toPerson2Relation = toPerson2Relation; setId(id);
this.person1Bean = person1Bean; this.toPerson1Relation = toPerson1Relation;
this.person2Bean = person2Bean; this.toPerson2Relation = toPerson2Relation;
} this.person1Bean = person1Bean;
this.person2Bean = person2Bean;
}
public String getToPerson1Relation()
{ public String getToPerson1Relation() {
return toPerson1Relation; return toPerson1Relation;
} }
public void setToPerson1Relation(String toPerson1Relation) public void setToPerson1Relation(String toPerson1Relation) {
{ this.toPerson1Relation = toPerson1Relation;
this.toPerson1Relation = toPerson1Relation; }
}
public String getToPerson2Relation() {
public String getToPerson2Relation() return toPerson2Relation;
{ }
return toPerson2Relation;
} public void setToPerson2Relation(String toPerson2Relation) {
this.toPerson2Relation = toPerson2Relation;
public void setToPerson2Relation(String toPerson2Relation) }
{
this.toPerson2Relation = toPerson2Relation; public Person getPerson1Bean() {
} return person1Bean;
}
public Person getPerson1Bean()
{ public void setPerson1Bean(Person person1Bean) {
return person1Bean; this.person1Bean = person1Bean;
} }
public void setPerson1Bean(Person person1Bean) public Person getPerson2Bean() {
{ return person2Bean;
this.person1Bean = person1Bean; }
}
public void setPerson2Bean(Person person2Bean) {
public Person getPerson2Bean() this.person2Bean = person2Bean;
{ }
return person2Bean;
} public Relation getRelationTo(Person person) {
if (person == null) {
public void setPerson2Bean(Person person2Bean) return null;
{ }
this.person2Bean = person2Bean; if (person.equals(person1Bean)) {
} return new Relation(person2Bean, toPerson2Relation);
} else if (person.equals(person2Bean)) {
public Relation getRelationTo(Person person) return new Relation(person1Bean, toPerson1Relation);
{ } else {
if (person == null) { return null;
return null; }
} }
if (person.equals(person1Bean)) {
return new Relation(person2Bean, toPerson2Relation); @Override
} public int hashCode() {
else if (person.equals(person2Bean)) { final int prime = 73;
return new Relation(person1Bean, toPerson1Relation); int result = super.hashCode();
} result = prime * result;
else { return result;
return null; }
}
} @Override
public boolean equals(Object obj) {
@Override if (this == obj)
public int hashCode() return true;
{ return super.equals(obj);
final int prime = 73; }
int result = super.hashCode();
result = prime * result; @Override
return result; public String toString() {
} return "Relative [person1Bean=" + person1Bean + ", toPerson2Relation=" + toPerson2Relation + ", person2Bean="
+ person2Bean + "]";
@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 + "]";
}
} }

Loading…
Cancel
Save