--- tags: parse, spring-boot --- # Models ## Serializable ```java= package edu.famu.nytimebackend.models.serializable; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.lang.Nullable; @Data @NoArgsConstructor @AllArgsConstructor public class SerializableFavorites { private @Nullable String favoriteId; private String bookId; private String title; private String description; private String author; private String image; private @Nullable String contributor; private @Nullable String amazon_link; private @Nullable String user; } ``` ## Parse ```java= package edu.famu.nytimebackend.models; import edu.famu.nytimebackend.models.serializable.SerializableFavorites; import org.parse4j.*; @ParseClassName("Favorites") public class Favorites extends ParseObject { private final String BOOK_ID = "bookId"; private final String TITLE = "title"; private final String DESC = "description"; private final String AUTHOR = "author"; private final String IMG = "image"; private final String CONTRIBUTOR = "contributor"; private final String AMAZON = "amazon_link"; private final String USER_ID = "userId"; public void setBookId(String id) { put(BOOK_ID, id); } public String getBookId() { return getString(BOOK_ID); } public void setTitle(String title) { put(TITLE,title); } public String getTitle(){ return getString(TITLE); } public void setDescription(String desc) { put(DESC, desc); } public String getDescription() { return getString(DESC); } public void setAuthor(String author) { put(AUTHOR, author); } public String getAuthor() { return getString(AUTHOR); } public void setImage(String image) { put(IMG, image); } public String getImage() { return getString(IMG); } public void setContributor(String contributor) { put(CONTRIBUTOR, contributor); } public String getContributor() { return getString(CONTRIBUTOR); } public void setAmazonLink(String link) { put(AMAZON, link); } public String getAmazonLink() { return getString(AMAZON); } public void setUser(String id) { ParseQuery<User> query = ParseQuery.getQuery(User.class); try { User user = query.get(id); put(USER_ID, user); } catch (ParseException e) { e.printStackTrace(); } } public SerializableFavorites getSerializable() { return new SerializableFavorites(getObjectId(), getBookId(), getTitle(), getDescription(), getAuthor(), getImage(), getContributor(), getAmazonLink(), null); } } ``` # Services ```java= package edu.famu.nytimebackend.services; import edu.famu.nytimebackend.models.Favorites; import edu.famu.nytimebackend.models.User; import edu.famu.nytimebackend.models.serializable.SerializableFavorites; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.parse4j.ParseException; import org.parse4j.ParseQuery; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class FavoritesService { protected final Log logger = LogFactory.getLog(this.getClass()); //used to write to the console public ArrayList<SerializableFavorites> getFavoriteByUser(String userId){ ArrayList<SerializableFavorites> favorites = null; ParseQuery<User> userQuery = ParseQuery.getQuery(User.class); userQuery.whereEqualTo("objectId",userId); ParseQuery<Favorites> query = ParseQuery.getQuery(Favorites.class); query.whereMatchesQuery("userId",userQuery); try{ List<Favorites> result = query.find(); favorites = new ArrayList<>(); for(Favorites f: result){ favorites.add(f.getSerializable()); } } catch (ParseException e) { logger.error("getFavoriteByUser Error: ", e); } return favorites; } public String addFavorite(SerializableFavorites favorite) { String id = "Favorite is not added"; Favorites fav = new Favorites(); fav.setBookId(favorite.getBookId()); fav.setTitle(favorite.getTitle()); fav.setDescription(favorite.getDescription()); fav.setAuthor(favorite.getAuthor()); fav.setImage(favorite.getImage()); fav.setContributor(favorite.getContributor()); fav.setAmazonLink(favorite.getAmazon_link()); fav.setUser(favorite.getUser()); try { fav.save(); id = fav.getObjectId(); } catch(ParseException e) { e.printStackTrace(); } return id; } public boolean removeFavorite(String id) { boolean status = false; ParseQuery<Favorites> query = ParseQuery.getQuery(Favorites.class); try { Favorites favorite = query.get(id); favorite.delete(); status = true; } catch (ParseException e) { e.printStackTrace(); } return status; } } ``` # Controller ```java= package edu.famu.nytimebackend.controllers; import edu.famu.nytimebackend.models.serializable.SerializableFavorites; import edu.famu.nytimebackend.services.FavoritesService; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; @RestController @RequestMapping("/api/favorites") public class FavoritesController { private FavoritesService favoritesService; public FavoritesController(FavoritesService favoritesService) { this.favoritesService = favoritesService; } @GetMapping("/{id}") public ArrayList<SerializableFavorites> getFavoritesByUser(@PathVariable(name = "id") String id){ return favoritesService.getFavoriteByUser(id); } @PostMapping("/") public String addFavorite(@RequestBody SerializableFavorites favorite){ return favoritesService.addFavorite(favorite); } @DeleteMapping("/{id}") public boolean removeFavorite(@PathVariable(name="id") String id){ return favoritesService.removeFavorite(id); } } ```