From 65dfc305bf8a2589c786ad95a3410b7add4bee37 Mon Sep 17 00:00:00 2001 From: vaidehi4321 <56602405+vaidehi4321@users.noreply.github.com> Date: Sat, 7 Dec 2019 20:00:52 -0500 Subject: [PATCH 1/3] finished third part --- .../Controller/OptionController.java | 7 +++ .../Controller/PollController.java | 57 +++++++++++++++++++ .../Controller/VoteController.java | 43 ++++++++++++++ .../Repositories/OptionRepository.java | 9 +++ .../Repositories/PollRepository.java | 10 ++++ .../Repositories/VoteRepository.java | 18 ++++++ .../domain/Option.java | 32 +++++++++++ .../domain/Poll.java | 42 ++++++++++++++ .../domain/Vote.java | 30 ++++++++++ 9 files changed, 248 insertions(+) create mode 100644 src/main/java/io/zipcoder/tc_spring_poll_application/Controller/OptionController.java create mode 100644 src/main/java/io/zipcoder/tc_spring_poll_application/Controller/PollController.java create mode 100644 src/main/java/io/zipcoder/tc_spring_poll_application/Controller/VoteController.java create mode 100644 src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/OptionRepository.java create mode 100644 src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/PollRepository.java create mode 100644 src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/VoteRepository.java create mode 100644 src/main/java/io/zipcoder/tc_spring_poll_application/domain/Option.java create mode 100644 src/main/java/io/zipcoder/tc_spring_poll_application/domain/Poll.java create mode 100644 src/main/java/io/zipcoder/tc_spring_poll_application/domain/Vote.java diff --git a/src/main/java/io/zipcoder/tc_spring_poll_application/Controller/OptionController.java b/src/main/java/io/zipcoder/tc_spring_poll_application/Controller/OptionController.java new file mode 100644 index 0000000..ed0f413 --- /dev/null +++ b/src/main/java/io/zipcoder/tc_spring_poll_application/Controller/OptionController.java @@ -0,0 +1,7 @@ +package io.zipcoder.tc_spring_poll_application.Controller; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class OptionController { +} diff --git a/src/main/java/io/zipcoder/tc_spring_poll_application/Controller/PollController.java b/src/main/java/io/zipcoder/tc_spring_poll_application/Controller/PollController.java new file mode 100644 index 0000000..7d0c4f6 --- /dev/null +++ b/src/main/java/io/zipcoder/tc_spring_poll_application/Controller/PollController.java @@ -0,0 +1,57 @@ +package io.zipcoder.tc_spring_poll_application.Controller; + +import io.zipcoder.tc_spring_poll_application.Repositories.PollRepository; +import io.zipcoder.tc_spring_poll_application.domain.Poll; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import java.net.URI; + +@RestController +public class PollController { + PollRepository pollRepository ; + Poll poll; + @Autowired + public PollController(PollRepository pollRepository){ + this.pollRepository = pollRepository; + } + @RequestMapping(value="/polls", method= RequestMethod.GET) + public ResponseEntity> getAllPolls() { + Iterable allPolls = pollRepository.findAll(); + return new ResponseEntity<>(allPolls, HttpStatus.OK); + } + @RequestMapping(value="/polls", method=RequestMethod.POST) + public ResponseEntity createPoll(@RequestBody Poll poll) { + poll = pollRepository.save(poll); + URI newPollUri = ServletUriComponentsBuilder + .fromCurrentRequest() + .path("/{id}") + .buildAndExpand(poll.getId()) + .toUri(); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setLocation(newPollUri); + return new ResponseEntity<>(null, HttpStatus.CREATED); + } + @RequestMapping(value="/polls/{pollId}", method=RequestMethod.GET) + public ResponseEntity getPoll(@PathVariable Long pollId) { + Poll p = pollRepository.findOne(pollId); + return new ResponseEntity<> (p, HttpStatus.OK); + } + @RequestMapping(value="/polls/{pollId}", method=RequestMethod.PUT) + public ResponseEntity updatePoll(@RequestBody Poll poll, @PathVariable Long pollId) { + // Save the entity + Poll p = pollRepository.save(poll); + return new ResponseEntity<>(HttpStatus.OK); + } + @RequestMapping(value="/polls/{pollId}", method=RequestMethod.DELETE) + public ResponseEntity deletePoll(@PathVariable Long pollId) { + pollRepository.delete(pollId); + return new ResponseEntity<>(HttpStatus.OK); + } + + +} diff --git a/src/main/java/io/zipcoder/tc_spring_poll_application/Controller/VoteController.java b/src/main/java/io/zipcoder/tc_spring_poll_application/Controller/VoteController.java new file mode 100644 index 0000000..2bfff21 --- /dev/null +++ b/src/main/java/io/zipcoder/tc_spring_poll_application/Controller/VoteController.java @@ -0,0 +1,43 @@ +package io.zipcoder.tc_spring_poll_application.Controller; + +import io.zipcoder.tc_spring_poll_application.Repositories.VoteRepository; +import io.zipcoder.tc_spring_poll_application.domain.Vote; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +@RestController +public class VoteController { + private VoteRepository voteRepository; + + @Autowired + public VoteController(VoteRepository voteRepository) { + this.voteRepository = voteRepository; + } + + @RequestMapping(value = "/polls/{pollId}/votes", method = RequestMethod.POST) + public ResponseEntity createVote(@PathVariable Long pollId, @RequestBody Vote + vote) { + vote = voteRepository.save(vote); + // Set the headers for the newly created resource + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.setLocation(ServletUriComponentsBuilder. + fromCurrentRequest().path("/{id}").buildAndExpand(vote.getId()).toUri()); + return new ResponseEntity<>(null, responseHeaders, HttpStatus.CREATED); + } + @RequestMapping(value="/polls/votes", method=RequestMethod.GET) + public Iterable getAllVotes() { + return voteRepository.findAll(); + } + @RequestMapping(value="/polls/{pollId}/votes", method=RequestMethod.GET) + public Iterable getVote(@PathVariable Long pollId) { + return voteRepository.findById(pollId); + } + + +} diff --git a/src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/OptionRepository.java b/src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/OptionRepository.java new file mode 100644 index 0000000..7e2e2cb --- /dev/null +++ b/src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/OptionRepository.java @@ -0,0 +1,9 @@ +package io.zipcoder.tc_spring_poll_application.Repositories; + +import io.zipcoder.tc_spring_poll_application.domain.Option; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface OptionRepository extends CrudRepository { +} diff --git a/src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/PollRepository.java b/src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/PollRepository.java new file mode 100644 index 0000000..67acfef --- /dev/null +++ b/src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/PollRepository.java @@ -0,0 +1,10 @@ +package io.zipcoder.tc_spring_poll_application.Repositories; + + +import io.zipcoder.tc_spring_poll_application.domain.Poll; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PollRepository extends CrudRepository { +} diff --git a/src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/VoteRepository.java b/src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/VoteRepository.java new file mode 100644 index 0000000..ecfd92d --- /dev/null +++ b/src/main/java/io/zipcoder/tc_spring_poll_application/Repositories/VoteRepository.java @@ -0,0 +1,18 @@ +package io.zipcoder.tc_spring_poll_application.Repositories; + +import io.zipcoder.tc_spring_poll_application.domain.Vote; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface VoteRepository extends CrudRepository { + @Query(value = "SELECT v.* " + + "FROM Option o, Vote v " + + "WHERE o.POLL_ID = ?1 " + + "AND v.OPTION_ID = o.OPTION_ID", nativeQuery = true) + public Iterable findVotesByPoll(Long pollId); + + Iterable findById(Long pollId); +} + diff --git a/src/main/java/io/zipcoder/tc_spring_poll_application/domain/Option.java b/src/main/java/io/zipcoder/tc_spring_poll_application/domain/Option.java new file mode 100644 index 0000000..82728ca --- /dev/null +++ b/src/main/java/io/zipcoder/tc_spring_poll_application/domain/Option.java @@ -0,0 +1,32 @@ +package io.zipcoder.tc_spring_poll_application.domain; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Option { + @Id + @GeneratedValue + @Column(name = "OPTION_ID") + private Long id; + @Column(name = "OPTION_VALUE") + private String value; + + public Long getId() { + return id; + } + + public String getValue() { + return value; + } + + public void setId(Long id) { + this.id = id; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/io/zipcoder/tc_spring_poll_application/domain/Poll.java b/src/main/java/io/zipcoder/tc_spring_poll_application/domain/Poll.java new file mode 100644 index 0000000..ccb460b --- /dev/null +++ b/src/main/java/io/zipcoder/tc_spring_poll_application/domain/Poll.java @@ -0,0 +1,42 @@ +package io.zipcoder.tc_spring_poll_application.domain; + +import javax.persistence.*; +import java.util.Set; + +@Entity +public class Poll { + @Id + @GeneratedValue + @Column(name = "POLL_ID") +private Long id; + @Column(name = "QUESTION") + private String question; + @OneToMany(cascade = CascadeType.ALL) + @JoinColumn(name = "POLL_ID") + @OrderBy + Set