diff --git a/springboot-petclinic-client/src/scripts/owner-details/owner-details.template.html b/springboot-petclinic-client/src/scripts/owner-details/owner-details.template.html index ed2810f9caef70346a734b3d560ad9da0713d59f..7c93a518d4eb6abe6450a6dfc4365988494bb5b7 100644 --- a/springboot-petclinic-client/src/scripts/owner-details/owner-details.template.html +++ b/springboot-petclinic-client/src/scripts/owner-details/owner-details.template.html @@ -43,6 +43,7 @@ </td> <td valign="top"> <table class="table-condensed"> + <!-- TODO: no visits in pet resource --> <thead> <tr> <th>Visit Date</th> diff --git a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/boundary/web/visit/VisitResource.java b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/boundary/web/visit/VisitResource.java index be857685f588853bd158227dada18fe17a57fbdb..694c4073b4261dc79621dcc17eb992e8e215829f 100644 --- a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/boundary/web/visit/VisitResource.java +++ b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/boundary/web/visit/VisitResource.java @@ -17,13 +17,13 @@ package org.springframework.samples.petclinic.boundary.web.visit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -import org.springframework.samples.petclinic.domain.model.pet.PetService; import org.springframework.samples.petclinic.domain.model.visit.Visit; import org.springframework.samples.petclinic.domain.model.visit.VisitService; import org.springframework.samples.petclinic.support.web.AbstractResourceController; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.util.List; /** * @author Juergen Hoeller @@ -36,12 +36,9 @@ public class VisitResource extends AbstractResourceController { private final VisitService visitService; - private final PetService petService; - @Autowired - public VisitResource(VisitService visitService, PetService petService) { + public VisitResource(VisitService visitService) { this.visitService = visitService; - this.petService = petService; } @PostMapping("/owners/{ownerId}/pets/{petId}/visits") @@ -50,12 +47,12 @@ public class VisitResource extends AbstractResourceController { @Valid @RequestBody Visit visit, @PathVariable("petId") int petId) { - petService.findPetById(petId).addVisit(visit); + visit.setPetId(petId); visitService.saveVisit(visit); } @GetMapping("/owners/{ownerId}/pets/{petId}/visits") - public Object visits(@PathVariable("petId") int petId) { - return petService.findPetById(petId).getVisits(); + public List<Visit> visits(@PathVariable("petId") int petId) { + return visitService.findVisitsByPetId(petId); } } diff --git a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/pet/Pet.java b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/pet/Pet.java index 7e5501f89e8f724bb23383f0e3f1370a7453a4c0..8cb22bae6a9e114e9256511a59414647d7a0e548 100644 --- a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/pet/Pet.java +++ b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/pet/Pet.java @@ -16,14 +16,11 @@ package org.springframework.samples.petclinic.domain.model.pet; import com.fasterxml.jackson.annotation.JsonIgnore; -import org.springframework.beans.support.MutableSortDefinition; -import org.springframework.beans.support.PropertyComparator; import org.springframework.samples.petclinic.domain.model.owner.Owner; -import org.springframework.samples.petclinic.domain.model.visit.Visit; import org.springframework.samples.petclinic.support.jpa.NamedEntity; import javax.persistence.*; -import java.util.*; +import java.util.Date; /** * Simple business object representing a pet. @@ -49,16 +46,12 @@ public class Pet extends NamedEntity { @JsonIgnore private Owner owner; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "pet", fetch = FetchType.EAGER) - private Set<Visit> visits; - - public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public Date getBirthDate() { - return this.birthDate; + return birthDate; } public void setType(PetType type) { @@ -66,7 +59,7 @@ public class Pet extends NamedEntity { } public PetType getType() { - return this.type; + return type; } public void setOwner(Owner owner) { @@ -74,29 +67,6 @@ public class Pet extends NamedEntity { } public Owner getOwner() { - return this.owner; - } - - protected void setVisitsInternal(Set<Visit> visits) { - this.visits = visits; - } - - protected Set<Visit> getVisitsInternal() { - if (this.visits == null) { - this.visits = new HashSet<>(); - } - return this.visits; + return owner; } - - public List<Visit> getVisits() { - List<Visit> sortedVisits = new ArrayList<Visit>(getVisitsInternal()); - PropertyComparator.sort(sortedVisits, new MutableSortDefinition("date", false, false)); - return Collections.unmodifiableList(sortedVisits); - } - - public void addVisit(Visit visit) { - getVisitsInternal().add(visit); - visit.setPet(this); - } - } diff --git a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/vet/Vet.java b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/vet/Vet.java index 2e6fb04a50f1e78c5cacadb31f40a5e0e40e5a38..07154388f02ee13aba6039863ee2657e005ff3ab 100644 --- a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/vet/Vet.java +++ b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/vet/Vet.java @@ -57,14 +57,14 @@ public class Vet extends Person { protected Set<Specialty> getSpecialtiesInternal() { if (this.specialties == null) { - this.specialties = new HashSet<Specialty>(); + this.specialties = new HashSet<>(); } return this.specialties; } @XmlElement public List<Specialty> getSpecialties() { - List<Specialty> sortedSpecs = new ArrayList<Specialty>(getSpecialtiesInternal()); + List<Specialty> sortedSpecs = new ArrayList<>(getSpecialtiesInternal()); PropertyComparator.sort(sortedSpecs, new MutableSortDefinition("name", true, true)); return Collections.unmodifiableList(sortedSpecs); } diff --git a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/Visit.java b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/Visit.java index d2a90dc3007718e3b1aa04f1fff294a7eef97095..c8711e7412e6a537dd88b55467d03754efd47d5b 100644 --- a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/Visit.java +++ b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/Visit.java @@ -16,8 +16,6 @@ package org.springframework.samples.petclinic.domain.model.visit; import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonIgnore; -import org.springframework.samples.petclinic.domain.model.pet.Pet; import org.springframework.samples.petclinic.support.jpa.BaseEntity; import javax.persistence.*; @@ -39,7 +37,7 @@ public class Visit extends BaseEntity { @Column(name = "visit_date") @Temporal(TemporalType.TIMESTAMP) @JsonFormat(pattern = "yyyy-MM-dd") - private Date date; + private Date date = new Date(); /** * Holds value of property description. @@ -49,21 +47,10 @@ public class Visit extends BaseEntity { private String description; /** - * Holds value of property pet. + * Holds id of property pet. */ - @ManyToOne - @JoinColumn(name = "pet_id") - @JsonIgnore - private Pet pet; - - - /** - * Creates a new instance of Visit for the current date - */ - public Visit() { - this.date = new Date(); - } - + @Column(name = "pet_id") + private int petId; /** * Getter for property date. @@ -71,7 +58,7 @@ public class Visit extends BaseEntity { * @return Value of property date. */ public Date getDate() { - return this.date; + return date; } /** @@ -89,7 +76,7 @@ public class Visit extends BaseEntity { * @return Value of property description. */ public String getDescription() { - return this.description; + return description; } /** @@ -101,22 +88,12 @@ public class Visit extends BaseEntity { this.description = description; } - /** - * Getter for property pet. - * - * @return Value of property pet. - */ - public Pet getPet() { - return this.pet; + public int getPetId() { + return petId; } - /** - * Setter for property pet. - * - * @param pet New value of property pet. - */ - public void setPet(Pet pet) { - this.pet = pet; + public void setPetId(final int petId) { + this.petId = petId; } } diff --git a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/VisitRepository.java b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/VisitRepository.java index 6e8a91a7a2f4e48a82ca72e817f6c5943789bc7d..9c7aaf1940e30f71f25f503c93bab37cb26d112e 100644 --- a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/VisitRepository.java +++ b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/VisitRepository.java @@ -20,7 +20,6 @@ import java.util.List; import org.springframework.dao.DataAccessException; import org.springframework.data.repository.Repository; import org.springframework.samples.petclinic.support.jpa.BaseEntity; -import org.springframework.samples.petclinic.domain.model.visit.Visit; /** * Repository class for <code>Visit</code> domain objects All method names are compliant with Spring Data naming @@ -41,6 +40,6 @@ public interface VisitRepository extends Repository<Visit, Integer> { */ void save(Visit visit) throws DataAccessException; - List<Visit> findByPetId(Integer petId); + List<Visit> findByPetId(int petId); } diff --git a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/VisitService.java b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/VisitService.java index 997534c1b97adb1708eee13a715f82fff6a83c6d..5717bc3dc4bf720b3b1449bca607843ab0170194 100644 --- a/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/VisitService.java +++ b/springboot-petclinic-server/src/main/java/org/springframework/samples/petclinic/domain/model/visit/VisitService.java @@ -5,6 +5,8 @@ import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * @author mszarlinski on 2016-10-30. */ @@ -22,4 +24,10 @@ public class VisitService { public void saveVisit(Visit visit) throws DataAccessException { visitRepository.save(visit); } + + @Transactional(readOnly = true) + public List<Visit> findVisitsByPetId(final int petId) { + return visitRepository.findByPetId(petId); + } + } diff --git a/springboot-petclinic-server/src/test/java/org/springframework/samples/petclinic/domain/model/PetClinicTests.java b/springboot-petclinic-server/src/test/java/org/springframework/samples/petclinic/domain/model/PetClinicTests.java index f2853755b4a965a02fb63dbc6cf48ec95bb6c4a0..bde60ff9b78aae4365650c2b360ee4405ab6d977 100644 --- a/springboot-petclinic-server/src/test/java/org/springframework/samples/petclinic/domain/model/PetClinicTests.java +++ b/springboot-petclinic-server/src/test/java/org/springframework/samples/petclinic/domain/model/PetClinicTests.java @@ -177,18 +177,14 @@ public class PetClinicTests { @Test @Transactional public void shouldAddNewVisitForPet() { + // given Pet pet7 = petService.findPetById(7); - int found = pet7.getVisits().size(); Visit visit = new Visit(); - pet7.addVisit(visit); + visit.setPetId(pet7.getId()); visit.setDescription("test"); + //when visitService.saveVisit(visit); - petService.savePet(pet7); - - pet7 = petService.findPetById(7); - assertThat(pet7.getVisits().size()).isEqualTo(found + 1); + // then assertThat(visit.getId()).isNotNull(); } - - }