From b106022a084be1651a359e9702154469376814be Mon Sep 17 00:00:00 2001 From: Michael Harris Date: Mon, 26 Aug 2019 15:24:04 -0700 Subject: [PATCH 1/7] Fix json data being returned when wanting to get users item list --- .../bucketlist/controllers/ItemController.java | 1 + .../bucketlist/controllers/UserController.java | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java index 7cf0ccc..140c274 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java @@ -49,6 +49,7 @@ public ResponseEntity listUsersItems(HttpServletRequest request, Authenticati } + // @GetMapping(value = "/{itemid}", // produces = {"application/json"}) // public ResponseEntity getItem(HttpServletRequest request, diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java index c4c6b4c..43b8f05 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java @@ -3,6 +3,7 @@ import com.lambdaschool.bucketlist.models.ErrorDetail; import com.lambdaschool.bucketlist.models.Friend; import com.lambdaschool.bucketlist.models.User; +import com.lambdaschool.bucketlist.repository.UserRepository; import com.lambdaschool.bucketlist.services.FriendService; import com.lambdaschool.bucketlist.services.UserService; import io.swagger.annotations.*; @@ -35,6 +36,9 @@ public class UserController @Autowired private FriendService friendService; + @Autowired + private UserRepository userrepos; + // @PreAuthorize("hasAuthority('ROLE_ADMIN')") // @GetMapping(value = "/users", // produces = {"application/json"}) @@ -46,9 +50,16 @@ public class UserController // return new ResponseEntity<>(myUsers, HttpStatus.OK); // } + @GetMapping(value = "/user", + produces = {"application/json"}) + public ResponseEntity getUser(HttpServletRequest request, Authentication authentication) { + logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + User u = userrepos.findByUsername(authentication.getName()); -// @PreAuthorize("hasAuthority('ROLE_ADMIN')") + return new ResponseEntity<>(u, HttpStatus.OK); + } +// // @GetMapping(value = "/user/{userId}", // produces = {"application/json"}) // public ResponseEntity getUser(HttpServletRequest request, From cf9a995b9b180049627e637e668fbaa82b8f5c79 Mon Sep 17 00:00:00 2001 From: Michael Harris Date: Mon, 26 Aug 2019 22:09:25 -0700 Subject: [PATCH 2/7] Created journal repository --- .../controllers/ItemController.java | 13 ++++++------ .../controllers/UserController.java | 18 ++++++++--------- .../lambdaschool/bucketlist/models/Item.java | 10 +++++++++- .../bucketlist/models/Journal.java | 20 +++++++++---------- .../repository/JournalRepository.java | 7 +++++++ 5 files changed, 42 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/lambdaschool/bucketlist/repository/JournalRepository.java diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java index 140c274..06684db 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java @@ -38,14 +38,15 @@ public class ItemController @Autowired private UserRepository userrepos; - @GetMapping(value = "", - produces = {"application/json"}) - public ResponseEntity listUsersItems(HttpServletRequest request, Authentication authentication) - { + @ApiOperation(value = "Returns the users info including userid, username, and items") + @GetMapping(value = "/user", + produces = {"application/json"}) + public ResponseEntity getUser(HttpServletRequest request, Authentication authentication) { logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); - List allItems = itemService.findByUserName(authentication.getName()); - return new ResponseEntity<>(allItems, HttpStatus.OK); + User u = userrepos.findByUsername(authentication.getName()); + + return new ResponseEntity<>(u, HttpStatus.OK); } diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java index 43b8f05..8b51cea 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java @@ -50,15 +50,15 @@ public class UserController // return new ResponseEntity<>(myUsers, HttpStatus.OK); // } - @GetMapping(value = "/user", - produces = {"application/json"}) - public ResponseEntity getUser(HttpServletRequest request, Authentication authentication) { - logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); - - User u = userrepos.findByUsername(authentication.getName()); - - return new ResponseEntity<>(u, HttpStatus.OK); - } +// @GetMapping(value = "/user", +// produces = {"application/json"}) +// public ResponseEntity getUser(HttpServletRequest request, Authentication authentication) { +// logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); +// +// User u = userrepos.findByUsername(authentication.getName()); +// +// return new ResponseEntity<>(u, HttpStatus.OK); +// } // // @GetMapping(value = "/user/{userId}", // produces = {"application/json"}) diff --git a/src/main/java/com/lambdaschool/bucketlist/models/Item.java b/src/main/java/com/lambdaschool/bucketlist/models/Item.java index 7101fa8..f24720f 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/Item.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/Item.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; import javax.persistence.*; +import java.util.List; @ApiModel(value = "Item", description = "Item object") @Entity @@ -32,6 +33,12 @@ public class Item extends Auditable private boolean completed; + @OneToMany(fetch = FetchType.LAZY) + @JoinColumn(name = "journalentryid") + @JsonIgnoreProperties({"journal", "hibernateLazyInitializer"}) + private List journal; + + public Item() { } @@ -47,11 +54,12 @@ public Item(String itemtitle, String itemdesc, User user) { this.user = user; } - public Item(String itemtitle, String itemdesc, User user, boolean completed) { + public Item(String itemtitle, String itemdesc, User user, boolean completed, List journal) { this.itemtitle = itemtitle; this.itemdesc = itemdesc; this.user = user; this.completed = completed; + this.journal = journal; } public long getItemid() { diff --git a/src/main/java/com/lambdaschool/bucketlist/models/Journal.java b/src/main/java/com/lambdaschool/bucketlist/models/Journal.java index bebb0c7..8e0843f 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/Journal.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/Journal.java @@ -11,17 +11,17 @@ public class Journal { @GeneratedValue(strategy = GenerationType.AUTO) private long journalentryid; + @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "itemid", - nullable = false) - @JsonIgnoreProperties({"journal", "hibernateLazyInitializer"}) - private User user; + @JoinColumn(name = "itemid") + @JsonIgnoreProperties({"item", "hibernateLazyInitializer"}) + private Item item; @Column(nullable = false) private String entry; - public Journal(User user, String entry) { - this.user = user; + public Journal(Item item, String entry) { + this.item = item; this.entry = entry; } @@ -36,12 +36,12 @@ public void setJournalentryid(long journalentryid) { this.journalentryid = journalentryid; } - public User getUser() { - return user; + public Item getItem() { + return item; } - public void setUser(User user) { - this.user = user; + public void setItem(Item item) { + this.item = item; } public String getEntry() { diff --git a/src/main/java/com/lambdaschool/bucketlist/repository/JournalRepository.java b/src/main/java/com/lambdaschool/bucketlist/repository/JournalRepository.java new file mode 100644 index 0000000..77ddded --- /dev/null +++ b/src/main/java/com/lambdaschool/bucketlist/repository/JournalRepository.java @@ -0,0 +1,7 @@ +package com.lambdaschool.bucketlist.repository; + +import com.lambdaschool.bucketlist.models.Journal; +import org.springframework.data.repository.CrudRepository; + +public interface JournalRepository extends CrudRepository { +} From c9a60b2e6dc5c20cd090e3d6d3e49b51b649dcbb Mon Sep 17 00:00:00 2001 From: Michael Harris Date: Tue, 27 Aug 2019 15:40:25 -0700 Subject: [PATCH 3/7] Add delete mapping --- .../com/lambdaschool/bucketlist/SeedData.java | 2 +- .../controllers/ItemController.java | 39 +++++++++++++------ .../controllers/UserController.java | 21 +++++----- .../bucketlist/models/Friend.java | 18 ++++++++- .../lambdaschool/bucketlist/models/Item.java | 32 +++++++++++++-- .../bucketlist/models/Journal.java | 5 ++- .../lambdaschool/bucketlist/models/User.java | 14 ++++++- .../repository/FriendRepository.java | 6 +++ .../bucketlist/services/FriendService.java | 5 +++ .../services/FriendServiceImpl.java | 17 ++++++++ .../bucketlist/services/ItemService.java | 7 +++- .../bucketlist/services/ItemServiceImpl.java | 27 ++++++++++++- .../bucketlist/view/BucketList.java | 3 ++ .../bucketlist/view/GetFriends.java | 8 ++++ src/main/resources/application.properties | 2 +- src/test/resources/application.properties | 2 - 16 files changed, 175 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/lambdaschool/bucketlist/view/GetFriends.java diff --git a/src/main/java/com/lambdaschool/bucketlist/SeedData.java b/src/main/java/com/lambdaschool/bucketlist/SeedData.java index f0257e3..1828e93 100644 --- a/src/main/java/com/lambdaschool/bucketlist/SeedData.java +++ b/src/main/java/com/lambdaschool/bucketlist/SeedData.java @@ -12,7 +12,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; - +// //@Transactional //@Component public class SeedData implements CommandLineRunner diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java index 06684db..aff8c0c 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java @@ -2,6 +2,7 @@ import com.lambdaschool.bucketlist.models.ErrorDetail; import com.lambdaschool.bucketlist.models.Item; +import com.lambdaschool.bucketlist.models.Journal; import com.lambdaschool.bucketlist.models.User; import com.lambdaschool.bucketlist.repository.UserRepository; import com.lambdaschool.bucketlist.services.ItemService; @@ -21,6 +22,7 @@ import javax.validation.Valid; import java.net.URI; import java.net.URISyntaxException; +import java.util.HashMap; import java.util.List; @RestController @@ -99,19 +101,34 @@ public ResponseEntity addNewItem(HttpServletRequest request, HttpHeaders responseHeaders = new HttpHeaders(); // URI newQuoteURI = ServletUriComponentsBuilder.fromCurrentRequest().path("/{itemid}").buildAndExpand(newItem.getItemid()).toUri(); // responseHeaders.setLocation(newQuoteURI); + return new ResponseEntity<>(itemService.findItemById(item.getItemid()), responseHeaders, HttpStatus.CREATED); + } + + @PostMapping(value = "/journal/{itemid}", consumes = {"application/json"}, produces = {"application/json"}) + public ResponseEntity addToJournal(@PathVariable long itemid, + @RequestBody String journalentry){ - return new ResponseEntity<>("Bucket list item created successfully", responseHeaders, HttpStatus.CREATED); + itemService.addToJournal(itemid, journalentry); + return new ResponseEntity<>(null, HttpStatus.OK); } + @DeleteMapping("/item/{id}") + public ResponseEntity deleteItemById(HttpServletRequest request, + @PathVariable + long id) + { + logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + itemService.delete(id); + return new ResponseEntity<>(HttpStatus.OK); + } -// @DeleteMapping("/item/{id}") -// public ResponseEntity deleteItemById(HttpServletRequest request, -// @PathVariable -// long id) -// { -// logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); -// -// itemService.delete(id); -// return new ResponseEntity<>(HttpStatus.OK); -// } + @PutMapping("/item/{id}") + public ResponseEntity UpdateItemById(HttpServletRequest request, + @PathVariable + long id, + @RequestBody Item newItem) { + logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + itemService.update(id, newItem); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java index 8b51cea..1577840 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java @@ -50,15 +50,16 @@ public class UserController // return new ResponseEntity<>(myUsers, HttpStatus.OK); // } -// @GetMapping(value = "/user", -// produces = {"application/json"}) -// public ResponseEntity getUser(HttpServletRequest request, Authentication authentication) { -// logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); -// -// User u = userrepos.findByUsername(authentication.getName()); -// -// return new ResponseEntity<>(u, HttpStatus.OK); -// } + @GetMapping(value = "/user", + produces = {"application/json"}) + public ResponseEntity getUser(HttpServletRequest request, Authentication authentication) { + logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + + User u = userrepos.findByUsername(authentication.getName()); + long userid = u.getUserid(); + u.setFriends(friendService.getMyFriends(userid)); + return new ResponseEntity<>(u, HttpStatus.OK); + } // // @GetMapping(value = "/user/{userId}", // produces = {"application/json"}) @@ -113,6 +114,8 @@ public ResponseEntity acceptRequest( return new ResponseEntity<>(null, HttpStatus.OK); } + + // @PreAuthorize("hasAuthority('ROLE_ADMIN')") // @PostMapping(value = "/user", // consumes = {"application/json"}, diff --git a/src/main/java/com/lambdaschool/bucketlist/models/Friend.java b/src/main/java/com/lambdaschool/bucketlist/models/Friend.java index ebad50b..639e190 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/Friend.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/Friend.java @@ -18,10 +18,18 @@ public class Friend { private boolean accepted; - public Friend(String friendusername, String requester, boolean accepted) { + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "userid", + nullable = false) + @JsonIgnoreProperties({"friend", "hibernateLazyInitializer"}) + private User user; + + + public Friend(String friendusername, String requester, boolean accepted, User user) { this.friendusername = friendusername; this.requester = requester; this.accepted = accepted; + this.user = user; } public Friend() { @@ -58,4 +66,12 @@ public boolean isAccepted() { public void setAccepted(boolean accepted) { this.accepted = accepted; } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/models/Item.java b/src/main/java/com/lambdaschool/bucketlist/models/Item.java index f24720f..9d836f7 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/Item.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/Item.java @@ -1,10 +1,13 @@ package com.lambdaschool.bucketlist.models; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import javax.persistence.*; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; @ApiModel(value = "Item", description = "Item object") @@ -28,14 +31,18 @@ public class Item extends Auditable @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "userid", nullable = false) - @JsonIgnoreProperties({"item", "hibernateLazyInitializer"}) + @JsonIgnoreProperties({"item", "hibernateLazyInitializer", "user"}) + @JsonIgnore private User user; private boolean completed; - @OneToMany(fetch = FetchType.LAZY) - @JoinColumn(name = "journalentryid") - @JsonIgnoreProperties({"journal", "hibernateLazyInitializer"}) + private Date created = new Date(); + + @OneToMany(mappedBy = "item", + cascade = CascadeType.ALL, + orphanRemoval = true) + @JsonIgnoreProperties({"item", "hibernateLazyInitializer"}) private List journal; @@ -101,4 +108,21 @@ public boolean isCompleted() { public void setCompleted(boolean completed) { this.completed = completed; } + + public String getCreated() { + SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyy HH:mm"); + return sdf.format(created); + } + + public void setCreated(Date created) { + this.created = created; + } + + public List getJournal() { + return journal; + } + + public void setJournal(List journal) { + this.journal = journal; + } } \ No newline at end of file diff --git a/src/main/java/com/lambdaschool/bucketlist/models/Journal.java b/src/main/java/com/lambdaschool/bucketlist/models/Journal.java index 8e0843f..f5f06cd 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/Journal.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/Journal.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import javax.persistence.*; +import java.util.Optional; @Entity @Table(name = "journals") @@ -13,10 +14,11 @@ public class Journal { @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "itemid") + @JoinColumn(name = "itemid", nullable = false) @JsonIgnoreProperties({"item", "hibernateLazyInitializer"}) private Item item; + @Column(nullable = false) private String entry; @@ -25,6 +27,7 @@ public Journal(Item item, String entry) { this.entry = entry; } + public Journal() { } diff --git a/src/main/java/com/lambdaschool/bucketlist/models/User.java b/src/main/java/com/lambdaschool/bucketlist/models/User.java index 9ea3b2a..55dbf3e 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/User.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/User.java @@ -1,5 +1,6 @@ package com.lambdaschool.bucketlist.models; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModel; @@ -37,12 +38,13 @@ public class User extends Auditable @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) @JsonIgnoreProperties("user") + @JsonIgnore private List userRoles = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) @JsonIgnoreProperties("user") - private List friends = new ArrayList<>(); + private List friends = new ArrayList<>(); @OneToMany(mappedBy = "user", @@ -122,8 +124,10 @@ public void setItems(List items) this.items = items; } + @JsonIgnore public List getAuthority() { + List rtnList = new ArrayList<>(); for (UserRoles r : this.userRoles) @@ -134,4 +138,12 @@ public List getAuthority() return rtnList; } + + public List getFriends() { + return friends; + } + + public void setFriends(List friends) { + this.friends = friends; + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java b/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java index 586ff30..894469f 100644 --- a/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java +++ b/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java @@ -1,8 +1,14 @@ package com.lambdaschool.bucketlist.repository; import com.lambdaschool.bucketlist.models.Friend; +import com.lambdaschool.bucketlist.view.GetFriends; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; +import java.util.List; + public interface FriendRepository extends CrudRepository { + @Query(value = "SELECT * FROM friends WHERE userid = 4", nativeQuery = true) + List getFriendRequests(long id); } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java b/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java index 6f6cd63..4e89ca7 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java @@ -1,6 +1,9 @@ package com.lambdaschool.bucketlist.services; import com.lambdaschool.bucketlist.models.Friend; +import com.lambdaschool.bucketlist.models.UserRoles; + +import java.util.List; public interface FriendService { Friend sendRequest(String request, String requester); @@ -8,4 +11,6 @@ public interface FriendService { Friend save(Friend friend); Friend update(long requestid); + + List getMyFriends(long id); } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java b/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java index ea2e60c..873e90d 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java @@ -1,12 +1,18 @@ package com.lambdaschool.bucketlist.services; import com.lambdaschool.bucketlist.models.Friend; +import com.lambdaschool.bucketlist.models.User; +import com.lambdaschool.bucketlist.models.UserRoles; import com.lambdaschool.bucketlist.repository.FriendRepository; +import com.lambdaschool.bucketlist.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityNotFoundException; +import java.util.List; @Service(value = "friendService") @Transactional @@ -14,11 +20,17 @@ public class FriendServiceImpl implements FriendService{ @Autowired private FriendRepository friendrepos; + @Autowired + private UserRepository userrepos; + @Override public Friend sendRequest(String request, String requester) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + User currentUser = userrepos.findByUsername(authentication.getName()); Friend newRequest = new Friend(); newRequest.setFriendusername(request); newRequest.setRequester(requester); + newRequest.setUser(currentUser); return friendrepos.save(newRequest); } @@ -35,4 +47,9 @@ public Friend update(long requestid) { newFriend.setAccepted(!newFriend.isAccepted()); return friendrepos.save(newFriend); } + + @Override + public List getMyFriends(long id) { + return friendrepos.getFriendRequests(id); + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/ItemService.java b/src/main/java/com/lambdaschool/bucketlist/services/ItemService.java index 00c3c9a..933be15 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/ItemService.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/ItemService.java @@ -1,6 +1,7 @@ package com.lambdaschool.bucketlist.services; import com.lambdaschool.bucketlist.models.Item; +import com.lambdaschool.bucketlist.models.Journal; import com.lambdaschool.bucketlist.view.BucketList; import java.util.List; @@ -9,7 +10,7 @@ public interface ItemService { List findAll(); - Item findQuoteById(long id); + Item findItemById(long id); List findByUserName(String username); @@ -17,4 +18,8 @@ public interface ItemService Item save(Item item); + Journal addToJournal(long id, String journalEntry); + + Item update(long id, Item item); + } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java b/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java index 748e5b4..1a4775d 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java @@ -2,8 +2,10 @@ import com.lambdaschool.bucketlist.exceptions.ResourceNotFoundException; import com.lambdaschool.bucketlist.models.Item; +import com.lambdaschool.bucketlist.models.Journal; import com.lambdaschool.bucketlist.models.User; import com.lambdaschool.bucketlist.repository.BucketListRepository; +import com.lambdaschool.bucketlist.repository.JournalRepository; import com.lambdaschool.bucketlist.repository.UserRepository; import com.lambdaschool.bucketlist.view.BucketList; import org.springframework.beans.factory.annotation.Autowired; @@ -14,6 +16,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Optional; @Service(value = "itemService") public class ItemServiceImpl implements ItemService @@ -24,6 +27,9 @@ public class ItemServiceImpl implements ItemService @Autowired private UserRepository userrepos; + @Autowired + private JournalRepository journalrepos; + @Override public List findAll() { @@ -35,7 +41,7 @@ public List findAll() @Override - public Item findQuoteById(long id) + public Item findItemById(long id) { return listrepos.findById(id).orElseThrow(() -> new ResourceNotFoundException(Long.toString(id))); } @@ -80,4 +86,23 @@ public List findByUserName(String username) list.removeIf(q -> !q.getUser().getUsername().equalsIgnoreCase(username)); return list; } + + @Override + public Journal addToJournal(long id, String journalEntry) { + Journal newEntry = new Journal(); + newEntry.setEntry(journalEntry); + newEntry.setItem(findItemById(id)); + System.out.println("*********************************" + listrepos.findById(id)); + return journalrepos.save(newEntry); + } + + @Override + public Item update(long id, Item item) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + User currentUser = userrepos.findByUsername(authentication.getName()); + + item.setUser(currentUser); + item.setItemid(id); + return listrepos.save(item); + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/view/BucketList.java b/src/main/java/com/lambdaschool/bucketlist/view/BucketList.java index ee6c96a..de87b7c 100644 --- a/src/main/java/com/lambdaschool/bucketlist/view/BucketList.java +++ b/src/main/java/com/lambdaschool/bucketlist/view/BucketList.java @@ -1,8 +1,11 @@ package com.lambdaschool.bucketlist.view; +import java.util.Date; + public interface BucketList { long getItemid(); String getItem(); boolean getCompleted(); long getUserid(); + Date getCreated_date(); } diff --git a/src/main/java/com/lambdaschool/bucketlist/view/GetFriends.java b/src/main/java/com/lambdaschool/bucketlist/view/GetFriends.java new file mode 100644 index 0000000..7938d70 --- /dev/null +++ b/src/main/java/com/lambdaschool/bucketlist/view/GetFriends.java @@ -0,0 +1,8 @@ +package com.lambdaschool.bucketlist.view; + +public interface GetFriends { + long getRequestid(); + boolean getAccepted(); + String getFriendusername(); + String getRequester(); +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3c4bd9e..cf15661 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -39,9 +39,9 @@ spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true # Feature that determines what happens when no accessors are found for a type # (and there are no annotations to indicate it is meant to be serialized). +# Turns off Spring Boot automatic exception handling spring.jackson.serialization.fail-on-empty-beans=false -# Turns off Spring Boot automatic exception handling server.error.whitelabel.enabled=false # needed for actuators to work diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index 4fbffd3..e99e35c 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -29,8 +29,6 @@ spring.h2.console.settings.web-allow-others=true # What do with the schema # drop n create table again, good for testing -spring.jpa.hibernate.ddl-auto=create -spring.datasource.initialization-mode=always # Good for production! #spring.jpa.hibernate.ddl-auto=update From b284ea03aede5a60a28f171513e9d1aae487c6de Mon Sep 17 00:00:00 2001 From: Michael Harris Date: Tue, 27 Aug 2019 15:59:15 -0700 Subject: [PATCH 4/7] Leroy Jenkins pushing to master --- .../lambdaschool/bucketlist/controllers/ItemController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java index aff8c0c..1af4255 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java @@ -112,7 +112,7 @@ public ResponseEntity addToJournal(@PathVariable long itemid, return new ResponseEntity<>(null, HttpStatus.OK); } - @DeleteMapping("/item/{id}") + @DeleteMapping(value = "/item/{id}") public ResponseEntity deleteItemById(HttpServletRequest request, @PathVariable long id) @@ -122,12 +122,13 @@ public ResponseEntity deleteItemById(HttpServletRequest request, return new ResponseEntity<>(HttpStatus.OK); } - @PutMapping("/item/{id}") + @PutMapping(value = "/item/{id}") public ResponseEntity UpdateItemById(HttpServletRequest request, @PathVariable long id, @RequestBody Item newItem) { logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + System.out.println("*************************************" + newItem); itemService.update(id, newItem); return new ResponseEntity<>(HttpStatus.OK); } From 6a93214dd9052481fdee89cbd4a7bb9a68d4aa33 Mon Sep 17 00:00:00 2001 From: Michael Harris Date: Wed, 28 Aug 2019 15:50:22 -0700 Subject: [PATCH 5/7] Friend features in --- .../com/lambdaschool/bucketlist/SeedData.java | 4 +- .../controllers/ItemController.java | 7 +- .../controllers/OpenController.java | 1 + .../controllers/UserController.java | 82 ++++--------------- .../lambdaschool/bucketlist/models/Item.java | 24 +++++- .../bucketlist/models/Journal.java | 1 + .../bucketlist/models/Response.java | 31 +++++++ .../lambdaschool/bucketlist/models/User.java | 19 +++++ .../repository/FriendRepository.java | 12 ++- .../bucketlist/repository/UserRepository.java | 13 ++- .../bucketlist/services/FriendService.java | 9 +- .../services/FriendServiceImpl.java | 35 +++++++- .../bucketlist/services/ItemServiceImpl.java | 27 +++++- .../bucketlist/services/UserService.java | 3 +- .../bucketlist/services/UserServiceImpl.java | 5 +- .../bucketlist/view/GetFriends.java | 1 + .../bucketlist/view/UserView.java | 7 ++ src/main/resources/application.properties | 8 +- 18 files changed, 200 insertions(+), 89 deletions(-) create mode 100644 src/main/java/com/lambdaschool/bucketlist/models/Response.java create mode 100644 src/main/java/com/lambdaschool/bucketlist/view/UserView.java diff --git a/src/main/java/com/lambdaschool/bucketlist/SeedData.java b/src/main/java/com/lambdaschool/bucketlist/SeedData.java index 1828e93..9227792 100644 --- a/src/main/java/com/lambdaschool/bucketlist/SeedData.java +++ b/src/main/java/com/lambdaschool/bucketlist/SeedData.java @@ -13,8 +13,8 @@ import java.util.ArrayList; // -//@Transactional -//@Component +@Transactional +@Component public class SeedData implements CommandLineRunner { @Autowired diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java index 1af4255..90061bb 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java @@ -5,6 +5,7 @@ import com.lambdaschool.bucketlist.models.Journal; import com.lambdaschool.bucketlist.models.User; import com.lambdaschool.bucketlist.repository.UserRepository; +import com.lambdaschool.bucketlist.services.FriendService; import com.lambdaschool.bucketlist.services.ItemService; import com.lambdaschool.bucketlist.services.UserService; import io.swagger.annotations.*; @@ -40,6 +41,9 @@ public class ItemController @Autowired private UserRepository userrepos; + @Autowired + private FriendService friendService; + @ApiOperation(value = "Returns the users info including userid, username, and items") @GetMapping(value = "/user", produces = {"application/json"}) @@ -47,6 +51,8 @@ public ResponseEntity getUser(HttpServletRequest request, Authentication auth logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); User u = userrepos.findByUsername(authentication.getName()); + u.setRequests(friendService.getMyFriends(u.getUsername())); + u.setFriends(friendService.getAcceptedFriends(u.getUsername())); return new ResponseEntity<>(u, HttpStatus.OK); } @@ -128,7 +134,6 @@ public ResponseEntity UpdateItemById(HttpServletRequest request, long id, @RequestBody Item newItem) { logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); - System.out.println("*************************************" + newItem); itemService.update(id, newItem); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/OpenController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/OpenController.java index bda354a..e5ca448 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/OpenController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/OpenController.java @@ -62,6 +62,7 @@ public ResponseEntity addNewUser(HttpServletRequest request, @Valid responseHeaders.setLocation(newRestaurantURI); + return new ResponseEntity<>("User created successfully", responseHeaders, HttpStatus.CREATED); } diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java index 1577840..e793eb1 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java @@ -2,6 +2,7 @@ import com.lambdaschool.bucketlist.models.ErrorDetail; import com.lambdaschool.bucketlist.models.Friend; +import com.lambdaschool.bucketlist.models.Response; import com.lambdaschool.bucketlist.models.User; import com.lambdaschool.bucketlist.repository.UserRepository; import com.lambdaschool.bucketlist.services.FriendService; @@ -39,50 +40,13 @@ public class UserController @Autowired private UserRepository userrepos; -// @PreAuthorize("hasAuthority('ROLE_ADMIN')") -// @GetMapping(value = "/users", -// produces = {"application/json"}) -// public ResponseEntity listAllUsers(HttpServletRequest request) -// { -// logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); -// -// List myUsers = userService.findAll(); -// return new ResponseEntity<>(myUsers, HttpStatus.OK); -// } - @GetMapping(value = "/user", - produces = {"application/json"}) - public ResponseEntity getUser(HttpServletRequest request, Authentication authentication) { - logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); - - User u = userrepos.findByUsername(authentication.getName()); - long userid = u.getUserid(); - u.setFriends(friendService.getMyFriends(userid)); - return new ResponseEntity<>(u, HttpStatus.OK); + @GetMapping(value = "/search/{username}", produces = {"application/json"}) + public ResponseEntity searchUsers(@PathVariable String username){ + List foundUsers = userService.searchUsers(username); + System.out.println("*****************************************************" + userService.searchUsers(username)); + return new ResponseEntity<>(foundUsers, HttpStatus.OK); } -// -// @GetMapping(value = "/user/{userId}", -// produces = {"application/json"}) -// public ResponseEntity getUser(HttpServletRequest request, -// @PathVariable -// Long userId) -// { -// logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); -// -// User u = userService.findUserById(userId); -// return new ResponseEntity<>(u, HttpStatus.OK); -// } - - -// @GetMapping(value = "/getusername", -// produces = {"application/json"}) -// @ResponseBody -// public ResponseEntity getCurrentUserName(HttpServletRequest request, Authentication authentication) -// { -// logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); -// -// return new ResponseEntity<>(authentication.getPrincipal(), HttpStatus.OK); -// } @ApiOperation(value = "Send friend request") @ApiResponses(value = { @@ -96,8 +60,15 @@ public ResponseEntity addFriend( @PathVariable String username, Authentication authentication){ - friendService.sendRequest(username, authentication.getName()); - return new ResponseEntity<>("Friend request sent", HttpStatus.OK); + + Response newResponse = new Response(); + if(friendService.sendRequest(username, authentication.getName()) != null){ + newResponse.setMessage("Friend Request Sent!"); + } else { + newResponse.setError("Request already exists"); + } +// friendService.sendRequest(username, authentication.getName()); + return new ResponseEntity<>(newResponse, HttpStatus.OK); } @ApiOperation(value = "Accept friend request") @@ -106,7 +77,7 @@ public ResponseEntity addFriend( @ApiResponse(code = 404, message = "Request Id not found", response = ErrorDetail.class), @ApiResponse(code = 500, message = "Server error", response = ErrorDetail.class) }) - @PutMapping(value = "add/{requestid}", consumes = {"application/json"}, produces = {"application/json"}) + @PutMapping(value = "/add/{requestid}", consumes = {"application/json"}, produces = {"application/json"}) public ResponseEntity acceptRequest( @ApiParam(value = "Request id", required = true, example = "4") @PathVariable long requestid){ @@ -116,27 +87,6 @@ public ResponseEntity acceptRequest( -// @PreAuthorize("hasAuthority('ROLE_ADMIN')") -// @PostMapping(value = "/user", -// consumes = {"application/json"}, -// produces = {"application/json"}) -// public ResponseEntity addNewUser(HttpServletRequest request, @Valid -// @RequestBody -// User newuser) throws URISyntaxException -// { -// logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); -// -// newuser = userService.save(newuser); -// -// // set the location header for the newly created resource -// HttpHeaders responseHeaders = new HttpHeaders(); -// URI newUserURI = ServletUriComponentsBuilder.fromCurrentRequest().path("/{userid}").buildAndExpand(newuser.getUserid()).toUri(); -// responseHeaders.setLocation(newUserURI); -// -// return new ResponseEntity<>(null, responseHeaders, HttpStatus.CREATED); -// } - - // @PutMapping(value = "/user/{id}") // public ResponseEntity updateUser(HttpServletRequest request, // @RequestBody diff --git a/src/main/java/com/lambdaschool/bucketlist/models/Item.java b/src/main/java/com/lambdaschool/bucketlist/models/Item.java index 9d836f7..77d749c 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/Item.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/Item.java @@ -35,6 +35,8 @@ public class Item extends Auditable @JsonIgnore private User user; + private String image; + private boolean completed; private Date created = new Date(); @@ -61,6 +63,13 @@ public Item(String itemtitle, String itemdesc, User user) { this.user = user; } + public Item(String itemtitle, String itemdesc, User user, String image) { + this.itemtitle = itemtitle; + this.itemdesc = itemdesc; + this.user = user; + this.image = image; + } + public Item(String itemtitle, String itemdesc, User user, boolean completed, List journal) { this.itemtitle = itemtitle; this.itemdesc = itemdesc; @@ -85,6 +94,14 @@ public void setItemtitle(String itemtitle) { this.itemtitle = itemtitle; } + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + public String getItemdesc() { return itemdesc; } @@ -109,15 +126,18 @@ public void setCompleted(boolean completed) { this.completed = completed; } - public String getCreated() { + public Date getCreated() { SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyy HH:mm"); - return sdf.format(created); +// return sdf.format(created); + return created; } public void setCreated(Date created) { this.created = created; } + + public List getJournal() { return journal; } diff --git a/src/main/java/com/lambdaschool/bucketlist/models/Journal.java b/src/main/java/com/lambdaschool/bucketlist/models/Journal.java index f5f06cd..5966cc6 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/Journal.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/Journal.java @@ -22,6 +22,7 @@ public class Journal { @Column(nullable = false) private String entry; + public Journal(Item item, String entry) { this.item = item; this.entry = entry; diff --git a/src/main/java/com/lambdaschool/bucketlist/models/Response.java b/src/main/java/com/lambdaschool/bucketlist/models/Response.java new file mode 100644 index 0000000..874608f --- /dev/null +++ b/src/main/java/com/lambdaschool/bucketlist/models/Response.java @@ -0,0 +1,31 @@ +package com.lambdaschool.bucketlist.models; + +public class Response { + private String message; + + private String error; + + public Response(String message, String error) { + this.message = message; + this.error = error; + } + + public Response() { + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getError() { + return error; + } + + public void setError(String error) { + this.error = error; + } +} diff --git a/src/main/java/com/lambdaschool/bucketlist/models/User.java b/src/main/java/com/lambdaschool/bucketlist/models/User.java index 55dbf3e..ca621d5 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/User.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/User.java @@ -41,12 +41,19 @@ public class User extends Auditable @JsonIgnore private List userRoles = new ArrayList<>(); + @OneToMany(mappedBy = "user", + cascade = CascadeType.ALL) + @JsonIgnoreProperties("user") + private List requests = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) @JsonIgnoreProperties("user") private List friends = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) @@ -57,6 +64,10 @@ public User() { } + public User(String username) { + this.username = username; + } + public User(String username, String password, List userRoles) { setUsername(username); @@ -146,4 +157,12 @@ public List getFriends() { public void setFriends(List friends) { this.friends = friends; } + + public List getRequests() { + return requests; + } + + public void setRequests(List requests) { + this.requests = requests; + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java b/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java index 894469f..99c0305 100644 --- a/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java +++ b/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java @@ -4,11 +4,19 @@ import com.lambdaschool.bucketlist.view.GetFriends; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; import java.util.List; public interface FriendRepository extends CrudRepository { - @Query(value = "SELECT * FROM friends WHERE userid = 4", nativeQuery = true) - List getFriendRequests(long id); + @Query(value = "SELECT * FROM friends WHERE LOWER(friendusername) = :myfriendslist AND accepted = false", nativeQuery = true) + List getFriendRequests(@Param("myfriendslist") String username); +// List getFriendRequests(); + @Query(value = "SELECT * FROM friends WHERE accepted = true AND friendusername = :username OR requester = :username", nativeQuery = true) + List getAcceptedFriends(@Param("username") String user); + + + @Query(value = "SELECT * FROM friends WHERE friendusername = :username OR friendusername = :requester AND requester = :requester OR requester = :username", nativeQuery = true) + Friend searchIfRequestExists(@Param("requester") String requester, @Param("username") String username); } diff --git a/src/main/java/com/lambdaschool/bucketlist/repository/UserRepository.java b/src/main/java/com/lambdaschool/bucketlist/repository/UserRepository.java index 5d88d9d..043327c 100644 --- a/src/main/java/com/lambdaschool/bucketlist/repository/UserRepository.java +++ b/src/main/java/com/lambdaschool/bucketlist/repository/UserRepository.java @@ -1,9 +1,18 @@ package com.lambdaschool.bucketlist.repository; -import com.lambdaschool.bucketlist.models.User; -import org.springframework.data.repository.CrudRepository; + import com.lambdaschool.bucketlist.models.User; + import org.springframework.data.jpa.repository.Query; + import org.springframework.data.repository.CrudRepository; + import org.springframework.data.repository.query.Param; + + import java.util.List; public interface UserRepository extends CrudRepository { User findByUsername(String username); + + @Query(value = "SELECT username FROM users WHERE LOWER(username) LIKE %:search%", nativeQuery = true) + List findLikeUsername(@Param("search") String searchname); +// List findLikeUsername(); + } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java b/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java index 4e89ca7..909ff27 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java @@ -1,16 +1,21 @@ package com.lambdaschool.bucketlist.services; import com.lambdaschool.bucketlist.models.Friend; -import com.lambdaschool.bucketlist.models.UserRoles; +import com.lambdaschool.bucketlist.models.User; import java.util.List; +import java.util.Optional; public interface FriendService { Friend sendRequest(String request, String requester); + Optional findRequestById(long id); + Friend save(Friend friend); Friend update(long requestid); - List getMyFriends(long id); + List getMyFriends(String username); + + List getAcceptedFriends(String username); } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java b/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java index 873e90d..d826b89 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java @@ -2,7 +2,6 @@ import com.lambdaschool.bucketlist.models.Friend; import com.lambdaschool.bucketlist.models.User; -import com.lambdaschool.bucketlist.models.UserRoles; import com.lambdaschool.bucketlist.repository.FriendRepository; import com.lambdaschool.bucketlist.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +12,7 @@ import javax.persistence.EntityNotFoundException; import java.util.List; +import java.util.Optional; @Service(value = "friendService") @Transactional @@ -25,13 +25,36 @@ public class FriendServiceImpl implements FriendService{ @Override public Friend sendRequest(String request, String requester) { +// if(friendrepos.searchIfRequestExists(request, requester) != null){ +// System.out.println("******************************************************************** The request doesn't exist" ); +// Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); +// User currentUser = userrepos.findByUsername(authentication.getName()); +// Friend newRequest = new Friend(); +// newRequest.setFriendusername(request); +// newRequest.setRequester(requester); +// newRequest.setUser(currentUser); +// return friendrepos.save(newRequest); +// } else { +// System.out.println("***************************************************** It exists"); +// +// return null; +// } +// Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); User currentUser = userrepos.findByUsername(authentication.getName()); Friend newRequest = new Friend(); newRequest.setFriendusername(request); newRequest.setRequester(requester); newRequest.setUser(currentUser); +// System.out.println(friendrepos.searchIfRequestExists(request, requester)); return friendrepos.save(newRequest); + + + } + + @Override + public Optional findRequestById(long id) { + return friendrepos.findById(id); } @Override @@ -49,7 +72,13 @@ public Friend update(long requestid) { } @Override - public List getMyFriends(long id) { - return friendrepos.getFriendRequests(id); + public List getMyFriends(String username) { + System.out.println("*******************************************************************************************" + friendrepos.getFriendRequests(username)); + return friendrepos.getFriendRequests(username.toLowerCase()); + } + + @Override + public List getAcceptedFriends(String username) { + return friendrepos.getAcceptedFriends(username.toLowerCase()); } } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java b/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java index 1a4775d..66d4a26 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.persistence.EntityNotFoundException; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -101,8 +102,28 @@ public Item update(long id, Item item) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); User currentUser = userrepos.findByUsername(authentication.getName()); - item.setUser(currentUser); - item.setItemid(id); - return listrepos.save(item); + Item currentItem = listrepos.findById(id) + .orElseThrow(() -> new EntityNotFoundException(Long.toString(id))); + + currentItem.setItemtitle(item.getItemtitle()); + currentItem.setItemdesc(item.getItemdesc()); + currentItem.setCompleted(item.isCompleted()); + currentItem.setImage(item.getImage()); + currentItem.setItemid(item.getItemid()); + currentItem.setUser(currentUser); + currentItem.setCreated(item.getCreated()); + + if(item.getJournal().size() > 0){ + for (Journal j : item.getJournal()) + { + currentItem.getJournal().add(new Journal(j.getItem(), j.getEntry())); + } + + } + + +// item.setUser(currentUser); +// item.setItemid(id); + return listrepos.save(currentItem); } } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/UserService.java b/src/main/java/com/lambdaschool/bucketlist/services/UserService.java index 0245303..1bb14fd 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/UserService.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/UserService.java @@ -1,6 +1,5 @@ package com.lambdaschool.bucketlist.services; -import com.lambdaschool.bucketlist.models.Friend; import com.lambdaschool.bucketlist.models.User; import java.util.List; @@ -18,4 +17,6 @@ public interface UserService User update(User user, long id); + List searchUsers(String username); + } \ No newline at end of file diff --git a/src/main/java/com/lambdaschool/bucketlist/services/UserServiceImpl.java b/src/main/java/com/lambdaschool/bucketlist/services/UserServiceImpl.java index ca34dbc..a063183 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/UserServiceImpl.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/UserServiceImpl.java @@ -1,7 +1,6 @@ package com.lambdaschool.bucketlist.services; import com.lambdaschool.bucketlist.exceptions.ResourceNotFoundException; -import com.lambdaschool.bucketlist.models.Friend; import com.lambdaschool.bucketlist.models.Item; import com.lambdaschool.bucketlist.models.User; import com.lambdaschool.bucketlist.models.UserRoles; @@ -148,4 +147,8 @@ public User update(User user, long id) } + @Override + public List searchUsers(String username) { + return userrepos.findLikeUsername(username); + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/view/GetFriends.java b/src/main/java/com/lambdaschool/bucketlist/view/GetFriends.java index 7938d70..631a72e 100644 --- a/src/main/java/com/lambdaschool/bucketlist/view/GetFriends.java +++ b/src/main/java/com/lambdaschool/bucketlist/view/GetFriends.java @@ -5,4 +5,5 @@ public interface GetFriends { boolean getAccepted(); String getFriendusername(); String getRequester(); + long getUserid(); } diff --git a/src/main/java/com/lambdaschool/bucketlist/view/UserView.java b/src/main/java/com/lambdaschool/bucketlist/view/UserView.java new file mode 100644 index 0000000..fc7d7f4 --- /dev/null +++ b/src/main/java/com/lambdaschool/bucketlist/view/UserView.java @@ -0,0 +1,7 @@ +package com.lambdaschool.bucketlist.view; + +import com.lambdaschool.bucketlist.models.User; + +public interface UserView { + User getUsername(); +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index cf15661..5e8061e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -27,12 +27,12 @@ local.run.db=POSTGRESQL # What do with the schema # drop n create table again, good for testing -#spring.jpa.hibernate.ddl-auto=create -#spring.datasource.initialization-modealways +spring.jpa.hibernate.ddl-auto=create +spring.datasource.initialization-modealwasy # Good for production! -spring.jpa.hibernate.ddl-auto=update -spring.datasource.initialization-mode=never +#spring.jpa.hibernate.ddl-auto=update +#spring.datasource.initialization-mode=never # Should we use createBlob from java.sql.connection. PostgreSQL requires it to be true. spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true From 632f25c843a90358e414b1be5894a19402f80dba Mon Sep 17 00:00:00 2001 From: Michael Harris Date: Thu, 29 Aug 2019 11:10:56 -0700 Subject: [PATCH 6/7] Generated tests --- .../com/lambdaschool/bucketlist/SeedData.java | 6 +- .../controllers/ItemController.java | 79 +++++++++++-------- .../controllers/UserController.java | 47 +++++------ .../bucketlist/models/Journal.java | 15 ++++ .../lambdaschool/bucketlist/models/User.java | 2 - .../repository/BucketListRepository.java | 17 ++-- .../repository/FriendRepository.java | 4 +- .../bucketlist/repository/UserRepository.java | 4 + .../bucketlist/services/FriendService.java | 2 + .../services/FriendServiceImpl.java | 16 +++- .../bucketlist/services/ItemService.java | 6 +- .../bucketlist/services/ItemServiceImpl.java | 57 +++++++++---- .../bucketlist/services/UserService.java | 4 + .../bucketlist/services/UserServiceImpl.java | 5 ++ src/main/resources/application.properties | 8 +- .../com/lambdaschool/bucketlist/SeedData.java | 75 ++++++++++++++++++ .../bucketlist/StartHereApplication.java | 8 +- .../bucketlist/services/UserServiceTest.java | 46 +++++++++++ 18 files changed, 299 insertions(+), 102 deletions(-) create mode 100644 src/test/java/com/lambdaschool/bucketlist/SeedData.java create mode 100644 src/test/java/com/lambdaschool/bucketlist/services/UserServiceTest.java diff --git a/src/main/java/com/lambdaschool/bucketlist/SeedData.java b/src/main/java/com/lambdaschool/bucketlist/SeedData.java index 9227792..e8d4f4e 100644 --- a/src/main/java/com/lambdaschool/bucketlist/SeedData.java +++ b/src/main/java/com/lambdaschool/bucketlist/SeedData.java @@ -12,9 +12,9 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; -// -@Transactional -@Component +//// +//@Transactional +//@Component public class SeedData implements CommandLineRunner { @Autowired diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java index 90061bb..510cd11 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/ItemController.java @@ -1,9 +1,6 @@ package com.lambdaschool.bucketlist.controllers; -import com.lambdaschool.bucketlist.models.ErrorDetail; -import com.lambdaschool.bucketlist.models.Item; -import com.lambdaschool.bucketlist.models.Journal; -import com.lambdaschool.bucketlist.models.User; +import com.lambdaschool.bucketlist.models.*; import com.lambdaschool.bucketlist.repository.UserRepository; import com.lambdaschool.bucketlist.services.FriendService; import com.lambdaschool.bucketlist.services.ItemService; @@ -59,30 +56,24 @@ public ResponseEntity getUser(HttpServletRequest request, Authentication auth -// @GetMapping(value = "/{itemid}", -// produces = {"application/json"}) -// public ResponseEntity getItem(HttpServletRequest request, -// @PathVariable -// Long itemid) -// { -// logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); -// -// Item q = itemService.findQuoteById(itemid); -// return new ResponseEntity<>(q, HttpStatus.OK); -// } - - -// @GetMapping(value = "/username/{userName}", -// produces = {"application/json"}) -// public ResponseEntity findItemsByUserName(HttpServletRequest request, -// @PathVariable -// String userName) -// { -// logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); -// -// List theItems = itemService.findByUserName(userName); -// return new ResponseEntity<>(theItems, HttpStatus.OK); -// } + @GetMapping(value = "/username/{userName}", + produces = {"application/json"}) + public ResponseEntity findItemsByUserName(HttpServletRequest request, + @PathVariable + String userName) + { + logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + Response newResponse = new Response(); + + List friendItems = itemService.findItemByUserName(userName.toLowerCase()); + if(friendItems == null){ + newResponse.setError("No Items for that user"); + return new ResponseEntity<>(newResponse, HttpStatus.NOT_FOUND); + } else { + return new ResponseEntity<>(friendItems, HttpStatus.OK); + + } + } // @ApiOperation(value = "Create new Bucket list item") @@ -100,13 +91,8 @@ public ResponseEntity addNewItem(HttpServletRequest request, Authentication authentication) throws URISyntaxException { logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); - itemService.save(item); - - // set the location header for the newly created resource HttpHeaders responseHeaders = new HttpHeaders(); -// URI newQuoteURI = ServletUriComponentsBuilder.fromCurrentRequest().path("/{itemid}").buildAndExpand(newItem.getItemid()).toUri(); -// responseHeaders.setLocation(newQuoteURI); return new ResponseEntity<>(itemService.findItemById(item.getItemid()), responseHeaders, HttpStatus.CREATED); } @@ -115,7 +101,17 @@ public ResponseEntity addToJournal(@PathVariable long itemid, @RequestBody String journalentry){ itemService.addToJournal(itemid, journalentry); - return new ResponseEntity<>(null, HttpStatus.OK); + return new ResponseEntity<>(itemService.findItemById(itemid), HttpStatus.OK); + } + + @DeleteMapping(value = "/journal/{journalentryid}") + public ResponseEntity deleteJournalEntryById(HttpServletRequest request, + @PathVariable + long journalentryid) + { + logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + itemService.deleteFromJournal(journalentryid); + return new ResponseEntity<>(HttpStatus.OK); } @DeleteMapping(value = "/item/{id}") @@ -137,4 +133,19 @@ public ResponseEntity UpdateItemById(HttpServletRequest request, itemService.update(id, newItem); return new ResponseEntity<>(HttpStatus.OK); } + + @PutMapping(value = "/item/{itemid}/journal/{journalid}") + public ResponseEntity UpdateJournalById(HttpServletRequest request, + @PathVariable + long itemid, + @PathVariable + long journalid, + @RequestBody Journal newJournal) { + logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + Item itemToUpdate = itemService.findItemById(itemid); + newJournal.setItem(itemToUpdate); + + itemService.updateJournal(journalid, newJournal); + return new ResponseEntity<>(itemToUpdate, HttpStatus.OK); + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java b/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java index e793eb1..a08b2c9 100644 --- a/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java +++ b/src/main/java/com/lambdaschool/bucketlist/controllers/UserController.java @@ -1,9 +1,6 @@ package com.lambdaschool.bucketlist.controllers; -import com.lambdaschool.bucketlist.models.ErrorDetail; -import com.lambdaschool.bucketlist.models.Friend; -import com.lambdaschool.bucketlist.models.Response; -import com.lambdaschool.bucketlist.models.User; +import com.lambdaschool.bucketlist.models.*; import com.lambdaschool.bucketlist.repository.UserRepository; import com.lambdaschool.bucketlist.services.FriendService; import com.lambdaschool.bucketlist.services.UserService; @@ -37,14 +34,15 @@ public class UserController @Autowired private FriendService friendService; - @Autowired - private UserRepository userrepos; - - @GetMapping(value = "/search/{username}", produces = {"application/json"}) public ResponseEntity searchUsers(@PathVariable String username){ List foundUsers = userService.searchUsers(username); - System.out.println("*****************************************************" + userService.searchUsers(username)); + return new ResponseEntity<>(foundUsers, HttpStatus.OK); + } + + @GetMapping(value = "/searchwithlist/{username}", produces = {"application/json"}) + public ResponseEntity searchUsersWithList(@PathVariable String username){ + List foundUsers = userService.searchUsersLike(username); return new ResponseEntity<>(foundUsers, HttpStatus.OK); } @@ -54,10 +52,10 @@ public ResponseEntity searchUsers(@PathVariable String username){ @ApiResponse(code = 404, message = "Username not found", response = ErrorDetail.class), @ApiResponse(code = 500, message = "Server error", response = ErrorDetail.class) }) - @PostMapping(value = "add/{username}", consumes = {"application/json"}, produces = {"application/json"}) + @PostMapping(value = "add", consumes = {"application/json"}, produces = {"application/json"}) public ResponseEntity addFriend( @ApiParam(value = "Username", required = true, example = "JaneDoenomo") - @PathVariable + @RequestBody String username, Authentication authentication){ @@ -67,7 +65,6 @@ public ResponseEntity addFriend( } else { newResponse.setError("Request already exists"); } -// friendService.sendRequest(username, authentication.getName()); return new ResponseEntity<>(newResponse, HttpStatus.OK); } @@ -85,22 +82,6 @@ public ResponseEntity acceptRequest( return new ResponseEntity<>(null, HttpStatus.OK); } - - -// @PutMapping(value = "/user/{id}") -// public ResponseEntity updateUser(HttpServletRequest request, -// @RequestBody -// User updateUser, -// @PathVariable -// long id) -// { -// logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); -// -// userService.update(updateUser, id); -// return new ResponseEntity<>(HttpStatus.OK); -// } - - @PreAuthorize("hasAuthority('ROLE_ADMIN')") @DeleteMapping("/user/{id}") public ResponseEntity deleteUserById(HttpServletRequest request, @@ -112,4 +93,14 @@ public ResponseEntity deleteUserById(HttpServletRequest request, userService.delete(id); return new ResponseEntity<>(HttpStatus.OK); } + + @DeleteMapping(value = "/friends/{id}") + public ResponseEntity deleteFriendById(HttpServletRequest request, + @PathVariable + long id) + { + logger.trace(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + friendService.delete(id); + return new ResponseEntity<>(HttpStatus.OK); + } } \ No newline at end of file diff --git a/src/main/java/com/lambdaschool/bucketlist/models/Journal.java b/src/main/java/com/lambdaschool/bucketlist/models/Journal.java index 5966cc6..b641a44 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/Journal.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/Journal.java @@ -22,12 +22,19 @@ public class Journal { @Column(nullable = false) private String entry; + private String username; + public Journal(Item item, String entry) { this.item = item; this.entry = entry; } + public Journal(Item item, String entry, String username) { + this.item = item; + this.entry = entry; + this.username = username; + } public Journal() { } @@ -55,4 +62,12 @@ public String getEntry() { public void setEntry(String entry) { this.entry = entry; } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/models/User.java b/src/main/java/com/lambdaschool/bucketlist/models/User.java index ca621d5..66e8ef3 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/User.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/User.java @@ -52,8 +52,6 @@ public class User extends Auditable private List friends = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) diff --git a/src/main/java/com/lambdaschool/bucketlist/repository/BucketListRepository.java b/src/main/java/com/lambdaschool/bucketlist/repository/BucketListRepository.java index 475fb88..2a3e293 100644 --- a/src/main/java/com/lambdaschool/bucketlist/repository/BucketListRepository.java +++ b/src/main/java/com/lambdaschool/bucketlist/repository/BucketListRepository.java @@ -1,15 +1,16 @@ package com.lambdaschool.bucketlist.repository; -import com.lambdaschool.bucketlist.models.Item; -import com.lambdaschool.bucketlist.view.BucketList; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.CrudRepository; + import com.lambdaschool.bucketlist.models.Item; + import com.lambdaschool.bucketlist.view.BucketList; + import org.springframework.data.jpa.repository.Query; + import org.springframework.data.repository.CrudRepository; + import org.springframework.data.repository.query.Param; -import java.util.List; + import java.util.List; public interface BucketListRepository extends CrudRepository { -// SELECT * FROM ITEMS WHERE userid = 4 -// @Query(value = "SELECT * FROM items WHERE userid = :id", nativeQuery = true) -// List findByUserName(String username); + // SELECT * FROM ITEMS WHERE userid = 4 + @Query(value = "SELECT * FROM items WHERE userid = :id", nativeQuery = true) + List findItemsByUserId(@Param("id") long id); } diff --git a/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java b/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java index 99c0305..eea70d7 100644 --- a/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java +++ b/src/main/java/com/lambdaschool/bucketlist/repository/FriendRepository.java @@ -13,10 +13,10 @@ public interface FriendRepository extends CrudRepository { @Query(value = "SELECT * FROM friends WHERE LOWER(friendusername) = :myfriendslist AND accepted = false", nativeQuery = true) List getFriendRequests(@Param("myfriendslist") String username); // List getFriendRequests(); - @Query(value = "SELECT * FROM friends WHERE accepted = true AND friendusername = :username OR requester = :username", nativeQuery = true) + @Query(value = "SELECT * FROM friends WHERE accepted = true AND LOWER (friendusername) = :username OR LOWER (requester) = :username", nativeQuery = true) List getAcceptedFriends(@Param("username") String user); - @Query(value = "SELECT * FROM friends WHERE friendusername = :username OR friendusername = :requester AND requester = :requester OR requester = :username", nativeQuery = true) + @Query(value = "SELECT * FROM friends WHERE LOWER (friendusername) = :username OR LOWER (friendusername) = :requester AND LOWER (requester) = :requester OR LOWER (requester) = :username", nativeQuery = true) Friend searchIfRequestExists(@Param("requester") String requester, @Param("username") String username); } diff --git a/src/main/java/com/lambdaschool/bucketlist/repository/UserRepository.java b/src/main/java/com/lambdaschool/bucketlist/repository/UserRepository.java index 043327c..5141251 100644 --- a/src/main/java/com/lambdaschool/bucketlist/repository/UserRepository.java +++ b/src/main/java/com/lambdaschool/bucketlist/repository/UserRepository.java @@ -1,5 +1,6 @@ package com.lambdaschool.bucketlist.repository; + import com.lambdaschool.bucketlist.models.Item; import com.lambdaschool.bucketlist.models.User; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; @@ -11,6 +12,9 @@ public interface UserRepository extends CrudRepository { User findByUsername(String username); + @Query(value = "SELECT u.username, i.* FROM users u JOIN items i ON u.userid = i.userid WHERE u.username = :user", nativeQuery = true) + List findByUsernameLike(@Param("user") String username); + @Query(value = "SELECT username FROM users WHERE LOWER(username) LIKE %:search%", nativeQuery = true) List findLikeUsername(@Param("search") String searchname); // List findLikeUsername(); diff --git a/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java b/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java index 909ff27..40026d7 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/FriendService.java @@ -18,4 +18,6 @@ public interface FriendService { List getMyFriends(String username); List getAcceptedFriends(String username); + + void delete(long id); } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java b/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java index d826b89..f179db9 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/FriendServiceImpl.java @@ -1,5 +1,6 @@ package com.lambdaschool.bucketlist.services; +import com.lambdaschool.bucketlist.exceptions.ResourceNotFoundException; import com.lambdaschool.bucketlist.models.Friend; import com.lambdaschool.bucketlist.models.User; import com.lambdaschool.bucketlist.repository.FriendRepository; @@ -25,7 +26,7 @@ public class FriendServiceImpl implements FriendService{ @Override public Friend sendRequest(String request, String requester) { -// if(friendrepos.searchIfRequestExists(request, requester) != null){ +// if(friendrepos.searchIfRequestExists(request.toLowerCase(), requester.toLowerCase()) != null){ // System.out.println("******************************************************************** The request doesn't exist" ); // Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // User currentUser = userrepos.findByUsername(authentication.getName()); @@ -73,7 +74,6 @@ public Friend update(long requestid) { @Override public List getMyFriends(String username) { - System.out.println("*******************************************************************************************" + friendrepos.getFriendRequests(username)); return friendrepos.getFriendRequests(username.toLowerCase()); } @@ -81,4 +81,16 @@ public List getMyFriends(String username) { public List getAcceptedFriends(String username) { return friendrepos.getAcceptedFriends(username.toLowerCase()); } + + @Override + @Transactional + public void delete(long id) { + if (friendrepos.findById(id).isPresent()) + { + friendrepos.deleteById(id); + } else + { + throw new ResourceNotFoundException(Long.toString(id)); + } + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/ItemService.java b/src/main/java/com/lambdaschool/bucketlist/services/ItemService.java index 933be15..7099387 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/ItemService.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/ItemService.java @@ -12,7 +12,7 @@ public interface ItemService Item findItemById(long id); - List findByUserName(String username); + List findItemByUserName(String username); void delete(long id); @@ -20,6 +20,10 @@ public interface ItemService Journal addToJournal(long id, String journalEntry); + void deleteFromJournal(long id); + Item update(long id, Item item); + Journal updateJournal(long id, Journal journalEntry); + } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java b/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java index 66d4a26..89de029 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/ItemServiceImpl.java @@ -17,7 +17,6 @@ import javax.persistence.EntityNotFoundException; import java.util.ArrayList; import java.util.List; -import java.util.Optional; @Service(value = "itemService") public class ItemServiceImpl implements ItemService @@ -79,25 +78,36 @@ public Item save(Item item) } @Override - public List findByUserName(String username) + public List findItemByUserName(String username) throws ResourceNotFoundException { - List list = new ArrayList<>(); - listrepos.findAll().iterator().forEachRemaining(list::add); - - list.removeIf(q -> !q.getUser().getUsername().equalsIgnoreCase(username)); - return list; + User currentUser = userrepos.findByUsername(username); + return listrepos.findItemsByUserId(currentUser.getUserid()); } @Override public Journal addToJournal(long id, String journalEntry) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + User currentUser = userrepos.findByUsername(authentication.getName()); + Journal newEntry = new Journal(); newEntry.setEntry(journalEntry); newEntry.setItem(findItemById(id)); + newEntry.setUsername(currentUser.getUsername()); System.out.println("*********************************" + listrepos.findById(id)); return journalrepos.save(newEntry); } @Override + public void deleteFromJournal(long id) { + if(journalrepos.findById(id).isPresent()){ + journalrepos.deleteById(id); + } else { + throw new ResourceNotFoundException(Long.toString(id)); + } + } + + @Override + @Transactional public Item update(long id, Item item) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); User currentUser = userrepos.findByUsername(authentication.getName()); @@ -113,17 +123,36 @@ public Item update(long id, Item item) { currentItem.setUser(currentUser); currentItem.setCreated(item.getCreated()); - if(item.getJournal().size() > 0){ - for (Journal j : item.getJournal()) - { - currentItem.getJournal().add(new Journal(j.getItem(), j.getEntry())); - } - - } +// if(item.getJournal().size() > 0){ +// for (Journal j : item.getJournal()) +// { +// currentItem.getJournal().add(new Journal(j.getItem(), j.getEntry())); +// } +// +// } // item.setUser(currentUser); // item.setItemid(id); return listrepos.save(currentItem); } + + @Override + @Transactional + public Journal updateJournal(long id, Journal journalEntry) { + if(journalrepos.findById(id).isPresent()){ + Journal newJournalEntry = new Journal(); + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + User currentUser = userrepos.findByUsername(authentication.getName()); + newJournalEntry.setUsername(currentUser.getUsername()); + newJournalEntry.setEntry(journalEntry.getEntry()); + newJournalEntry.setItem(journalEntry.getItem()); + newJournalEntry.setJournalentryid(id); + journalrepos.findById(id); + return journalrepos.save(newJournalEntry); + } else { + throw new ResourceNotFoundException(Long.toString(id)); + } + + } } diff --git a/src/main/java/com/lambdaschool/bucketlist/services/UserService.java b/src/main/java/com/lambdaschool/bucketlist/services/UserService.java index 1bb14fd..4a310ba 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/UserService.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/UserService.java @@ -1,5 +1,6 @@ package com.lambdaschool.bucketlist.services; +import com.lambdaschool.bucketlist.models.Item; import com.lambdaschool.bucketlist.models.User; import java.util.List; @@ -19,4 +20,7 @@ public interface UserService List searchUsers(String username); + List searchUsersLike(String username); + + } \ No newline at end of file diff --git a/src/main/java/com/lambdaschool/bucketlist/services/UserServiceImpl.java b/src/main/java/com/lambdaschool/bucketlist/services/UserServiceImpl.java index a063183..a3df1eb 100644 --- a/src/main/java/com/lambdaschool/bucketlist/services/UserServiceImpl.java +++ b/src/main/java/com/lambdaschool/bucketlist/services/UserServiceImpl.java @@ -151,4 +151,9 @@ public User update(User user, long id) public List searchUsers(String username) { return userrepos.findLikeUsername(username); } + + @Override + public List searchUsersLike(String username) { + return userrepos.findByUsernameLike(username.toLowerCase()); + } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 5e8061e..2eb8edc 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -27,12 +27,12 @@ local.run.db=POSTGRESQL # What do with the schema # drop n create table again, good for testing -spring.jpa.hibernate.ddl-auto=create -spring.datasource.initialization-modealwasy +##spring.jpa.hibernate.ddl-auto=create +#spring.datasource.initialization-modealwasy # Good for production! -#spring.jpa.hibernate.ddl-auto=update -#spring.datasource.initialization-mode=never +spring.jpa.hibernate.ddl-auto=update +spring.datasource.initialization-mode=never # Should we use createBlob from java.sql.connection. PostgreSQL requires it to be true. spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true diff --git a/src/test/java/com/lambdaschool/bucketlist/SeedData.java b/src/test/java/com/lambdaschool/bucketlist/SeedData.java new file mode 100644 index 0000000..52c4a33 --- /dev/null +++ b/src/test/java/com/lambdaschool/bucketlist/SeedData.java @@ -0,0 +1,75 @@ +package com.lambdaschool.bucketlist; + +import com.lambdaschool.bucketlist.models.Item; +import com.lambdaschool.bucketlist.models.Role; +import com.lambdaschool.bucketlist.models.User; +import com.lambdaschool.bucketlist.models.UserRoles; +import com.lambdaschool.bucketlist.services.RoleService; +import com.lambdaschool.bucketlist.services.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; + +import java.util.ArrayList; + +//// +//@Transactional +//@Component +public class SeedData implements CommandLineRunner +{ + @Autowired + RoleService roleService; + + @Autowired + UserService userService; + + + @Override + public void run(String[] args) throws Exception + { + Role r1 = new Role("admin"); + Role r2 = new Role("user"); + Role r3 = new Role("data"); + + roleService.save(r1); + roleService.save(r2); + roleService.save(r3); + + // admin, data, user + ArrayList admins = new ArrayList<>(); + admins.add(new UserRoles(new User(), r1)); + admins.add(new UserRoles(new User(), r2)); + admins.add(new UserRoles(new User(), r3)); + User u1 = new User("admin", "password", admins); + u1.getItems().add(new Item("A creative man is motivated by the desire to achieve, not by the desire to beat others", u1)); + u1.getItems().add(new Item("The question isn't who is going to let me; it's who is going to stop me.", u1)); + userService.save(u1); + + // data, user + ArrayList datas = new ArrayList<>(); + datas.add(new UserRoles(new User(), r3)); + datas.add(new UserRoles(new User(), r2)); + User u2 = new User("cinnamon", "1234567", datas); + userService.save(u2); + + // user + ArrayList users = new ArrayList<>(); + users.add(new UserRoles(new User(), r2)); + User u3 = new User("barnbarn", "ILuvM4th!", users); + u3.getItems().add(new Item("Live long and prosper", u3)); + u3.getItems().add(new Item("The enemy of my enemy is the enemy I kill last", u3)); + u3.getItems().add(new Item("Beam me up", u3)); + userService.save(u3); + + users = new ArrayList<>(); + users.add(new UserRoles(new User(), r2)); + User u4 = new User("Bob", "password", users); + userService.save(u4); + + users = new ArrayList<>(); + users.add(new UserRoles(new User(), r2)); + User u5 = new User("Jane", "password", users); + userService.save(u5); + + + } +} \ No newline at end of file diff --git a/src/test/java/com/lambdaschool/bucketlist/StartHereApplication.java b/src/test/java/com/lambdaschool/bucketlist/StartHereApplication.java index 3e0aa3c..2dae2c9 100644 --- a/src/test/java/com/lambdaschool/bucketlist/StartHereApplication.java +++ b/src/test/java/com/lambdaschool/bucketlist/StartHereApplication.java @@ -7,10 +7,10 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; import springfox.documentation.swagger2.annotations.EnableSwagger2; -//@EnableWebMvc -//// @EnableJpaAuditing -//@SpringBootApplication -//@EnableSwagger2 +@EnableWebMvc +// @EnableJpaAuditing +@SpringBootApplication +@EnableSwagger2 public class StartHereApplication { diff --git a/src/test/java/com/lambdaschool/bucketlist/services/UserServiceTest.java b/src/test/java/com/lambdaschool/bucketlist/services/UserServiceTest.java new file mode 100644 index 0000000..a7712f9 --- /dev/null +++ b/src/test/java/com/lambdaschool/bucketlist/services/UserServiceTest.java @@ -0,0 +1,46 @@ +package com.lambdaschool.bucketlist.services; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class UserServiceTest { + + @BeforeEach + void setUp() { + } + + @AfterEach + void tearDown() { + } + + @Test + void findAll() { + } + + @Test + void findUserById() { + } + + @Test + void delete() { + } + + @Test + void save() { + } + + @Test + void update() { + } + + @Test + void searchUsers() { + } + + @Test + void searchUsersLike() { + } +} \ No newline at end of file From 4af89249373eb7ceb14aad7848bf321e73ddd8a7 Mon Sep 17 00:00:00 2001 From: Michael Harris Date: Thu, 29 Aug 2019 15:54:49 -0700 Subject: [PATCH 7/7] Two test add --- .../lambdaschool/bucketlist/models/User.java | 4 ++ ...on.java => BucketListApplicationTest.java} | 10 +++-- .../com/lambdaschool/bucketlist/SeedData.java | 42 +++++++++++-------- .../bucketlist/services/UserServiceTest.java | 32 +++++++++++++- src/test/resources/application.properties | 9 ++-- 5 files changed, 69 insertions(+), 28 deletions(-) rename src/test/java/com/lambdaschool/bucketlist/{StartHereApplication.java => BucketListApplicationTest.java} (79%) diff --git a/src/main/java/com/lambdaschool/bucketlist/models/User.java b/src/main/java/com/lambdaschool/bucketlist/models/User.java index 66e8ef3..9c0b192 100644 --- a/src/main/java/com/lambdaschool/bucketlist/models/User.java +++ b/src/main/java/com/lambdaschool/bucketlist/models/User.java @@ -77,6 +77,10 @@ public User(String username, String password, List userRoles) this.userRoles = userRoles; } + public User(String newUsernametest, String password) { + super(); + } + public long getUserid() { return userid; diff --git a/src/test/java/com/lambdaschool/bucketlist/StartHereApplication.java b/src/test/java/com/lambdaschool/bucketlist/BucketListApplicationTest.java similarity index 79% rename from src/test/java/com/lambdaschool/bucketlist/StartHereApplication.java rename to src/test/java/com/lambdaschool/bucketlist/BucketListApplicationTest.java index 2dae2c9..65c6f95 100644 --- a/src/test/java/com/lambdaschool/bucketlist/StartHereApplication.java +++ b/src/test/java/com/lambdaschool/bucketlist/BucketListApplicationTest.java @@ -1,22 +1,24 @@ package com.lambdaschool.bucketlist; +import org.junit.runner.RunWith; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; +import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.servlet.DispatcherServlet; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import springfox.documentation.swagger2.annotations.EnableSwagger2; -@EnableWebMvc +//@EnableWebMvc // @EnableJpaAuditing @SpringBootApplication -@EnableSwagger2 -public class StartHereApplication +//@EnableSwagger2 +public class BucketListApplicationTest { public static void main(String[] args) { - ApplicationContext ctx = SpringApplication.run(BucketListApplication.class, args); + ApplicationContext ctx = SpringApplication.run(BucketListApplicationTest.class, args); DispatcherServlet dispatcherServlet = (DispatcherServlet) ctx.getBean("dispatcherServlet"); dispatcherServlet.setThrowExceptionIfNoHandlerFound(true); diff --git a/src/test/java/com/lambdaschool/bucketlist/SeedData.java b/src/test/java/com/lambdaschool/bucketlist/SeedData.java index 52c4a33..b6d396b 100644 --- a/src/test/java/com/lambdaschool/bucketlist/SeedData.java +++ b/src/test/java/com/lambdaschool/bucketlist/SeedData.java @@ -4,10 +4,14 @@ import com.lambdaschool.bucketlist.models.Role; import com.lambdaschool.bucketlist.models.User; import com.lambdaschool.bucketlist.models.UserRoles; +import com.lambdaschool.bucketlist.repository.RoleRepository; +import com.lambdaschool.bucketlist.repository.UserRepository; import com.lambdaschool.bucketlist.services.RoleService; import com.lambdaschool.bucketlist.services.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; @@ -16,11 +20,13 @@ //@Component public class SeedData implements CommandLineRunner { - @Autowired - RoleService roleService; + private UserRepository userrepos; + private RoleRepository rolerepos; - @Autowired - UserService userService; + public SeedData(UserRepository userrepos, RoleRepository rolerepos){ + this.userrepos = userrepos; + this.rolerepos = rolerepos; + } @Override @@ -30,45 +36,45 @@ public void run(String[] args) throws Exception Role r2 = new Role("user"); Role r3 = new Role("data"); - roleService.save(r1); - roleService.save(r2); - roleService.save(r3); + rolerepos.save(r1); + rolerepos.save(r2); + rolerepos.save(r3); - // admin, data, user + // admin, data, user ArrayList admins = new ArrayList<>(); admins.add(new UserRoles(new User(), r1)); admins.add(new UserRoles(new User(), r2)); admins.add(new UserRoles(new User(), r3)); - User u1 = new User("admin", "password", admins); + User u1 = new User("Testadmin", "password", admins); u1.getItems().add(new Item("A creative man is motivated by the desire to achieve, not by the desire to beat others", u1)); u1.getItems().add(new Item("The question isn't who is going to let me; it's who is going to stop me.", u1)); - userService.save(u1); + userrepos.save(u1); // data, user ArrayList datas = new ArrayList<>(); datas.add(new UserRoles(new User(), r3)); datas.add(new UserRoles(new User(), r2)); - User u2 = new User("cinnamon", "1234567", datas); - userService.save(u2); + User u2 = new User("Testcinnamon", "1234567", datas); + userrepos.save(u2); // user ArrayList users = new ArrayList<>(); users.add(new UserRoles(new User(), r2)); - User u3 = new User("barnbarn", "ILuvM4th!", users); + User u3 = new User("Testbarnbarn", "ILuvM4th!", users); u3.getItems().add(new Item("Live long and prosper", u3)); u3.getItems().add(new Item("The enemy of my enemy is the enemy I kill last", u3)); u3.getItems().add(new Item("Beam me up", u3)); - userService.save(u3); + userrepos.save(u3); users = new ArrayList<>(); users.add(new UserRoles(new User(), r2)); - User u4 = new User("Bob", "password", users); - userService.save(u4); + User u4 = new User("TestBob", "password", users); + userrepos.save(u4); users = new ArrayList<>(); users.add(new UserRoles(new User(), r2)); - User u5 = new User("Jane", "password", users); - userService.save(u5); + User u5 = new User("TeatJane", "password", users); + userrepos.save(u5); } diff --git a/src/test/java/com/lambdaschool/bucketlist/services/UserServiceTest.java b/src/test/java/com/lambdaschool/bucketlist/services/UserServiceTest.java index a7712f9..4da0fbb 100644 --- a/src/test/java/com/lambdaschool/bucketlist/services/UserServiceTest.java +++ b/src/test/java/com/lambdaschool/bucketlist/services/UserServiceTest.java @@ -1,27 +1,49 @@ package com.lambdaschool.bucketlist.services; +import com.lambdaschool.bucketlist.BucketListApplication; +import com.lambdaschool.bucketlist.BucketListApplicationTest; +import com.lambdaschool.bucketlist.models.Role; +import com.lambdaschool.bucketlist.models.User; +import com.lambdaschool.bucketlist.models.UserRoles; +import org.junit.After; +import org.junit.Before; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.ArrayList; +import java.util.List; import static org.junit.jupiter.api.Assertions.*; +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BucketListApplicationTest.class) class UserServiceTest { + @Autowired + private UserService userService; - @BeforeEach + @Before void setUp() { + MockitoAnnotations.initMocks(this); } - @AfterEach + @After void tearDown() { } @Test void findAll() { + assertEquals(5, userService.findAll().size()); } @Test void findUserById() { + assertEquals("TestBob", userService.findUserById(12).getUsername()); } @Test @@ -30,6 +52,12 @@ void delete() { @Test void save() { +// Role r2 = new Role("user"); +// List users = new ArrayList<>(); +// users.add(new UserRoles(new User(), r2)); +// User newUser = new User("NewUserTest", "password", users); + userService.save(new User("NewUsernametest", "password")); + assertEquals(6, userService.findAll().size()); } @Test diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index e99e35c..6295a07 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -16,8 +16,6 @@ server.port=${PORT:2019} # Find heroku info # heroku config -a jrmmba-starthere -#postgres://jrnwmxwprjdbyk:1963035ba6d22f0b414b91794dfd33af398f75f60bcb7fed69b53e5dea9396ac@ec2-174-129-18-42.compute-1.amazonaws.com:5432/d8hfsmnh2ucd4h -# postgres://rrwzjxlkniayov:83e8dc9dc5a3c3a30e40dde8fb62941da11030b3953709f5c8f808690e776c71@ec2-54-243-241-62.compute-1.amazonaws.com:5432/d7bl8dlv2l83jj # posgress://username :password @url :5432/dbname # Begin h2 configuration @@ -29,10 +27,13 @@ spring.h2.console.settings.web-allow-others=true # What do with the schema # drop n create table again, good for testing +# +#spring.jpa.hibernate.ddl-auto=create +#spring.datasource.initialization-modealwasy # Good for production! -#spring.jpa.hibernate.ddl-auto=update -#spring.datasource.initialization-mode=never +spring.jpa.hibernate.ddl-auto=update +spring.datasource.initialization-mode=never # Should we use createBlob from java.sql.connection. PostgreSQL requires it to be true. spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true