This is an automated email from the ASF dual-hosted git repository. jamesbognar pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/juneau-petstore.git
commit f3accd40cf17c5799c3d883e16d992d20e7ed90a Author: JamesBognar <[email protected]> AuthorDate: Fri Dec 20 10:59:14 2019 -0500 Bug fixes discovered through testing. --- .../java/org/apache/juneau/petstore/dto/Pet.java | 4 ++-- .../juneau/petstore/repository/UserRepository.java | 4 +++- .../juneau/petstore/rest/PetStoreResource.java | 1 + .../juneau/petstore/service/PetStoreService.java | 28 ++++++++++++++-------- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/dto/Pet.java b/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/dto/Pet.java index ea19272..40c1222 100644 --- a/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/dto/Pet.java +++ b/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/dto/Pet.java @@ -54,7 +54,7 @@ public class Pet { private Species species; @ElementCollection(fetch=FetchType.EAGER) @OrderColumn - @Schema(description="Pet attributes.", example="friendly,smart") + @Schema(description="Pet attributes.", example="friendly,smart") private List<String> tags; @Column @Enumerated(STRING) @@ -86,7 +86,7 @@ public class Pet { this.name = x.getName(); this.price = x.getPrice(); this.species = x.getSpecies(); - this.tags = Arrays.asList(x.getTags()); + this.tags = x.getTags() == null ? null : Arrays.asList(x.getTags()); this.status = x.getStatus(); return this; } diff --git a/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/repository/UserRepository.java b/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/repository/UserRepository.java index 4842ed2..a292a6a 100644 --- a/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/repository/UserRepository.java +++ b/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/repository/UserRepository.java @@ -2,6 +2,8 @@ package org.apache.juneau.petstore.repository; +import java.util.Optional; + import org.apache.juneau.petstore.dto.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -13,7 +15,7 @@ import org.springframework.stereotype.Repository; public interface UserRepository extends JpaRepository <User, Long>{ @SuppressWarnings("javadoc") - User findByUsername(String username); + Optional<User> findByUsername(String username); @SuppressWarnings("javadoc") Long deleteByUsername(String username); diff --git a/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/PetStoreResource.java b/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/PetStoreResource.java index 790e684..9808eae 100644 --- a/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/PetStoreResource.java +++ b/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/PetStoreResource.java @@ -96,6 +96,7 @@ import org.apache.juneau.rest.converters.*; ) } ), + debug="true", staticFiles={"htdocs:/htdocs"} // Expose static files in htdocs subpackage. ) @HtmlDocConfig( diff --git a/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/service/PetStoreService.java b/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/service/PetStoreService.java index f633983..bb69c2c 100644 --- a/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/service/PetStoreService.java +++ b/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/service/PetStoreService.java @@ -25,6 +25,7 @@ import org.apache.juneau.petstore.repository.OrderRepository; import org.apache.juneau.petstore.repository.PetRepository; import org.apache.juneau.petstore.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; @@ -42,13 +43,13 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class PetStoreService { - + @Autowired private PetRepository petRepository; - + @Autowired private UserRepository userRepository; - + @Autowired private OrderRepository orderRepository; //----------------------------------------------------------------------------------------------------------------- @@ -65,7 +66,7 @@ public class PetStoreService { */ public PetStoreService initDirect(PrintWriter w) throws ParseException, IOException { - + JsonParser parser = JsonParser.create().build(); for (Pet x : petRepository.findAll()) { @@ -80,7 +81,7 @@ public class PetStoreService { userRepository.delete(x); w.println(format("Deleted user: username={0}", x.getUsername())); } - + for (Pet x : parser.parse(getStream("init/Pets.json"), Pet[].class)) { petRepository.save(x); @@ -135,7 +136,7 @@ public class PetStoreService { */ public User getUser(String username) throws InvalidUsername, IdNotFound { assertValidUsername(username); - return userRepository.findByUsername(username); + return userRepository.findByUsername(username).orElseThrow(() -> new IdNotFound(username, User.class)); } /** @@ -171,7 +172,7 @@ public class PetStoreService { * @param c The pet input data. * @return a new {@link Pet} object. */ - public Pet create(CreatePet c) { + public Pet create(CreatePet c) { return petRepository.save((new Pet().status(PetStatus.AVAILABLE).apply(c))); } @@ -192,6 +193,7 @@ public class PetStoreService { * @return a new {@link User} object. */ public User create(User c) { + assertValidUsername(c.getUsername()); return userRepository.save((new User().apply(c))); } @@ -202,8 +204,9 @@ public class PetStoreService { * @return The updated {@link Pet} object. * @throws IdNotFound Pet was not found. */ + @Transactional(rollbackFor=Exception.class) public Pet update(UpdatePet u) throws IdNotFound { - Pet pet = petRepository.findById(u.getId()).get(); + Pet pet = petRepository.findById(u.getId()).orElseThrow(() -> new IdNotFound(u.getId(), Pet.class)); return petRepository.save(pet.apply(u)); } @@ -214,8 +217,9 @@ public class PetStoreService { * @return The updated {@link Order} object. * @throws IdNotFound Order was not found. */ + @Transactional(rollbackFor=Exception.class) public Order update(Order o) throws IdNotFound { - Order order = orderRepository.findById(o.getId()).get(); + Order order = orderRepository.findById(o.getId()).orElseThrow(() -> new IdNotFound(o.getId(), Order.class)); return orderRepository.save(order.apply(o)); } @@ -227,8 +231,9 @@ public class PetStoreService { * @throws IdNotFound User was not found. * @throws InvalidUsername The username was not valid. */ + @Transactional(rollbackFor=Exception.class) public User update(User u) throws IdNotFound, InvalidUsername { - User user = userRepository.findByUsername(u.getUsername()); + User user = userRepository.findByUsername(u.getUsername()).orElseThrow(() -> new IdNotFound(u.getUsername(), Order.class)); return userRepository.save(user.apply(u)); } @@ -238,6 +243,7 @@ public class PetStoreService { * @param id The pet ID. * @throws IdNotFound Pet was not found. */ + @Transactional(rollbackFor=Exception.class) public void removePet(long id) throws IdNotFound { petRepository.deleteById(id); } @@ -248,6 +254,7 @@ public class PetStoreService { * @param id The order ID. * @throws IdNotFound Order was not found. */ + @Transactional(rollbackFor=Exception.class) public void removeOrder(long id) throws IdNotFound { orderRepository.deleteById(id); } @@ -258,6 +265,7 @@ public class PetStoreService { * @param username The username. * @throws IdNotFound User was not found. */ + @Transactional(rollbackFor=Exception.class) public void removeUser(String username) throws IdNotFound { userRepository.deleteByUsername(username); }
