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. 80
      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.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 <T>
* Data type
* @param <T> Data type
*/
@Controller
//@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'STAFF')")
public abstract class AbstractController<T extends BaseEntity, D extends CrudRepository<T, Long>>
implements
ClubController<T> {
@Autowired
protected D dao;
private Class<T> elementClass;
public AbstractController(Class<T> element) {
super();
this.elementClass = element;
implements
ClubController<T> {
@Autowired
protected D dao;
private Class<T> elementClass;
protected AbstractController(Class<T> 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<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
@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<T> getChangedSince(@PathVariable("changed") long changed) {
protected List<T> iterableToList(Iterable<T> in) {
List<T> result = new ArrayList<>();
in.forEach(result::add);
return result;
if (dao instanceof ClubhelperDao) {
ClubhelperDao<T> specialDao = (ClubhelperDao<T>) dao;
return specialDao.findByChangedGreaterThan(new Date(changed));
}
@Override
@GetMapping(value = {"/",
""}, produces = "application/json")
public List<T> getAll() {
Iterable<T> findAll = dao.findAll();
List<T> 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<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) {
dao.save(toUpdate);
return toUpdate;
}
if (dao instanceof ClubhelperDao) {
ClubhelperDao<T> specialDao = (ClubhelperDao<T>) dao;
return specialDao.findByChangedGreaterThan(new Date(changed));
}
return Collections.emptyList();
@Override
@DeleteMapping(value = "/{id}")
public ResponseEntity<T> 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<T> 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);
}
}
}
}

@ -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<Adress, AdressDao> {
public List<Adress> getByParent(Person person)
{
return adressDao.findByPerson(person);
}
public AdressController() {
super(Adress.class);
}
public void delete(Adress a)
{
a.setDeleted(LocalDateTime.now());
adressDao.save(a);
}
}

@ -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<Contact, ContactDao> {
public List<Contact> getByParent(Person person)
{
return contactDao.findByPerson(person);
}
public ContactController() {
super(Contact.class);
}
public void delete(Contact c)
{
c.setDeleted(LocalDateTime.now());
contactDao.save(c);
}
}

@ -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;
@GetMapping
@PreAuthorize("hasAnyRole('trainer', 'admin')")
@ApiOperation("Get a list of all persons. Restricted to trainers and admins.")
public @ResponseBody Iterable<Person> getAll()
{
return personDao.findAll();
}
@GetMapping(value = "/{id}")
public @ResponseBody Optional<Person> getById(@PathVariable("id") final long id)
{
return personDao.findById(id);
}
@DeleteMapping(value = "/{id}")
public @ResponseBody Person delete(@PathVariable("id") final long id)
{
Optional<Person> 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));
}
public class PersonController {
@Autowired
private PersonDao personDao;
@Autowired
private ContactController contactController;
@Autowired
private AdressController adressController;
@GetMapping
@PreAuthorize("hasAnyRole('trainer', 'admin')")
@ApiOperation("Get a list of all persons. Restricted to trainers and admins.")
public @ResponseBody Iterable<Person> getAll() {
return personDao.findAll();
}
@GetMapping(value = "/{id}")
public @ResponseBody Optional<Person> getById(@PathVariable("id") final long id) {
return personDao.findById(id);
}
@DeleteMapping(value = "/{id}")
public @ResponseBody Person delete(@PathVariable("id") final long id) {
Optional<Person> 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));
}
}

@ -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<Relative, RelativeDao> {
@Autowired
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());
// }
@Autowired
private RelativeDao relativeDao;
public RelativeController() {
super(Relative.class);
}
@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> {
List<Adress> findByPerson(Person person);
List<Adress> findByPerson(Person person);
@Override
List<Adress> findByPersonId(long personId);
@Override
List<Adress> findByPersonId(long personId);
@Override
List<Adress> findByChangedGreaterThan(Date date);
@Override
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.Person;
public interface AttendanceDao extends CrudRepository<Attendance, Long> {
public interface AttendanceDao extends CrudRepository<Attendance, Long>, ClubhelperDao<Attendance> {
List<Attendance> findByOnDate(LocalDate onDate);
@ -18,6 +18,7 @@ public interface AttendanceDao extends CrudRepository<Attendance, Long> {
Attendance findByPersonAndOnDate(Person person, Date onDate);
@Override
List<Attendance> findByPersonId(long personId);
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.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;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
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.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 + "]";
}
}

Loading…
Cancel
Save