diff --git a/src/main/java/lv/ctco/javaschool/eventorganaizer/boundary/EventOrganizationApi.java b/src/main/java/lv/ctco/javaschool/eventorganaizer/boundary/EventOrganizationApi.java index c7dc71d..c812508 100644 --- a/src/main/java/lv/ctco/javaschool/eventorganaizer/boundary/EventOrganizationApi.java +++ b/src/main/java/lv/ctco/javaschool/eventorganaizer/boundary/EventOrganizationApi.java @@ -1,6 +1,7 @@ package lv.ctco.javaschool.eventorganaizer.boundary; import lv.ctco.javaschool.auth.control.UserStore; +import lv.ctco.javaschool.auth.entity.domain.User; import lv.ctco.javaschool.eventorganaizer.control.AnswersStore; import lv.ctco.javaschool.eventorganaizer.control.EventStore; import lv.ctco.javaschool.eventorganaizer.control.PollStore; @@ -13,13 +14,12 @@ import lv.ctco.javaschool.eventorganaizer.entity.PollDto; import lv.ctco.javaschool.eventorganaizer.entity.TopicDto; import lv.ctco.javaschool.eventorganaizer.entity.TopicListDto; +import lv.ctco.javaschool.eventorganaizer.entity.UserPoll; import javax.annotation.security.RolesAllowed; import javax.ejb.Stateless; import javax.inject.Inject; -import javax.persistence.EntityManager; import javax.persistence.EntityNotFoundException; -import javax.persistence.PersistenceContext; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -32,9 +32,6 @@ @Path("/event") @Stateless public class EventOrganizationApi { - @PersistenceContext - private EntityManager em; -// @Inject private UserStore userStore; @@ -122,14 +119,35 @@ public List getPollForEvent(@PathParam("id") Long id) { @POST @RolesAllowed({"ADMIN", "USER"}) - @Path("/{id}/vote") + @Path("/vote/{id}") public void updateVoteCounter(@PathParam("id") Long id) { - Optional answer = answersStore.getAnswerByID(id); - if (answer.isPresent()) { - answer.get().setCounter(answer.get().getCounter() + 1); + User currentUser = userStore.getCurrentUser(); + Optional userAnswer = answersStore.getAnswerByID(id); + if (userAnswer.isPresent()) { + Answer answer = userAnswer.get(); + Optional userVote = pollStore.getUserPollByUserAndPoll(currentUser, answer.getPoll()); + if (userVote.isPresent()) { + throw new EntityNotFoundException(); + } + registerNewUserPoll(currentUser, answer); } } + @GET + @RolesAllowed({"ADMIN", "USER"}) + @Path("/{id}/getAnswers") + public List getPollsByEventId() { + User currentUser = userStore.getCurrentUser(); + List userPollList = pollStore.getUserPollByUser(currentUser); + List pollDtos = new ArrayList<>(); + userPollList.forEach(up -> { + PollDto pollDto = new PollDto(); + pollDto.setId(up.getPoll().getId()); + pollDtos.add(pollDto); + }); + return pollDtos; + } + @GET @RolesAllowed({"ADMIN", "USER"}) @Path("/{id}/getVotes") @@ -138,7 +156,9 @@ public List getVotes(@PathParam("id") Long id) { List answerDtos = new ArrayList<>(); poll.ifPresent(p -> { List answerList = answersStore.getAnswersByPollID(p); - mapper.mapAnswerToAnswerDto(answerList); + mapper.mapAnswerToAnswerDto(answerList).forEach(a -> { + answerDtos.add(a); + }); }); return answerDtos; } @@ -156,7 +176,8 @@ public List getFeedbackForEvent(@PathParam("id") Long id) { @Path("/{id}/getVotingPoll") public List getVotingForEvent(@PathParam("id") Long id) { List poll = pollStore.getVotingPoll(id); - return mapper.mapPollToDto(poll); + List pollDtos = mapper.mapPollToDto(poll); + return pollDtos; } @POST @@ -172,4 +193,12 @@ public void deleteEvent(@PathParam("id") Long id) throws IllegalArgumentExceptio public void deletePoll(@PathParam("id") Long id) throws IllegalArgumentException { pollStore.deletePollById(id); } + + private void registerNewUserPoll(User currentUser, Answer answer) { + UserPoll newUserPoll = new UserPoll(); + newUserPoll.setUser(currentUser); + newUserPoll.setPoll(answer.getPoll()); + pollStore.persistUserPoll(newUserPoll); + answer.setCounter(answer.getCounter() + 1); + } } diff --git a/src/main/java/lv/ctco/javaschool/eventorganaizer/boundary/Mapper.java b/src/main/java/lv/ctco/javaschool/eventorganaizer/boundary/Mapper.java index 3bfc277..897783b 100644 --- a/src/main/java/lv/ctco/javaschool/eventorganaizer/boundary/Mapper.java +++ b/src/main/java/lv/ctco/javaschool/eventorganaizer/boundary/Mapper.java @@ -5,7 +5,6 @@ import lv.ctco.javaschool.eventorganaizer.entity.Poll; import lv.ctco.javaschool.eventorganaizer.entity.PollDto; -import javax.ws.rs.PathParam; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -50,7 +49,7 @@ public List mapAnswerToAnswerDto(List answerList) { List answerDtos = new ArrayList<>(); answerList.forEach(al -> { AnswerDto a = new AnswerDto(); - a.setAnswerCounter(al.getCounter()); + a.setCounter(al.getCounter()); a.setThisAnswerID(al.getId()); answerDtos.add(a); }); diff --git a/src/main/java/lv/ctco/javaschool/eventorganaizer/control/AnswersStore.java b/src/main/java/lv/ctco/javaschool/eventorganaizer/control/AnswersStore.java index 92ceb70..a68e466 100644 --- a/src/main/java/lv/ctco/javaschool/eventorganaizer/control/AnswersStore.java +++ b/src/main/java/lv/ctco/javaschool/eventorganaizer/control/AnswersStore.java @@ -1,7 +1,9 @@ package lv.ctco.javaschool.eventorganaizer.control; +import lv.ctco.javaschool.auth.entity.domain.User; import lv.ctco.javaschool.eventorganaizer.entity.Answer; import lv.ctco.javaschool.eventorganaizer.entity.Poll; +import lv.ctco.javaschool.eventorganaizer.entity.UserPoll; import javax.ejb.Stateless; import javax.inject.Inject; @@ -15,9 +17,6 @@ public class AnswersStore { @PersistenceContext private EntityManager em; - @Inject - private AnswersStore answersStore; - public List getAnswersByPollID(Poll poll) { return em.createQuery("select a from Answer a" + " where a.poll = :poll", Answer.class) diff --git a/src/main/java/lv/ctco/javaschool/eventorganaizer/control/EventStore.java b/src/main/java/lv/ctco/javaschool/eventorganaizer/control/EventStore.java index 43e5cb2..39eb32c 100644 --- a/src/main/java/lv/ctco/javaschool/eventorganaizer/control/EventStore.java +++ b/src/main/java/lv/ctco/javaschool/eventorganaizer/control/EventStore.java @@ -22,13 +22,11 @@ public class EventStore { private UserStore userStore; public List getAllEvents() { - List list; - list = em.createQuery("select e from Event e" + + return em.createQuery("select e from Event e" + " where e.status = :status1 or e.status=:status2", Event.class) .setParameter("status1", EventStatus.OPEN) .setParameter("status2", EventStatus.CLOSED) .getResultList(); - return list; } public Optional getEventById(Long id) { diff --git a/src/main/java/lv/ctco/javaschool/eventorganaizer/control/PollStore.java b/src/main/java/lv/ctco/javaschool/eventorganaizer/control/PollStore.java index 1bff644..1f18ffd 100644 --- a/src/main/java/lv/ctco/javaschool/eventorganaizer/control/PollStore.java +++ b/src/main/java/lv/ctco/javaschool/eventorganaizer/control/PollStore.java @@ -1,7 +1,9 @@ package lv.ctco.javaschool.eventorganaizer.control; -import lv.ctco.javaschool.eventorganaizer.entity.Event; +import lv.ctco.javaschool.auth.entity.domain.User; +import lv.ctco.javaschool.eventorganaizer.entity.Answer; import lv.ctco.javaschool.eventorganaizer.entity.Poll; +import lv.ctco.javaschool.eventorganaizer.entity.UserPoll; import javax.ejb.Stateless; import javax.inject.Inject; @@ -15,9 +17,6 @@ public class PollStore { @PersistenceContext private EntityManager em; - @Inject - private PollStore pollStore; - public List getPollForEvent(Long id) { return em.createQuery("select p from Poll p" + " where p.eventID=:id", Poll.class) @@ -34,14 +33,14 @@ public int deletePollById(Long id) { public List getVotingPoll(Long id) { return em.createQuery("select p from Poll p" + - " where p.eventID=:id and p.isFeedback=false", Poll.class) + " where p.eventID = :id and p.isFeedback = false", Poll.class) .setParameter("id", id) .getResultList(); } public List getFeedbackPoll(Long id) { return em.createQuery("select p from Poll p" + - " where p.eventID=:id and p.isFeedback=true", Poll.class) + " where p.eventID = :id and p.isFeedback = true", Poll.class) .setParameter("id", id) .getResultList(); } @@ -54,6 +53,26 @@ public Optional getPollById (Long id) { .findFirst(); } + public Optional getUserPollByUserAndPoll(User user, Poll poll) { + return em.createQuery("select ua from UserPoll ua" + + " where ua.user = :user and ua.poll = :poll", UserPoll.class) + .setParameter("user", user) + .setParameter("poll", poll) + .getResultStream() + .findFirst(); + } + + public List getUserPollByUser(User user) { + return em.createQuery("select ua from UserPoll ua" + + " where ua.user = :user", UserPoll.class) + .setParameter("user", user) + .getResultList(); + } + + public void persistUserPoll(UserPoll userPoll) { + em.persist(userPoll); + } + public void persistPoll(Poll poll) { em.persist(poll); } diff --git a/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/Answer.java b/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/Answer.java index a622e3d..dea672f 100644 --- a/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/Answer.java +++ b/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/Answer.java @@ -51,4 +51,4 @@ public int getCounter() { public void setCounter(int counter) { this.counter = counter; } -} +} \ No newline at end of file diff --git a/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/AnswerDto.java b/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/AnswerDto.java index 30bfef7..73fa9c5 100644 --- a/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/AnswerDto.java +++ b/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/AnswerDto.java @@ -2,7 +2,7 @@ public class AnswerDto { private Long thisAnswerID; - private int answerCounter; + private int counter; private String text; public AnswerDto() { @@ -10,7 +10,7 @@ public AnswerDto() { public AnswerDto(Long answerID, int counter) { this.thisAnswerID = answerID; - this.answerCounter = counter; + this.counter = counter; } public Long getThisAnswerID() { @@ -21,12 +21,12 @@ public void setThisAnswerID(Long thisAnswerID) { this.thisAnswerID = thisAnswerID; } - public int getAnswerCounter() { - return answerCounter; + public int getCounter() { + return counter; } - public void setAnswerCounter(int answerCounter) { - this.answerCounter = answerCounter; + public void setCounter(int counter) { + this.counter = counter; } public String getText() { diff --git a/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/Event.java b/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/Event.java index a855e73..50594e3 100644 --- a/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/Event.java +++ b/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/Event.java @@ -3,25 +3,32 @@ import lv.ctco.javaschool.auth.entity.domain.User; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import javax.persistence.Table; @Entity +@Table(name = "events") public class Event { @Id @GeneratedValue private Long id; - private String name; - @ManyToOne + @JoinColumn(name = "user_id") private User author; + private String name; private String date; private String time; private String description; private String agenda; + + @Enumerated(EnumType.STRING) private EventStatus status; public Event() { diff --git a/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/EventDto.java b/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/EventDto.java index 3088b41..2eec592 100644 --- a/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/EventDto.java +++ b/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/EventDto.java @@ -1,80 +1,80 @@ package lv.ctco.javaschool.eventorganaizer.entity; public class EventDto { - private String eventName; - private String eventDescription; - private String eventDate; - private String eventTime; - private Long eventID; - private String eventAgenda; - private EventStatus eventStatus; + private String name; + private String description; + private String date; + private String time; + private Long id; + private String agenda; + private EventStatus status; public EventDto() { } public EventDto(String name, String description, String date, String time, Long id, String agenda, EventStatus status) { - this.eventName = name; - this.eventDescription = description; - this.eventDate = date; - this.eventTime = time; - this.eventID = id; - this.eventAgenda = agenda; - this.eventStatus = status; + this.name = name; + this.description = description; + this.date = date; + this.time = time; + this.id = id; + this.agenda = agenda; + this.status = status; } - public long getEventID() { - return eventID; + public long getId() { + return id; } - public void setEventID(long eventID) { - this.eventID = eventID; + public void setId(long id) { + this.id = id; } - public String getEventName() { - return eventName; + public String getName() { + return name; } - public void setEventName(String eventName) { - this.eventName = eventName; + public void setName(String name) { + this.name = name; } - public String getEventDescription() { - return eventDescription; + public String getDescription() { + return description; } - public void setEventDescription(String eventDescription) { - this.eventDescription = eventDescription; + public void setDescription(String description) { + this.description = description; } - public String getEventDate() { - return eventDate; + public String getDate() { + return date; } - public void setEventDate(String eventDate) { - this.eventDate = eventDate; + public void setDate(String date) { + this.date = date; } - public String getEventAgenda() { - return eventAgenda; + public String getAgenda() { + return agenda; } - public void setEventAgenda(String eventAgenda) { - this.eventAgenda = eventAgenda; + public void setAgenda(String agenda) { + this.agenda = agenda; } - public String getEventTime() { - return eventTime; + public String getTime() { + return time; } - public void setEventTime(String eventTime) { - this.eventTime = eventTime; + public void setTime(String time) { + this.time = time; } - public EventStatus getEventStatus() { - return eventStatus; + public EventStatus getStatus() { + return status; } - public void setEventStatus(EventStatus eventStatus) { - this.eventStatus = eventStatus; + public void setStatus(EventStatus status) { + this.status = status; } } diff --git a/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/UserPoll.java b/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/UserPoll.java new file mode 100644 index 0000000..0a820da --- /dev/null +++ b/src/main/java/lv/ctco/javaschool/eventorganaizer/entity/UserPoll.java @@ -0,0 +1,50 @@ +package lv.ctco.javaschool.eventorganaizer.entity; + +import lv.ctco.javaschool.auth.entity.domain.User; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +@Entity +@Table(name = "user_answer") +public class UserPoll { + @Id + @GeneratedValue + private Long id; + + @ManyToOne + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne + @JoinColumn(name = "poll_id") + private Poll poll; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public Poll getPoll() { + return poll; + } + + public void setPoll(Poll answer) { + this.poll = answer; + } +} diff --git a/src/main/resources/META-INF/load.sql b/src/main/resources/META-INF/load.sql index 589258d..4ea138c 100644 --- a/src/main/resources/META-INF/load.sql +++ b/src/main/resources/META-INF/load.sql @@ -1,2 +1,8 @@ INSERT INTO USERS (ID, USERNAME, PASSWORD, ROLE) VALUES (-1, 'admin', 'PBKDF2WithHmacSHA256:2048:McY8GmR3k1PjMwJQE97wYxbdCuJ2f7bBfwiNlOMT2Bc=:qnB+F68kaLGTITEiYfg8s+7+L1/5AKbiWgkKC4g2VKE=', 'ADMIN'); -INSERT INTO USERS (ID, USERNAME, PASSWORD, ROLE) VALUES (-2, 'user1', 'PBKDF2WithHmacSHA256:2048:McY8GmR3k1PjMwJQE97wYxbdCuJ2f7bBfwiNlOMT2Bc=:qnB+F68kaLGTITEiYfg8s+7+L1/5AKbiWgkKC4g2VKE=', 'USER'); \ No newline at end of file +INSERT INTO USERS (ID, USERNAME, PASSWORD, ROLE) VALUES (-2, 'user1', 'PBKDF2WithHmacSHA256:2048:McY8GmR3k1PjMwJQE97wYxbdCuJ2f7bBfwiNlOMT2Bc=:qnB+F68kaLGTITEiYfg8s+7+L1/5AKbiWgkKC4g2VKE=', 'USER'); +INSERT INTO USERS (ID, USERNAME, PASSWORD, ROLE) VALUES (-3, 'user2', 'PBKDF2WithHmacSHA256:2048:McY8GmR3k1PjMwJQE97wYxbdCuJ2f7bBfwiNlOMT2Bc=:qnB+F68kaLGTITEiYfg8s+7+L1/5AKbiWgkKC4g2VKE=', 'USER'); +INSERT INTO USERS (ID, USERNAME, PASSWORD, ROLE) VALUES (-4, 'user3', 'PBKDF2WithHmacSHA256:2048:McY8GmR3k1PjMwJQE97wYxbdCuJ2f7bBfwiNlOMT2Bc=:qnB+F68kaLGTITEiYfg8s+7+L1/5AKbiWgkKC4g2VKE=', 'USER'); +INSERT INTO EVENTS (ID, USER_ID, NAME, DATE, TIME, DESCRIPTION, AGENDA, STATUS) VALUES (101, -2, 'event-1', '09/05/2018', '5:00pm', 'desc-1', 'agenda-1', 'OPEN'); +INSERT INTO EVENTS (ID, USER_ID, NAME, DATE, TIME, DESCRIPTION, AGENDA, STATUS) VALUES (102, -3, 'event-2', '09/06/2018', '6:00pm', 'desc-2', 'agenda-2', 'OPEN'); +INSERT INTO EVENTS (ID, USER_ID, NAME, DATE, TIME, DESCRIPTION, AGENDA, STATUS) VALUES (103, -4, 'event-3', '09/07/2018', '7:00pm', 'desc-3', 'agenda-3', 'OPEN'); +INSERT INTO EVENTS (ID, USER_ID, NAME, DATE, TIME, DESCRIPTION, AGENDA, STATUS) VALUES (104, -2, 'event-4', '09/08/2018', '8:00pm', 'desc-4', 'agenda-4', 'OPEN'); \ No newline at end of file diff --git a/src/main/webapp/app/add-event.jsp b/src/main/webapp/app/add-event.jsp index 4229926..e6bf844 100644 --- a/src/main/webapp/app/add-event.jsp +++ b/src/main/webapp/app/add-event.jsp @@ -28,9 +28,9 @@

Set status

- Open - Closed - Finished + Open
+ Closed
+ Finished

diff --git a/src/main/webapp/app/event.jsp b/src/main/webapp/app/event.jsp index cfcf31f..4d16a08 100644 --- a/src/main/webapp/app/event.jsp +++ b/src/main/webapp/app/event.jsp @@ -2,7 +2,7 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> - {{eventName}} + {{name}} @@ -16,13 +16,13 @@
-

{{eventName}}

+

{{name}}

-

{{eventDate}}  

-

{{eventTime}}

+

{{date}}  

+

{{time}}

-

{{eventDescription}}

-

{{eventAgenda}}

+

{{description}}

+

{{agenda}}