diff --git a/src/main/java/ru/ulstu/conference/model/Conference.java b/src/main/java/ru/ulstu/conference/model/Conference.java index 0c3972d..09220c0 100644 --- a/src/main/java/ru/ulstu/conference/model/Conference.java +++ b/src/main/java/ru/ulstu/conference/model/Conference.java @@ -8,6 +8,7 @@ import ru.ulstu.core.model.BaseEntity; import ru.ulstu.core.model.UserActivity; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.paper.model.Paper; +import ru.ulstu.ping.model.Ping; import ru.ulstu.user.model.User; import javax.persistence.CascadeType; @@ -71,6 +72,11 @@ public class Conference extends BaseEntity implements UserActivity { @Fetch(FetchMode.SUBSELECT) private List users = new ArrayList<>(); + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "conference_id") + @Fetch(FetchMode.SUBSELECT) + private List pings; + public String getTitle() { return title; } @@ -156,4 +162,13 @@ public class Conference extends BaseEntity implements UserActivity { public Set getActivityUsers() { return getUsers().stream().map(ConferenceUser::getUser).collect(Collectors.toSet()); } + + public void addPing(Ping ping) { + this.pings.add(ping); + } + + @Override + public List getPings() { + return this.pings; + } } diff --git a/src/main/java/ru/ulstu/core/model/UserActivity.java b/src/main/java/ru/ulstu/core/model/UserActivity.java index 8e4e270..051a5c9 100644 --- a/src/main/java/ru/ulstu/core/model/UserActivity.java +++ b/src/main/java/ru/ulstu/core/model/UserActivity.java @@ -1,10 +1,14 @@ package ru.ulstu.core.model; +import ru.ulstu.ping.model.Ping; import ru.ulstu.user.model.User; +import java.util.List; import java.util.Set; public interface UserActivity { String getTitle(); Set getActivityUsers(); + void addPing(Ping ping); + List getPings(); } diff --git a/src/main/java/ru/ulstu/grant/model/Grant.java b/src/main/java/ru/ulstu/grant/model/Grant.java index a653772..c10ad11 100644 --- a/src/main/java/ru/ulstu/grant/model/Grant.java +++ b/src/main/java/ru/ulstu/grant/model/Grant.java @@ -8,6 +8,7 @@ import ru.ulstu.core.model.UserActivity; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.file.model.FileData; import ru.ulstu.paper.model.Paper; +import ru.ulstu.ping.model.Ping; import ru.ulstu.project.model.Project; import ru.ulstu.timeline.model.Event; import ru.ulstu.user.model.User; @@ -98,6 +99,11 @@ public class Grant extends BaseEntity implements UserActivity { @JoinColumn(name = "grant_id") private List events = new ArrayList<>(); + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "grant_id") + @Fetch(FetchMode.SUBSELECT) + private List pings; + public GrantStatus getStatus() { return status; } @@ -191,4 +197,13 @@ public class Grant extends BaseEntity implements UserActivity { .filter(d -> d.getDate().after(new Date())) .findFirst(); } + + public void addPing(Ping ping) { + this.pings.add(ping); + } + + @Override + public List getPings() { + return this.pings; + } } diff --git a/src/main/java/ru/ulstu/grant/service/GrantService.java b/src/main/java/ru/ulstu/grant/service/GrantService.java index 1770334..84e363f 100644 --- a/src/main/java/ru/ulstu/grant/service/GrantService.java +++ b/src/main/java/ru/ulstu/grant/service/GrantService.java @@ -17,6 +17,7 @@ import ru.ulstu.name.BaseService; import ru.ulstu.paper.model.Paper; import ru.ulstu.paper.model.PaperDto; import ru.ulstu.paper.service.PaperService; +import ru.ulstu.ping.model.Ping; import ru.ulstu.ping.service.PingService; import ru.ulstu.project.model.Project; import ru.ulstu.project.model.ProjectDto; @@ -347,6 +348,8 @@ public class GrantService extends BaseService { @Transactional public void ping(int grantId) throws IOException { - pingService.addPing(findById(grantId)); + Grant grant = findById(grantId); + grant.addPing(new Ping(new Date(), userService.getCurrentUser())); + grantRepository.save(grant); } } diff --git a/src/main/java/ru/ulstu/paper/model/Paper.java b/src/main/java/ru/ulstu/paper/model/Paper.java index 5d951a5..e183877 100644 --- a/src/main/java/ru/ulstu/paper/model/Paper.java +++ b/src/main/java/ru/ulstu/paper/model/Paper.java @@ -9,6 +9,7 @@ import ru.ulstu.core.model.UserActivity; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.file.model.FileData; import ru.ulstu.grant.model.Grant; +import ru.ulstu.ping.model.Ping; import ru.ulstu.timeline.model.Event; import ru.ulstu.user.model.User; @@ -128,6 +129,11 @@ public class Paper extends BaseEntity implements UserActivity { @Fetch(FetchMode.SUBSELECT) private List references = new ArrayList<>(); + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "paper_id") + @Fetch(FetchMode.SUBSELECT) + private List pings; + public PaperStatus getStatus() { return status; } @@ -310,4 +316,13 @@ public class Paper extends BaseEntity implements UserActivity { public int hashCode() { return Objects.hash(super.hashCode(), title, status, type, createDate, updateDate, deadlines, comment, url, locked, events, files, authors, latexText, conferences, grants); } + + public void addPing(Ping ping) { + this.pings.add(ping); + } + + @Override + public List getPings() { + return this.pings; + } } diff --git a/src/main/java/ru/ulstu/paper/service/PaperService.java b/src/main/java/ru/ulstu/paper/service/PaperService.java index 3be9aee..0e159d5 100644 --- a/src/main/java/ru/ulstu/paper/service/PaperService.java +++ b/src/main/java/ru/ulstu/paper/service/PaperService.java @@ -15,6 +15,7 @@ import ru.ulstu.paper.model.Reference; import ru.ulstu.paper.model.ReferenceDto; import ru.ulstu.paper.repository.PaperRepository; import ru.ulstu.paper.repository.ReferenceRepository; +import ru.ulstu.ping.model.Ping; import ru.ulstu.ping.service.PingService; import ru.ulstu.timeline.service.EventService; import ru.ulstu.user.model.User; @@ -393,6 +394,8 @@ public class PaperService { @Transactional public void ping(int paperId) throws IOException { - pingService.addPing(findPaperById(paperId)); + Paper paper = findPaperById(paperId); + paper.addPing(new Ping(new Date(), userService.getCurrentUser())); + paperRepository.save(paper); } } diff --git a/src/main/java/ru/ulstu/ping/service/PingScheduler.java b/src/main/java/ru/ulstu/ping/service/PingScheduler.java index a60e061..239abbf 100644 --- a/src/main/java/ru/ulstu/ping/service/PingScheduler.java +++ b/src/main/java/ru/ulstu/ping/service/PingScheduler.java @@ -54,6 +54,5 @@ public class PingScheduler { mailService.sendEmailFromTemplate(ImmutableMap.of("pings", pingInfo.getPings()), pingInfo.getUser(), "pingsInfoWeekEmail", PING_MAIL_SUBJECT); } - } } diff --git a/src/main/java/ru/ulstu/project/model/Project.java b/src/main/java/ru/ulstu/project/model/Project.java index 227856e..84324dd 100644 --- a/src/main/java/ru/ulstu/project/model/Project.java +++ b/src/main/java/ru/ulstu/project/model/Project.java @@ -1,11 +1,14 @@ package ru.ulstu.project.model; +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; import org.hibernate.validator.constraints.NotBlank; import ru.ulstu.core.model.BaseEntity; import ru.ulstu.core.model.UserActivity; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.file.model.FileData; import ru.ulstu.grant.model.Grant; +import ru.ulstu.ping.model.Ping; import ru.ulstu.user.model.User; import javax.persistence.CascadeType; @@ -76,6 +79,11 @@ public class Project extends BaseEntity implements UserActivity { @ManyToMany(fetch = FetchType.LAZY) private List executors = new ArrayList<>(); + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "project_id") + @Fetch(FetchMode.SUBSELECT) + private List pings = new ArrayList<>(); + public String getTitle() { return title; } @@ -140,9 +148,16 @@ public class Project extends BaseEntity implements UserActivity { this.executors = executors; } - @Override public Set getUsers() { - Set users = new HashSet(getExecutors()); - return users; + return new HashSet(getExecutors()); + } + + public void addPing(Ping ping) { + this.pings.add(new Ping()); + } + + @Override + public List getPings() { + return this.pings; } } diff --git a/src/main/java/ru/ulstu/project/service/ProjectService.java b/src/main/java/ru/ulstu/project/service/ProjectService.java index 6c00193..9e1e285 100644 --- a/src/main/java/ru/ulstu/project/service/ProjectService.java +++ b/src/main/java/ru/ulstu/project/service/ProjectService.java @@ -6,6 +6,7 @@ import org.thymeleaf.util.StringUtils; import ru.ulstu.deadline.service.DeadlineService; import ru.ulstu.file.service.FileService; import ru.ulstu.grant.repository.GrantRepository; +import ru.ulstu.ping.model.Ping; import ru.ulstu.ping.service.PingService; import ru.ulstu.project.model.Project; import ru.ulstu.project.model.ProjectDto; @@ -15,6 +16,7 @@ import ru.ulstu.user.service.UserService; import java.io.IOException; import java.util.Arrays; +import java.util.Date; import java.util.List; import static org.springframework.util.ObjectUtils.isEmpty; @@ -131,6 +133,8 @@ public class ProjectService { @Transactional public void ping(int projectId) throws IOException { - pingService.addPing(findById(projectId)); + Project project = findById(projectId); + project.addPing(new Ping(new Date(), userService.getCurrentUser())); + projectRepository.save(project); } } diff --git a/src/main/java/ru/ulstu/user/service/UserService.java b/src/main/java/ru/ulstu/user/service/UserService.java index 62e7ce2..e8cdd4e 100644 --- a/src/main/java/ru/ulstu/user/service/UserService.java +++ b/src/main/java/ru/ulstu/user/service/UserService.java @@ -14,6 +14,7 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import ru.ulstu.conference.model.Conference; import ru.ulstu.conference.service.ConferenceService; import ru.ulstu.configuration.ApplicationProperties; import ru.ulstu.core.error.EntityIdIsNullException; @@ -21,8 +22,11 @@ import ru.ulstu.core.jpa.OffsetablePageRequest; import ru.ulstu.core.model.BaseEntity; import ru.ulstu.core.model.UserActivity; import ru.ulstu.core.model.response.PageableItems; +import ru.ulstu.grant.service.GrantService; +import ru.ulstu.paper.service.PaperService; import ru.ulstu.ping.model.Ping; import ru.ulstu.ping.service.PingService; +import ru.ulstu.project.service.ProjectService; import ru.ulstu.user.error.UserActivationError; import ru.ulstu.user.error.UserEmailExistsException; import ru.ulstu.user.error.UserIdExistsException; @@ -78,6 +82,9 @@ public class UserService implements UserDetailsService { private final ConferenceService conferenceService; private final UserSessionService userSessionService; private final PingService pingService; + private final PaperService paperService; + private final ProjectService projectService; + private final GrantService grantService; public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder, @@ -87,7 +94,10 @@ public class UserService implements UserDetailsService { ApplicationProperties applicationProperties, @Lazy PingService pingService, @Lazy ConferenceService conferenceRepository, - @Lazy UserSessionService userSessionService) throws ParseException { + @Lazy UserSessionService userSessionService, + @Lazy PaperService paperService, + @Lazy ProjectService projectService, + @Lazy GrantService grantService) throws ParseException { this.userRepository = userRepository; this.passwordEncoder = passwordEncoder; this.userRoleRepository = userRoleRepository; @@ -98,6 +108,9 @@ public class UserService implements UserDetailsService { this.timetableService = new TimetableService(); this.userSessionService = userSessionService; this.pingService = pingService; + this.paperService = paperService; + this.projectService = projectService; + this.grantService = grantService; } private User getUserByEmail(String email) { @@ -405,9 +418,24 @@ public class UserService implements UserDetailsService { } Map activitiesPings = new HashMap<>(); - for (Ping ping : pingService.getPings(activityName)) { - UserActivity activity = ping.getActivity(); + List activities = new ArrayList<>(); + switch (activityName) { + case "conferences": + activities = conferenceService.findAll(); + break; + case "papers": + activities = paperService.findAll(); + break; + case "projects": + activities = projectService.findAll(); + break; + case "grants": + activities = grantService.findAll(); + break; + } + + for (UserActivity activity : activities) { if (user != null && !activity.getActivityUsers().contains(user)) { continue; } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f4be778..7e793c0 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -24,7 +24,7 @@ spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFact # JPA Settings spring.datasource.url=jdbc:postgresql://localhost:5432/ng-tracker spring.datasource.username=postgres -spring.datasource.password=postgres +spring.datasource.password=password spring.datasource.driverclassName=org.postgresql.Driver spring.jpa.hibernate.ddl-auto=validate # Liquibase Settings @@ -34,7 +34,7 @@ liquibase.change-log=classpath:db/changelog-master.xml # Application Settings ng-tracker.base-url=http://127.0.0.1:8080 ng-tracker.undead-user-login=admin -ng-tracker.dev-mode=true +ng-tracker.dev-mode=false ng-tracker.debug_email= ng-tracker.use-https=false ng-tracker.check-run=false \ No newline at end of file diff --git a/src/main/resources/db/changelog-20190525_000000-schema.xml b/src/main/resources/db/changelog-20190525_000000-schema.xml deleted file mode 100644 index 51fffe6..0000000 --- a/src/main/resources/db/changelog-20190525_000000-schema.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/main/resources/db/changelog-master.xml b/src/main/resources/db/changelog-master.xml index 14cb9d7..6285b47 100644 --- a/src/main/resources/db/changelog-master.xml +++ b/src/main/resources/db/changelog-master.xml @@ -49,5 +49,5 @@ - + \ No newline at end of file