From ad989c6deae8753b97aa95692b57d986d2b313e7 Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Sat, 20 Jul 2019 11:14:03 +0400 Subject: [PATCH] complete refactor --- .../activity/common/model/EventSource.java | 2 + .../common/service/ActivityService.java | 10 +- .../activity/conference/model/Conference.java | 5 + .../ConferenceRepository.java | 4 +- .../conference/service/ConferenceService.java | 20 +-- .../DeadlineRepository.java | 4 +- .../deadline/service/DeadlineService.java | 3 +- .../file/repostory/FileRepository.java | 7 - .../activity/file/service/FileRepository.java | 7 + .../activity/file/service/FileService.java | 5 +- .../ru/ulstu/activity/grant/model/Grant.java | 5 + .../GrantRepository.java | 4 +- .../activity/grant/service/GrantService.java | 36 +--- .../ru/ulstu/activity/paper/model/Paper.java | 5 + .../PaperRepository.java | 4 +- .../activity/paper/service/PaperService.java | 9 +- .../ReferenceRepository.java | 2 +- .../PingRepository.java | 4 +- .../activity/ping/service/PingScheduler.java | 3 +- .../activity/ping/service/PingService.java | 1 - .../ulstu/activity/project/model/Project.java | 5 + .../activity/project/model/ProjectDto.java | 11 -- .../ProjectRepository.java | 7 +- .../project/service/ProjectService.java | 18 +- .../ulstu/activity/students/model/Task.java | 5 + .../SchedulerRepository.java | 4 +- .../students/service/SchedulerService.java | 5 +- .../TaskRepository.java | 4 +- .../students/service/TaskService.java | 19 +-- .../TagRepository.java | 4 +- .../activity/tags/service/TagService.java | 10 +- .../timeline/controller/EventController.java | 43 +++-- .../ulstu/activity/timeline/model/Event.java | 37 ---- .../activity/timeline/model/EventDto.java | 141 +-------------- .../activity/timeline/model/PeriodEvent.java | 26 --- .../activity/timeline/model/Timeline.java | 26 --- .../activity/timeline/model/TimelineDto.java | 33 ---- .../repository/TimelineRepository.java | 7 - .../EventRepository.java | 19 ++- .../timeline/service/EventScheduler.java | 77 --------- .../timeline/service/EventService.java | 160 ++++-------------- .../timeline/service/TimelineService.java | 60 ------- 42 files changed, 149 insertions(+), 712 deletions(-) rename src/main/java/ru/ulstu/activity/conference/{repository => service}/ConferenceRepository.java (91%) rename src/main/java/ru/ulstu/activity/deadline/{repository => service}/DeadlineRepository.java (77%) delete mode 100644 src/main/java/ru/ulstu/activity/file/repostory/FileRepository.java create mode 100644 src/main/java/ru/ulstu/activity/file/service/FileRepository.java rename src/main/java/ru/ulstu/activity/grant/{repository => service}/GrantRepository.java (85%) rename src/main/java/ru/ulstu/activity/paper/{repository => service}/PaperRepository.java (90%) rename src/main/java/ru/ulstu/activity/paper/{repository => service}/ReferenceRepository.java (94%) rename src/main/java/ru/ulstu/activity/ping/{repository => service}/PingRepository.java (89%) rename src/main/java/ru/ulstu/activity/project/{repository => service}/ProjectRepository.java (62%) rename src/main/java/ru/ulstu/activity/students/{repository => service}/SchedulerRepository.java (61%) rename src/main/java/ru/ulstu/activity/students/{repository => service}/TaskRepository.java (90%) rename src/main/java/ru/ulstu/activity/tags/{repository => service}/TagRepository.java (74%) delete mode 100644 src/main/java/ru/ulstu/activity/timeline/model/PeriodEvent.java delete mode 100644 src/main/java/ru/ulstu/activity/timeline/model/Timeline.java delete mode 100644 src/main/java/ru/ulstu/activity/timeline/model/TimelineDto.java delete mode 100644 src/main/java/ru/ulstu/activity/timeline/repository/TimelineRepository.java rename src/main/java/ru/ulstu/activity/timeline/{repository => service}/EventRepository.java (52%) delete mode 100644 src/main/java/ru/ulstu/activity/timeline/service/EventScheduler.java delete mode 100644 src/main/java/ru/ulstu/activity/timeline/service/TimelineService.java diff --git a/src/main/java/ru/ulstu/activity/common/model/EventSource.java b/src/main/java/ru/ulstu/activity/common/model/EventSource.java index ffe8f4d..3c1efe0 100644 --- a/src/main/java/ru/ulstu/activity/common/model/EventSource.java +++ b/src/main/java/ru/ulstu/activity/common/model/EventSource.java @@ -14,4 +14,6 @@ public interface EventSource { List getRecipients(); void addObjectToEvent(Event event); + + String getSuffix(); } diff --git a/src/main/java/ru/ulstu/activity/common/service/ActivityService.java b/src/main/java/ru/ulstu/activity/common/service/ActivityService.java index 6d08474..eb3e3f8 100644 --- a/src/main/java/ru/ulstu/activity/common/service/ActivityService.java +++ b/src/main/java/ru/ulstu/activity/common/service/ActivityService.java @@ -6,7 +6,9 @@ import ru.ulstu.activity.api.ActivityRepository; import ru.ulstu.activity.api.model.ActivityDto; import ru.ulstu.activity.api.model.ActivityListDto; import ru.ulstu.activity.common.model.AbstractActivity; +import ru.ulstu.activity.common.model.EventSource; import ru.ulstu.activity.ping.service.PingService; +import ru.ulstu.activity.timeline.service.EventService; import ru.ulstu.core.jpa.OffsetablePageRequest; import ru.ulstu.core.model.response.PageableItems; @@ -19,13 +21,16 @@ public abstract class ActivityService activityRepository; protected final ActivityNotificationService activityNotificationService; protected final PingService pingService; + protected final EventService eventService; protected ActivityService(ActivityRepository activityRepository, ActivityNotificationService activityNotificationService, - PingService pingService) { + PingService pingService, + EventService eventService) { this.activityRepository = activityRepository; this.activityNotificationService = activityNotificationService; this.pingService = pingService; + this.eventService = eventService; } @Transactional @@ -41,6 +46,8 @@ public abstract class ActivityService, ActivityRepository { +interface ConferenceRepository extends JpaRepository, ActivityRepository { @Query("SELECT c FROM Conference c LEFT JOIN c.users u WHERE (:user IS NULL OR u.user = :user) " + "AND (YEAR(c.beginDate) = :year OR :year IS NULL) ORDER BY begin_date DESC") List findByUserAndYear(@Param("user") User user, @Param("year") Integer year); diff --git a/src/main/java/ru/ulstu/activity/conference/service/ConferenceService.java b/src/main/java/ru/ulstu/activity/conference/service/ConferenceService.java index db910ed..a280439 100644 --- a/src/main/java/ru/ulstu/activity/conference/service/ConferenceService.java +++ b/src/main/java/ru/ulstu/activity/conference/service/ConferenceService.java @@ -11,7 +11,6 @@ import ru.ulstu.activity.conference.model.ConferenceDto; import ru.ulstu.activity.conference.model.ConferenceFilterDto; import ru.ulstu.activity.conference.model.ConferenceListDto; import ru.ulstu.activity.conference.model.ConferenceUser; -import ru.ulstu.activity.conference.repository.ConferenceRepository; import ru.ulstu.activity.deadline.model.Deadline; import ru.ulstu.activity.deadline.service.DeadlineService; import ru.ulstu.activity.paper.model.Paper; @@ -53,7 +52,7 @@ public class ConferenceService extends ActivityService oldDeadlines = conference.getDeadlines().stream() - .map(this::copyDeadline) - .collect(Collectors.toList()); - Date oldBeginDate = conference.getBeginDate(); - Date oldEndDate = conference.getEndDate(); - eventService.updateConferenceDeadlines(conference); - sendNotificationAfterUpdateDeadlines(conference, oldDeadlines); - if (!conference.getBeginDate().equals(oldBeginDate) || !conference.getEndDate().equals(oldEndDate)) { - conferenceNotificationService.updateConferencesDatesNotification(conference, oldBeginDate, oldEndDate); - } - return conference; - } - @Transactional public boolean delete(Integer conferenceId) { if (conferenceRepository.existsById(conferenceId)) { - eventService.removeConferencesEvent(conferenceRepository.getOne(conferenceId)); conferenceRepository.deleteById(conferenceId); return true; } diff --git a/src/main/java/ru/ulstu/activity/deadline/repository/DeadlineRepository.java b/src/main/java/ru/ulstu/activity/deadline/service/DeadlineRepository.java similarity index 77% rename from src/main/java/ru/ulstu/activity/deadline/repository/DeadlineRepository.java rename to src/main/java/ru/ulstu/activity/deadline/service/DeadlineRepository.java index 87829f6..128fe0b 100644 --- a/src/main/java/ru/ulstu/activity/deadline/repository/DeadlineRepository.java +++ b/src/main/java/ru/ulstu/activity/deadline/service/DeadlineRepository.java @@ -1,4 +1,4 @@ -package ru.ulstu.activity.deadline.repository; +package ru.ulstu.activity.deadline.service; import org.springframework.data.jpa.repository.JpaRepository; @@ -8,7 +8,7 @@ import ru.ulstu.activity.deadline.model.Deadline; import java.util.Date; -public interface DeadlineRepository extends JpaRepository { +interface DeadlineRepository extends JpaRepository { @Query("SELECT d.date FROM Grant g JOIN g.deadlines d WHERE (g.id = :id) AND (d.date = :date)") Date findByGrantIdAndDate(@Param("id") Integer grantId, @Param("date") Date date); diff --git a/src/main/java/ru/ulstu/activity/deadline/service/DeadlineService.java b/src/main/java/ru/ulstu/activity/deadline/service/DeadlineService.java index a3488e8..b655985 100644 --- a/src/main/java/ru/ulstu/activity/deadline/service/DeadlineService.java +++ b/src/main/java/ru/ulstu/activity/deadline/service/DeadlineService.java @@ -3,7 +3,6 @@ package ru.ulstu.activity.deadline.service; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.ulstu.activity.deadline.model.Deadline; -import ru.ulstu.activity.deadline.repository.DeadlineRepository; import java.util.Date; import java.util.List; @@ -26,7 +25,7 @@ public class DeadlineService { } @Transactional - private Deadline update(Deadline deadline) { + public Deadline update(Deadline deadline) { Deadline updateDeadline = deadlineRepository.getOne(deadline.getId()); updateDeadline.setDate(deadline.getDate()); updateDeadline.setDescription(deadline.getDescription()); diff --git a/src/main/java/ru/ulstu/activity/file/repostory/FileRepository.java b/src/main/java/ru/ulstu/activity/file/repostory/FileRepository.java deleted file mode 100644 index 9738a6d..0000000 --- a/src/main/java/ru/ulstu/activity/file/repostory/FileRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.ulstu.activity.file.repostory; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.ulstu.activity.file.model.FileData; - -public interface FileRepository extends JpaRepository { -} diff --git a/src/main/java/ru/ulstu/activity/file/service/FileRepository.java b/src/main/java/ru/ulstu/activity/file/service/FileRepository.java new file mode 100644 index 0000000..b1e91ae --- /dev/null +++ b/src/main/java/ru/ulstu/activity/file/service/FileRepository.java @@ -0,0 +1,7 @@ +package ru.ulstu.activity.file.service; + +import org.springframework.data.jpa.repository.JpaRepository; +import ru.ulstu.activity.file.model.FileData; + +interface FileRepository extends JpaRepository { +} diff --git a/src/main/java/ru/ulstu/activity/file/service/FileService.java b/src/main/java/ru/ulstu/activity/file/service/FileService.java index d071ddf..e20a48b 100644 --- a/src/main/java/ru/ulstu/activity/file/service/FileService.java +++ b/src/main/java/ru/ulstu/activity/file/service/FileService.java @@ -5,7 +5,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import ru.ulstu.activity.file.model.FileData; import ru.ulstu.activity.file.model.FileDataDto; -import ru.ulstu.activity.file.repostory.FileRepository; import ru.ulstu.activity.paper.model.PaperDto; import java.io.BufferedWriter; @@ -97,13 +96,13 @@ public class FileService { } @Transactional - private FileData update(FileDataDto fileDataDto) { + public FileData update(FileDataDto fileDataDto) { FileData file = fileRepository.getOne(fileDataDto.getId()); return fileRepository.save(copyFromDto(file, fileDataDto)); } @Transactional - private FileData create(FileDataDto fileDataDto) throws IOException { + public FileData create(FileDataDto fileDataDto) throws IOException { FileData newFile = createFileFromTmp(fileDataDto.getTmpFileName()); copyFromDto(newFile, fileDataDto); return fileRepository.save(newFile); diff --git a/src/main/java/ru/ulstu/activity/grant/model/Grant.java b/src/main/java/ru/ulstu/activity/grant/model/Grant.java index 1471eee..9d12b3a 100644 --- a/src/main/java/ru/ulstu/activity/grant/model/Grant.java +++ b/src/main/java/ru/ulstu/activity/grant/model/Grant.java @@ -146,6 +146,11 @@ public class Grant extends AbstractActivity implements EventSource { return authors != null ? new ArrayList<>(authors) : Collections.emptyList(); } + @Override + public String getSuffix() { + return "гранта"; + } + @Override public void addObjectToEvent(Event event) { event.setGrant(this); diff --git a/src/main/java/ru/ulstu/activity/grant/repository/GrantRepository.java b/src/main/java/ru/ulstu/activity/grant/service/GrantRepository.java similarity index 85% rename from src/main/java/ru/ulstu/activity/grant/repository/GrantRepository.java rename to src/main/java/ru/ulstu/activity/grant/service/GrantRepository.java index 3b7edfe..cfc84aa 100644 --- a/src/main/java/ru/ulstu/activity/grant/repository/GrantRepository.java +++ b/src/main/java/ru/ulstu/activity/grant/service/GrantRepository.java @@ -1,4 +1,4 @@ -package ru.ulstu.activity.grant.repository; +package ru.ulstu.activity.grant.service; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -10,7 +10,7 @@ import ru.ulstu.activity.grant.model.Grant; import java.util.List; -public interface GrantRepository extends JpaRepository, ActivityRepository { +interface GrantRepository extends JpaRepository, ActivityRepository { List findByStatus(Grant.GrantStatus status); diff --git a/src/main/java/ru/ulstu/activity/grant/service/GrantService.java b/src/main/java/ru/ulstu/activity/grant/service/GrantService.java index 949874f..596d61e 100644 --- a/src/main/java/ru/ulstu/activity/grant/service/GrantService.java +++ b/src/main/java/ru/ulstu/activity/grant/service/GrantService.java @@ -15,7 +15,6 @@ import ru.ulstu.activity.grant.model.Grant; import ru.ulstu.activity.grant.model.GrantDashboardDto; import ru.ulstu.activity.grant.model.GrantDto; import ru.ulstu.activity.grant.model.GrantListDto; -import ru.ulstu.activity.grant.repository.GrantRepository; import ru.ulstu.activity.paper.model.Paper; import ru.ulstu.activity.paper.model.PaperDto; import ru.ulstu.activity.paper.service.PaperService; @@ -33,9 +32,7 @@ import java.text.ParseException; import java.util.Arrays; import java.util.Collections; import java.util.Date; -import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; import static java.util.stream.Collectors.toList; @@ -68,7 +65,7 @@ public class GrantService extends ActivityService GrantNotificationService grantNotificationService, KiasService kiasService, PingService pingService) { - super(grantRepository, grantNotificationService, pingService); + super(grantRepository, grantNotificationService, pingService, eventService); this.grantRepository = grantRepository; this.kiasService = kiasService; this.fileService = fileService; @@ -106,15 +103,6 @@ public class GrantService extends ActivityService return new GrantDto(entity); } - @Transactional - @Override - public Grant create(Grant grant) { - grant = grantRepository.save(grant); - eventService.createFromObject(grant, Collections.emptyList(), false, "гранта"); - grantNotificationService.sendCreateNotification(grant); - return grant; - } - @Transactional @Override public GrantDto update(GrantDto grantDto) { @@ -122,28 +110,6 @@ public class GrantService extends ActivityService return new GrantDto(update(grant)); } - @Transactional - @Override - public Grant update(Grant grant) { - Set oldAuthors = new HashSet<>(grant.getAuthors()); - User oldLeader = grant.getLeader(); - grant.getAuthors().forEach(author -> { - if (!oldAuthors.contains(author)) { - grantNotificationService.sendAuthorsChangeNotification(grant, oldAuthors); - } - }); - oldAuthors.forEach(oldAuthor -> { - if (!grant.getAuthors().contains(oldAuthor)) { - grantNotificationService.sendAuthorsChangeNotification(grant, oldAuthors); - } - }); - if (grant.getLeader() != oldLeader) { - grantNotificationService.sendLeaderChangeNotification(grant, oldLeader); - } - eventService.updateGrantDeadlines(grant); - return grant; - } - protected Grant copyFromDto(Grant grant, GrantDto grantDto) throws IOException { grant.setComment(grantDto.getComment()); grant.setStatus(grantDto.getStatus() == null ? APPLICATION : grantDto.getStatus()); diff --git a/src/main/java/ru/ulstu/activity/paper/model/Paper.java b/src/main/java/ru/ulstu/activity/paper/model/Paper.java index e7a8a65..49f083f 100644 --- a/src/main/java/ru/ulstu/activity/paper/model/Paper.java +++ b/src/main/java/ru/ulstu/activity/paper/model/Paper.java @@ -322,4 +322,9 @@ public class Paper extends AbstractActivity implements EventSource { public int hashCode() { return Objects.hash(super.hashCode(), title, status, type, createDate, updateDate, deadlines, comment, url, locked, events, files, authors, latexText, conferences, grants); } + + @Override + public String getSuffix() { + return "статьи"; + } } diff --git a/src/main/java/ru/ulstu/activity/paper/repository/PaperRepository.java b/src/main/java/ru/ulstu/activity/paper/service/PaperRepository.java similarity index 90% rename from src/main/java/ru/ulstu/activity/paper/repository/PaperRepository.java rename to src/main/java/ru/ulstu/activity/paper/service/PaperRepository.java index fee202a..14b25bf 100644 --- a/src/main/java/ru/ulstu/activity/paper/repository/PaperRepository.java +++ b/src/main/java/ru/ulstu/activity/paper/service/PaperRepository.java @@ -1,4 +1,4 @@ -package ru.ulstu.activity.paper.repository; +package ru.ulstu.activity.paper.service; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -11,7 +11,7 @@ import ru.ulstu.user.model.User; import java.util.List; -public interface PaperRepository extends JpaDetachableRepository, ActivityRepository { +interface PaperRepository extends JpaDetachableRepository, ActivityRepository { @Query("SELECT p FROM Paper p WHERE (:author IS NULL OR :author MEMBER OF p.authors) AND (YEAR(p.createDate) = :year OR :year IS NULL)") List filter(@Param("author") User author, @Param("year") Integer year); diff --git a/src/main/java/ru/ulstu/activity/paper/service/PaperService.java b/src/main/java/ru/ulstu/activity/paper/service/PaperService.java index d0f3a57..d31750f 100644 --- a/src/main/java/ru/ulstu/activity/paper/service/PaperService.java +++ b/src/main/java/ru/ulstu/activity/paper/service/PaperService.java @@ -15,7 +15,6 @@ import ru.ulstu.activity.paper.model.PaperFilterListDto; import ru.ulstu.activity.paper.model.PaperListDto; import ru.ulstu.activity.paper.model.PaperStatusDto; import ru.ulstu.activity.paper.model.PaperTypeDto; -import ru.ulstu.activity.paper.repository.PaperRepository; import ru.ulstu.activity.ping.service.PingService; import ru.ulstu.activity.timeline.service.EventService; import ru.ulstu.core.jpa.OffsetablePageRequest; @@ -63,7 +62,7 @@ public class PaperService extends ActivityService DeadlineService deadlineService, EventService eventService, PingService pingService) { - super(paperRepository, paperNotificationService, pingService); + super(paperRepository, paperNotificationService, pingService, eventService); this.paperRepository = paperRepository; this.fileService = fileService; this.paperNotificationService = paperNotificationService; @@ -171,12 +170,8 @@ public class PaperService extends ActivityService paper.setUpdateDate(new Date()); paper.setStatus(DRAFT); paper.setType(OTHER); - paper = paperRepository.save(paper); - paperNotificationService.sendCreateNotification(paper); - eventService.createFromPaper(paper); - - return paper; + return create(paper); } public List filter(PaperFilterListDto filterDto) { diff --git a/src/main/java/ru/ulstu/activity/paper/repository/ReferenceRepository.java b/src/main/java/ru/ulstu/activity/paper/service/ReferenceRepository.java similarity index 94% rename from src/main/java/ru/ulstu/activity/paper/repository/ReferenceRepository.java rename to src/main/java/ru/ulstu/activity/paper/service/ReferenceRepository.java index 9b24f1c..d613eb4 100644 --- a/src/main/java/ru/ulstu/activity/paper/repository/ReferenceRepository.java +++ b/src/main/java/ru/ulstu/activity/paper/service/ReferenceRepository.java @@ -1,4 +1,4 @@ -package ru.ulstu.activity.paper.repository; +package ru.ulstu.activity.paper.service; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; diff --git a/src/main/java/ru/ulstu/activity/ping/repository/PingRepository.java b/src/main/java/ru/ulstu/activity/ping/service/PingRepository.java similarity index 89% rename from src/main/java/ru/ulstu/activity/ping/repository/PingRepository.java rename to src/main/java/ru/ulstu/activity/ping/service/PingRepository.java index a046ec5..2fbe51e 100644 --- a/src/main/java/ru/ulstu/activity/ping/repository/PingRepository.java +++ b/src/main/java/ru/ulstu/activity/ping/service/PingRepository.java @@ -1,4 +1,4 @@ -package ru.ulstu.activity.ping.repository; +package ru.ulstu.activity.ping.service; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -9,7 +9,7 @@ import ru.ulstu.activity.ping.model.Ping; import java.util.Date; import java.util.List; -public interface PingRepository extends JpaRepository { +interface PingRepository extends JpaRepository { @Query("SELECT count(*) FROM Ping p WHERE (DAY(p.date) = :day) AND (MONTH(p.date) = :month) AND (YEAR(p.date) = :year) AND (p.activityType = 'conference') AND (p.activity = :conference)") long countByConferenceAndDate(@Param("conference") Conference conference, @Param("day") Integer day, @Param("month") Integer month, @Param("year") Integer year); diff --git a/src/main/java/ru/ulstu/activity/ping/service/PingScheduler.java b/src/main/java/ru/ulstu/activity/ping/service/PingScheduler.java index cd6e8ba..17d3bfb 100644 --- a/src/main/java/ru/ulstu/activity/ping/service/PingScheduler.java +++ b/src/main/java/ru/ulstu/activity/ping/service/PingScheduler.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import ru.ulstu.activity.common.model.AbstractActivity; import ru.ulstu.activity.ping.model.Ping; import ru.ulstu.activity.ping.model.PingInfo; -import ru.ulstu.activity.ping.repository.PingRepository; import ru.ulstu.user.model.User; import ru.ulstu.user.service.MailService; @@ -19,10 +18,10 @@ import java.util.Set; @Service public class PingScheduler { + private final static String PING_MAIL_SUBJECT = "Ping статистика"; private final Logger log = LoggerFactory.getLogger(PingScheduler.class); private final PingRepository pingRepository; private final MailService mailService; - private final static String PING_MAIL_SUBJECT = "Ping статистика"; public PingScheduler(PingRepository pingRepository, MailService mailService) { this.pingRepository = pingRepository; diff --git a/src/main/java/ru/ulstu/activity/ping/service/PingService.java b/src/main/java/ru/ulstu/activity/ping/service/PingService.java index 8a52afa..a4aed0e 100644 --- a/src/main/java/ru/ulstu/activity/ping/service/PingService.java +++ b/src/main/java/ru/ulstu/activity/ping/service/PingService.java @@ -5,7 +5,6 @@ import org.springframework.transaction.annotation.Transactional; import ru.ulstu.activity.common.model.AbstractActivity; import ru.ulstu.activity.conference.model.Conference; import ru.ulstu.activity.ping.model.Ping; -import ru.ulstu.activity.ping.repository.PingRepository; import ru.ulstu.user.service.UserService; import java.util.Calendar; diff --git a/src/main/java/ru/ulstu/activity/project/model/Project.java b/src/main/java/ru/ulstu/activity/project/model/Project.java index fb26267..46840cb 100644 --- a/src/main/java/ru/ulstu/activity/project/model/Project.java +++ b/src/main/java/ru/ulstu/activity/project/model/Project.java @@ -109,6 +109,11 @@ public class Project extends AbstractActivity implements EventSource { event.setProject(this); } + @Override + public String getSuffix() { + return "проекта"; + } + public ProjectStatus getStatus() { return status; } diff --git a/src/main/java/ru/ulstu/activity/project/model/ProjectDto.java b/src/main/java/ru/ulstu/activity/project/model/ProjectDto.java index e30547f..8cc84b4 100644 --- a/src/main/java/ru/ulstu/activity/project/model/ProjectDto.java +++ b/src/main/java/ru/ulstu/activity/project/model/ProjectDto.java @@ -23,7 +23,6 @@ public class ProjectDto extends ActivityDto { private Project.ProjectStatus status; private String description; private List deadlines = new ArrayList<>(); - private GrantDto grant; private String repository; private List files = new ArrayList<>(); private List removedDeadlineIds = new ArrayList<>(); @@ -49,7 +48,6 @@ public class ProjectDto extends ActivityDto { this.title = title; this.status = status; this.description = description; - this.grant = grant; this.repository = repository; this.deadlines = deadlines; this.files = files; @@ -67,7 +65,6 @@ public class ProjectDto extends ActivityDto { this.status = project.getStatus(); this.description = project.getDescription(); this.files = convert(project.getFiles(), FileDataDto::new); - this.grant = project.getGrant() == null ? null : new GrantDto(project.getGrant()); this.repository = project.getRepository(); this.deadlines = project.getDeadlines(); this.executorIds = convert(users, user -> user.getId()); @@ -100,14 +97,6 @@ public class ProjectDto extends ActivityDto { this.description = description; } - public GrantDto getGrant() { - return grant; - } - - public void setGrant(GrantDto grant) { - this.grant = grant; - } - public String getRepository() { return repository; } diff --git a/src/main/java/ru/ulstu/activity/project/repository/ProjectRepository.java b/src/main/java/ru/ulstu/activity/project/service/ProjectRepository.java similarity index 62% rename from src/main/java/ru/ulstu/activity/project/repository/ProjectRepository.java rename to src/main/java/ru/ulstu/activity/project/service/ProjectRepository.java index d74b188..5e4dde4 100644 --- a/src/main/java/ru/ulstu/activity/project/repository/ProjectRepository.java +++ b/src/main/java/ru/ulstu/activity/project/service/ProjectRepository.java @@ -1,4 +1,4 @@ -package ru.ulstu.activity.project.repository; +package ru.ulstu.activity.project.service; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -8,7 +8,10 @@ import org.springframework.data.repository.query.Param; import ru.ulstu.activity.api.ActivityRepository; import ru.ulstu.activity.project.model.Project; -public interface ProjectRepository extends JpaRepository, ActivityRepository { +interface ProjectRepository extends JpaRepository, ActivityRepository { @Query("SELECT p FROM Project p WHERE p.status NOT IN (:statuses)") Page findAllWithoutStatuses(Pageable pageable, @Param("statuses") Project.ProjectStatus... statuses); + + @Query("SELECT p.title FROM Project p WHERE (p.title = :name) AND (:id IS NULL OR p.id != :id) ") + String findByNameAndNotId(@Param("name") String name, @Param("id") Integer id); } diff --git a/src/main/java/ru/ulstu/activity/project/service/ProjectService.java b/src/main/java/ru/ulstu/activity/project/service/ProjectService.java index 34e99a4..5d2eccc 100644 --- a/src/main/java/ru/ulstu/activity/project/service/ProjectService.java +++ b/src/main/java/ru/ulstu/activity/project/service/ProjectService.java @@ -6,13 +6,12 @@ import org.springframework.transaction.annotation.Transactional; import ru.ulstu.activity.common.service.ActivityService; import ru.ulstu.activity.deadline.service.DeadlineService; import ru.ulstu.activity.file.service.FileService; -import ru.ulstu.activity.grant.service.GrantService; import ru.ulstu.activity.ping.service.PingService; import ru.ulstu.activity.project.model.Project; import ru.ulstu.activity.project.model.ProjectDashboardDto; import ru.ulstu.activity.project.model.ProjectDto; import ru.ulstu.activity.project.model.ProjectListDto; -import ru.ulstu.activity.project.repository.ProjectRepository; +import ru.ulstu.activity.timeline.service.EventService; import ru.ulstu.core.jpa.OffsetablePageRequest; import ru.ulstu.core.model.response.PageableItems; import ru.ulstu.user.model.User; @@ -31,25 +30,24 @@ import static ru.ulstu.core.util.StreamApiUtils.convertPageable; public class ProjectService extends ActivityService { private final ProjectRepository projectRepository; private final DeadlineService deadlineService; - private final GrantService grantService; private final FileService fileService; private final UserService userService; private final PingService pingService; + private final EventService eventService; public ProjectService(ProjectRepository projectRepository, ProjectNotificationService projectNotificationService, DeadlineService deadlineService, - GrantService grantService, FileService fileService, UserService userService, - PingService pingService) { - super(projectRepository, projectNotificationService, pingService); + PingService pingService, EventService eventService) { + super(projectRepository, projectNotificationService, pingService, eventService); this.projectRepository = projectRepository; this.deadlineService = deadlineService; - this.grantService = grantService; this.fileService = fileService; this.userService = userService; this.pingService = pingService; + this.eventService = eventService; } public PageableItems findAllActiveDto(int offset, int count) { @@ -75,18 +73,12 @@ public class ProjectService extends ActivityService !f.isDeleted()) .collect(toList()))); project.getGrants().clear(); - if (projectDto.getGrantIds() != null && !projectDto.getGrantIds().isEmpty()) { - projectDto.getGrantIds().forEach(grantIds -> project.getGrants().add(grantService.findById(grantIds))); - } return project; } diff --git a/src/main/java/ru/ulstu/activity/students/model/Task.java b/src/main/java/ru/ulstu/activity/students/model/Task.java index c879c25..f893ed2 100644 --- a/src/main/java/ru/ulstu/activity/students/model/Task.java +++ b/src/main/java/ru/ulstu/activity/students/model/Task.java @@ -91,6 +91,11 @@ public class Task extends AbstractActivity implements EventSource { return Collections.emptyList(); } + @Override + public String getSuffix() { + return "задачи"; + } + @Override public void addObjectToEvent(Event event) { event.setTask(this); diff --git a/src/main/java/ru/ulstu/activity/students/repository/SchedulerRepository.java b/src/main/java/ru/ulstu/activity/students/service/SchedulerRepository.java similarity index 61% rename from src/main/java/ru/ulstu/activity/students/repository/SchedulerRepository.java rename to src/main/java/ru/ulstu/activity/students/service/SchedulerRepository.java index 3cb346f..4ca820d 100644 --- a/src/main/java/ru/ulstu/activity/students/repository/SchedulerRepository.java +++ b/src/main/java/ru/ulstu/activity/students/service/SchedulerRepository.java @@ -1,10 +1,10 @@ -package ru.ulstu.activity.students.repository; +package ru.ulstu.activity.students.service; import org.springframework.data.jpa.repository.JpaRepository; import ru.ulstu.activity.students.model.Scheduler; import ru.ulstu.activity.students.model.Task; -public interface SchedulerRepository extends JpaRepository { +interface SchedulerRepository extends JpaRepository { Scheduler findOneByTask(Task task); diff --git a/src/main/java/ru/ulstu/activity/students/service/SchedulerService.java b/src/main/java/ru/ulstu/activity/students/service/SchedulerService.java index 150cb0f..2113f8f 100644 --- a/src/main/java/ru/ulstu/activity/students/service/SchedulerService.java +++ b/src/main/java/ru/ulstu/activity/students/service/SchedulerService.java @@ -4,7 +4,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.ulstu.activity.students.model.Scheduler; import ru.ulstu.activity.students.model.Task; -import ru.ulstu.activity.students.repository.SchedulerRepository; import ru.ulstu.activity.tags.model.Tag; import java.util.Date; @@ -31,13 +30,13 @@ public class SchedulerService { @Transactional - private Scheduler create(Task task) { + public Scheduler create(Task task) { Scheduler scheduler = new Scheduler(task, task.getDeadlines().get(task.getDeadlines().size() - 1).getDate()); return schedulerRepository.save(scheduler); } @Transactional - private void delete(Integer schedulerId) { + public void delete(Integer schedulerId) { if (schedulerRepository.existsById(schedulerId)) { schedulerRepository.deleteById(schedulerId); } diff --git a/src/main/java/ru/ulstu/activity/students/repository/TaskRepository.java b/src/main/java/ru/ulstu/activity/students/service/TaskRepository.java similarity index 90% rename from src/main/java/ru/ulstu/activity/students/repository/TaskRepository.java rename to src/main/java/ru/ulstu/activity/students/service/TaskRepository.java index 1439385..2bc4329 100644 --- a/src/main/java/ru/ulstu/activity/students/repository/TaskRepository.java +++ b/src/main/java/ru/ulstu/activity/students/service/TaskRepository.java @@ -1,4 +1,4 @@ -package ru.ulstu.activity.students.repository; +package ru.ulstu.activity.students.service; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -10,7 +10,7 @@ import ru.ulstu.activity.tags.model.Tag; import java.util.Date; import java.util.List; -public interface TaskRepository extends JpaRepository, ActivityRepository { +interface TaskRepository extends JpaRepository, ActivityRepository { @Query("SELECT t FROM Task t WHERE (t.status = :status OR :status IS NULL) AND (:tag IS NULL OR :tag MEMBER OF t.tags) ORDER BY create_date DESC") List filterNew(@Param("status") Task.TaskStatus status, @Param("tag") Tag tag); diff --git a/src/main/java/ru/ulstu/activity/students/service/TaskService.java b/src/main/java/ru/ulstu/activity/students/service/TaskService.java index 244cb33..7d379ff 100644 --- a/src/main/java/ru/ulstu/activity/students/service/TaskService.java +++ b/src/main/java/ru/ulstu/activity/students/service/TaskService.java @@ -14,8 +14,6 @@ import ru.ulstu.activity.students.model.TaskDashboardDto; import ru.ulstu.activity.students.model.TaskDto; import ru.ulstu.activity.students.model.TaskFilterDto; import ru.ulstu.activity.students.model.TaskListDto; -import ru.ulstu.activity.students.repository.SchedulerRepository; -import ru.ulstu.activity.students.repository.TaskRepository; import ru.ulstu.activity.tags.model.Tag; import ru.ulstu.activity.tags.service.TagService; import ru.ulstu.activity.timeline.service.EventService; @@ -28,7 +26,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; -import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; @@ -58,7 +55,7 @@ public class TaskService extends ActivityService { SchedulerRepository schedulerRepository, EventService eventService, PingService pingService) { - super(taskRepository, taskNotificationService, pingService); + super(taskRepository, taskNotificationService, pingService, eventService); this.taskRepository = taskRepository; this.taskNotificationService = taskNotificationService; this.deadlineService = deadlineService; @@ -115,13 +112,6 @@ public class TaskService extends ActivityService { return new TaskDto(create(newTask)); } - @Transactional - public Task create(Task task) { - task = taskRepository.save(task); - eventService.createFromObject(task, Collections.emptyList(), true, "задачи"); - return task; - } - protected Task copyFromDto(Task task, TaskDto taskDto) throws IOException { task.setTitle(taskDto.getTitle()); task.setDescription(taskDto.getDescription()); @@ -140,13 +130,6 @@ public class TaskService extends ActivityService { return new TaskDto(update(task)); } - @Transactional - public Task update(Task task) { - task = taskRepository.save(task); - eventService.updateTaskDeadlines(task); - return task; - } - @Transactional public boolean delete(Integer taskId) { if (taskRepository.existsById(taskId)) { diff --git a/src/main/java/ru/ulstu/activity/tags/repository/TagRepository.java b/src/main/java/ru/ulstu/activity/tags/service/TagRepository.java similarity index 74% rename from src/main/java/ru/ulstu/activity/tags/repository/TagRepository.java rename to src/main/java/ru/ulstu/activity/tags/service/TagRepository.java index 882e476..069905f 100644 --- a/src/main/java/ru/ulstu/activity/tags/repository/TagRepository.java +++ b/src/main/java/ru/ulstu/activity/tags/service/TagRepository.java @@ -1,11 +1,11 @@ -package ru.ulstu.activity.tags.repository; +package ru.ulstu.activity.tags.service; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import ru.ulstu.activity.tags.model.Tag; -public interface TagRepository extends JpaRepository { +interface TagRepository extends JpaRepository { @Query("SELECT t FROM Tag t WHERE (t.tagName = :tagName)") Tag findByName(@Param("tagName") String tagName); diff --git a/src/main/java/ru/ulstu/activity/tags/service/TagService.java b/src/main/java/ru/ulstu/activity/tags/service/TagService.java index 5615bea..b24663c 100644 --- a/src/main/java/ru/ulstu/activity/tags/service/TagService.java +++ b/src/main/java/ru/ulstu/activity/tags/service/TagService.java @@ -2,7 +2,6 @@ package ru.ulstu.activity.tags.service; import org.springframework.stereotype.Service; import ru.ulstu.activity.tags.model.Tag; -import ru.ulstu.activity.tags.repository.TagRepository; import javax.transaction.Transactional; import java.util.List; @@ -10,12 +9,9 @@ import java.util.stream.Collectors; @Service public class TagService { - private final TagRepository tagRepository; - public TagService(TagRepository tagRepository) { - this.tagRepository = tagRepository; } @@ -33,17 +29,17 @@ public class TagService { } @Transactional - private Tag getExistById(Tag tag) { + public Tag getExistById(Tag tag) { return tagRepository.getOne(tag.getId()); } @Transactional - private Tag isExistByName(String tagName) { + public Tag isExistByName(String tagName) { return tagRepository.findByName(tagName); } @Transactional - private Tag create(Tag tag) { + public Tag create(Tag tag) { Tag newTag = new Tag(); newTag.setTagName(tag.getTagName()); newTag = tagRepository.save(newTag); diff --git a/src/main/java/ru/ulstu/activity/timeline/controller/EventController.java b/src/main/java/ru/ulstu/activity/timeline/controller/EventController.java index c75b406..cd66147 100644 --- a/src/main/java/ru/ulstu/activity/timeline/controller/EventController.java +++ b/src/main/java/ru/ulstu/activity/timeline/controller/EventController.java @@ -1,21 +1,15 @@ package ru.ulstu.activity.timeline.controller; -import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import ru.ulstu.activity.timeline.model.EventDto; import ru.ulstu.activity.timeline.service.EventService; import ru.ulstu.configuration.Constants; +import ru.ulstu.core.model.response.PageableItems; import ru.ulstu.core.model.response.Response; -import javax.validation.Valid; -import java.util.List; - @RestController @RequestMapping(Constants.API_1_0 + "events") public class EventController { @@ -27,28 +21,29 @@ public class EventController { } @GetMapping - public Response> getEvents() { - return new Response<>(eventService.findAllDto()); + public Response> getEvents(@RequestParam(value = "offset", defaultValue = "0") int offset, + @RequestParam(value = "count", defaultValue = "0") int count) { + return new Response<>(eventService.getAllEvents(offset, count)); } - @GetMapping("/future") - public Response> getFutureEvents() { - return new Response<>(eventService.findAllFutureDto()); + @GetMapping("future") + public Response> getFutureEvents(@RequestParam(value = "offset", defaultValue = "0") int offset, + @RequestParam(value = "count", defaultValue = "0") int count) { + return new Response<>(eventService.getFutureEvents(offset, count)); } - @PostMapping - public Response createEvent(@RequestBody @Valid EventDto timelineDto) { - return new Response<>(eventService.create(timelineDto)); + @GetMapping("all-by-user") + public Response> getUserEvents(@RequestParam(value = "user-id") int userId, + @RequestParam(value = "offset", defaultValue = "0") int offset, + @RequestParam(value = "count", defaultValue = "0") int count) { + return new Response<>(eventService.getUserEvents(userId, offset, count)); } - @PutMapping - public Response updateEvent(@RequestBody @Valid EventDto eventDto) { - return new Response<>(eventService.update(eventDto)); + @GetMapping("future-by-user") + public Response> getUserFutureEvents(@RequestParam(value = "user-id") int userId, + @RequestParam(value = "offset", defaultValue = "0") int offset, + @RequestParam(value = "count", defaultValue = "0") int count) { + return new Response<>(eventService.getUserFutureEvents(userId, offset, count)); } - @DeleteMapping("/{event-id}") - public Response delete(@PathVariable("event-id") Integer eventId) { - eventService.delete(eventId); - return new Response<>(Boolean.TRUE); - } } diff --git a/src/main/java/ru/ulstu/activity/timeline/model/Event.java b/src/main/java/ru/ulstu/activity/timeline/model/Event.java index 3a9e55e..f882bf9 100644 --- a/src/main/java/ru/ulstu/activity/timeline/model/Event.java +++ b/src/main/java/ru/ulstu/activity/timeline/model/Event.java @@ -8,7 +8,6 @@ import ru.ulstu.activity.students.model.Task; import ru.ulstu.core.model.BaseEntity; import ru.ulstu.user.model.User; -import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; @@ -17,7 +16,6 @@ import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.validation.constraints.NotBlank; @@ -45,9 +43,6 @@ public class Event extends BaseEntity { @NotBlank private String title; - @Enumerated(value = EnumType.STRING) - private PeriodEvent period; - @Enumerated(value = EnumType.STRING) private EventStatus status; @@ -69,14 +64,6 @@ public class Event extends BaseEntity { @ManyToMany(fetch = FetchType.LAZY) private List recipients = new ArrayList<>(); - @ManyToOne - @JoinColumn(name = "child_id") - private Event child; - - @OneToMany(cascade = CascadeType.ALL) - @JoinColumn(name = "child_id") - private List parents; - @ManyToOne @JoinColumn(name = "paper_id") private Paper paper; @@ -113,14 +100,6 @@ public class Event extends BaseEntity { this.status = status; } - public PeriodEvent getPeriod() { - return period; - } - - public void setPeriod(PeriodEvent period) { - this.period = period; - } - public Date getCreateDate() { return createDate; } @@ -161,22 +140,6 @@ public class Event extends BaseEntity { this.executeDate = executeDate; } - public Event getChild() { - return child; - } - - public void setChild(Event child) { - this.child = child; - } - - public List getParents() { - return parents; - } - - public void setParents(List parents) { - this.parents = parents; - } - public Paper getPaper() { return paper; } diff --git a/src/main/java/ru/ulstu/activity/timeline/model/EventDto.java b/src/main/java/ru/ulstu/activity/timeline/model/EventDto.java index 5a1d014..51741b2 100644 --- a/src/main/java/ru/ulstu/activity/timeline/model/EventDto.java +++ b/src/main/java/ru/ulstu/activity/timeline/model/EventDto.java @@ -1,170 +1,31 @@ package ru.ulstu.activity.timeline.model; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import ru.ulstu.activity.conference.model.ConferenceDto; -import ru.ulstu.activity.grant.model.GrantDto; -import ru.ulstu.activity.paper.model.PaperDto; -import ru.ulstu.activity.project.model.ProjectDto; -import ru.ulstu.activity.students.model.TaskDto; -import ru.ulstu.user.model.UserDto; - import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.Date; -import java.util.List; - -import static ru.ulstu.core.util.StreamApiUtils.convert; public class EventDto { - private final Integer id; @NotBlank private final String title; - private final PeriodEvent period; - private final Event.EventStatus status; @NotNull private final Date executeDate; - private final Date createDate; - private final Date updateDate; private final String description; - private final List recipients; - private PaperDto paperDto; - private ConferenceDto conferenceDto; - private GrantDto grantDto; - private ProjectDto projectDto; - private TaskDto taskDto; - - @JsonCreator - public EventDto(@JsonProperty("id") Integer id, - @JsonProperty("title") String title, - @JsonProperty("status") Event.EventStatus status, - @JsonProperty("period") PeriodEvent period, - @JsonProperty("executeDate") Date executeDate, - @JsonProperty("createDate") Date createDate, - @JsonProperty("updateDate") Date updateDate, - @JsonProperty("description") String description, - @JsonProperty("paperDto") PaperDto paperDto, - @JsonProperty("recipients") List recipients, - @JsonProperty("conferenceDto") ConferenceDto conferenceDto, - @JsonProperty("grantDto") GrantDto grantDto, - @JsonProperty("projectDto") ProjectDto projectDto, - @JsonProperty("taskDto") TaskDto taskDto) { - this.id = id; - this.title = title; - this.period = period; - this.status = status; - this.executeDate = executeDate; - this.createDate = createDate; - this.updateDate = updateDate; - this.description = description; - this.recipients = recipients; - this.paperDto = paperDto; - this.conferenceDto = conferenceDto; - this.grantDto = grantDto; - this.projectDto = projectDto; - this.taskDto = taskDto; - } public EventDto(Event event) { - this.id = event.getId(); this.title = event.getTitle(); - this.status = event.getStatus(); - this.period = event.getPeriod(); - this.executeDate = event.getExecuteDate(); - this.createDate = event.getCreateDate(); - this.updateDate = event.getUpdateDate(); this.description = event.getDescription(); - this.recipients = convert(event.getRecipients(), UserDto::new); - if (paperDto != null) { - this.paperDto = new PaperDto(event.getPaper()); - } - if (conferenceDto != null) { - this.conferenceDto = new ConferenceDto(event.getConference()); - } - if (grantDto != null) { - this.grantDto = new GrantDto(event.getGrant()); - } - if (projectDto != null) { - this.projectDto = new ProjectDto(event.getProject()); - } - if (taskDto != null) { - this.taskDto = new TaskDto(event.getTask()); - } - } - - public Integer getId() { - return id; + this.executeDate = event.getExecuteDate(); } public String getTitle() { return title; } - public PeriodEvent getPeriod() { - return period; - } - - public Event.EventStatus getStatus() { - return status; - } - - public Date getCreateDate() { - return createDate; - } - - public Date getUpdateDate() { - return updateDate; - } - public String getDescription() { return description; } - public List getRecipients() { - return recipients; - } - public Date getExecuteDate() { return executeDate; } - - public PaperDto getPaperDto() { - return paperDto; - } - - public void setPaperDto(PaperDto paperDto) { - this.paperDto = paperDto; - } - - public ConferenceDto getConferenceDto() { - return conferenceDto; - } - - public void setConferenceDto(ConferenceDto conferenceDto) { - this.conferenceDto = conferenceDto; - } - - public GrantDto getGrantDto() { - return grantDto; - } - - public void setGrantDto(GrantDto grantDto) { - this.grantDto = grantDto; - } - - public ProjectDto getProjectDto() { - return projectDto; - } - - public void setProjectDto(ProjectDto projectDto) { - this.projectDto = projectDto; - } - - public TaskDto getTaskDto() { - return taskDto; - } - - public void setTaskDto(TaskDto taskDto) { - this.taskDto = taskDto; - } } diff --git a/src/main/java/ru/ulstu/activity/timeline/model/PeriodEvent.java b/src/main/java/ru/ulstu/activity/timeline/model/PeriodEvent.java deleted file mode 100644 index c64ede8..0000000 --- a/src/main/java/ru/ulstu/activity/timeline/model/PeriodEvent.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.ulstu.activity.timeline.model; - -import java.time.Period; - -public enum PeriodEvent { - EVERY_YEAR(Period.ofYears(1), "Каждый год"), - EVERY_MONTH(Period.ofMonths(1), "Каждый месяц"), - EVERY_WEEK(Period.ofWeeks(1), "Каждую неделю"), - EVERY_DAY(Period.ofDays(1), "Каждый день"); - - private final Period period; - private final String message; - - PeriodEvent(Period period, String message) { - this.period = period; - this.message = message; - } - - public Period getPeriod() { - return period; - } - - public String getMessage() { - return message; - } -} diff --git a/src/main/java/ru/ulstu/activity/timeline/model/Timeline.java b/src/main/java/ru/ulstu/activity/timeline/model/Timeline.java deleted file mode 100644 index 421cba2..0000000 --- a/src/main/java/ru/ulstu/activity/timeline/model/Timeline.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.ulstu.activity.timeline.model; - -import ru.ulstu.core.model.BaseEntity; - -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import java.util.ArrayList; -import java.util.List; - -@Entity -public class Timeline extends BaseEntity { - - @OneToMany(cascade = CascadeType.ALL) - @JoinColumn(name = "timeline_id") - private List events = new ArrayList<>(); - - public List getEvents() { - return events; - } - - public void setEvents(List events) { - this.events = events; - } -} diff --git a/src/main/java/ru/ulstu/activity/timeline/model/TimelineDto.java b/src/main/java/ru/ulstu/activity/timeline/model/TimelineDto.java deleted file mode 100644 index aa9c68b..0000000 --- a/src/main/java/ru/ulstu/activity/timeline/model/TimelineDto.java +++ /dev/null @@ -1,33 +0,0 @@ -package ru.ulstu.activity.timeline.model; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; - -import java.util.List; - -import static ru.ulstu.core.util.StreamApiUtils.convert; - -public class TimelineDto { - private final Integer id; - private final List events; - - @JsonCreator - public TimelineDto(@JsonProperty("id") Integer id, - @JsonProperty("events") List events) { - this.id = id; - this.events = events; - } - - public TimelineDto(Timeline timeline) { - this.id = timeline.getId(); - this.events = convert(timeline.getEvents(), EventDto::new); - } - - public Integer getId() { - return id; - } - - public List getEvents() { - return events; - } -} diff --git a/src/main/java/ru/ulstu/activity/timeline/repository/TimelineRepository.java b/src/main/java/ru/ulstu/activity/timeline/repository/TimelineRepository.java deleted file mode 100644 index c455c8a..0000000 --- a/src/main/java/ru/ulstu/activity/timeline/repository/TimelineRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.ulstu.activity.timeline.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.ulstu.activity.timeline.model.Timeline; - -public interface TimelineRepository extends JpaRepository { -} diff --git a/src/main/java/ru/ulstu/activity/timeline/repository/EventRepository.java b/src/main/java/ru/ulstu/activity/timeline/service/EventRepository.java similarity index 52% rename from src/main/java/ru/ulstu/activity/timeline/repository/EventRepository.java rename to src/main/java/ru/ulstu/activity/timeline/service/EventRepository.java index c921639..8f3de13 100644 --- a/src/main/java/ru/ulstu/activity/timeline/repository/EventRepository.java +++ b/src/main/java/ru/ulstu/activity/timeline/service/EventRepository.java @@ -1,22 +1,27 @@ -package ru.ulstu.activity.timeline.repository; +package ru.ulstu.activity.timeline.service; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import ru.ulstu.activity.conference.model.Conference; import ru.ulstu.activity.grant.model.Grant; import ru.ulstu.activity.paper.model.Paper; import ru.ulstu.activity.project.model.Project; import ru.ulstu.activity.students.model.Task; import ru.ulstu.activity.timeline.model.Event; +import ru.ulstu.core.jpa.OffsetablePageRequest; +import ru.ulstu.user.model.User; import java.util.List; -public interface EventRepository extends JpaRepository { +interface EventRepository extends JpaRepository { @Query("SELECT e FROM Event e WHERE e.executeDate = CURRENT_DATE") List findByCurrentDate(); @Query("SELECT e FROM Event e WHERE e.executeDate > CURRENT_DATE ORDER BY e.executeDate") - List findAllFuture(); + Page findAllFuture(OffsetablePageRequest offsetablePageRequest); List findAllByPaper(Paper paper); @@ -27,4 +32,10 @@ public interface EventRepository extends JpaRepository { List findAllByProject(Project project); List findAllByTask(Task task); -} + + @Query("SELECT e FROM Event e WHERE e.recipients = :user ORDER BY e.executeDate") + Page findByUser(Pageable offsetablePageRequest, @Param("user") User user); + + @Query("SELECT e FROM Event e WHERE e.recipients = :user AND e.executeDate > CURRENT_DATE ORDER BY e.executeDate") + Page findUserFuture(Pageable offsetablePageRequest, @Param("user") User user); +} \ No newline at end of file diff --git a/src/main/java/ru/ulstu/activity/timeline/service/EventScheduler.java b/src/main/java/ru/ulstu/activity/timeline/service/EventScheduler.java deleted file mode 100644 index 7854cea..0000000 --- a/src/main/java/ru/ulstu/activity/timeline/service/EventScheduler.java +++ /dev/null @@ -1,77 +0,0 @@ -package ru.ulstu.activity.timeline.service; - -import com.google.common.collect.ImmutableMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Service; -import ru.ulstu.activity.timeline.model.Event; -import ru.ulstu.activity.timeline.model.PeriodEvent; -import ru.ulstu.core.util.DateUtils; -import ru.ulstu.user.service.MailService; - -import java.util.Date; -import java.util.List; -import java.util.Map; - -@Service -public class EventScheduler { - - private final Logger log = LoggerFactory.getLogger(EventScheduler.class); - private final EventService eventService; - private final MailService mailService; - - public EventScheduler(EventService eventService, - MailService mailService) { - this.eventService = eventService; - this.mailService = mailService; - } - - @Scheduled(cron = "0 0 8 * * ?") - public void sendNotifications() { - List events = eventService.findByCurrentDate(); - events.forEach(event -> { - Map variables = ImmutableMap.of("description", event.getDescription()); - event.getRecipients() - .forEach(recipient -> mailService.sendEmailFromTemplate(variables, recipient, "eventNotification", event.getTitle())); - if (event.getPeriod() == null) { - event.setStatus(Event.EventStatus.COMPLETED); - eventService.save(event); - } - }); - } - - @Scheduled(cron = "0 0 * * * ?") - public void checkPeriodEvents() { - log.debug("EventScheduler.checkPeriodEvents started"); - //TODO: filter - for (Event event : eventService.findAll()) { - if (halfOfThePeriodHasPassed(event)) { - eventService.createBasedOn(event, DateUtils.addDays(event.getExecuteDate(), getShiftInDays(event.getPeriod()))); - } - } - - log.debug("EventScheduler.checkPeriodEvents finished"); - } - - private int getShiftInDays(PeriodEvent periodEvent) { - switch (periodEvent) { - case EVERY_DAY: - return periodEvent.getPeriod().getDays(); - case EVERY_WEEK: - return periodEvent.getPeriod().getDays(); - case EVERY_MONTH: - return periodEvent.getPeriod().getMonths() * 30; - case EVERY_YEAR: - return periodEvent.getPeriod().getYears() * 365; - default: - throw new RuntimeException("period event not exists"); - } - } - - private boolean halfOfThePeriodHasPassed(Event event) { - return event.getPeriod() != null && event.getChild() == null - && new Date().after( - DateUtils.addDays(event.getExecuteDate(), (int) Math.round((double) getShiftInDays(event.getPeriod()) / 2))); - } -} diff --git a/src/main/java/ru/ulstu/activity/timeline/service/EventService.java b/src/main/java/ru/ulstu/activity/timeline/service/EventService.java index 9c75696..1ed772b 100644 --- a/src/main/java/ru/ulstu/activity/timeline/service/EventService.java +++ b/src/main/java/ru/ulstu/activity/timeline/service/EventService.java @@ -1,180 +1,80 @@ package ru.ulstu.activity.timeline.service; import org.apache.commons.lang3.time.DateUtils; -import org.springframework.context.annotation.Lazy; +import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import ru.ulstu.activity.common.model.EventSource; -import ru.ulstu.activity.conference.model.Conference; import ru.ulstu.activity.deadline.model.Deadline; -import ru.ulstu.activity.grant.model.Grant; -import ru.ulstu.activity.paper.model.Paper; -import ru.ulstu.activity.project.model.Project; -import ru.ulstu.activity.students.model.Task; import ru.ulstu.activity.timeline.model.Event; import ru.ulstu.activity.timeline.model.EventDto; -import ru.ulstu.activity.timeline.model.Timeline; -import ru.ulstu.activity.timeline.repository.EventRepository; -import ru.ulstu.user.model.UserDto; +import ru.ulstu.core.jpa.OffsetablePageRequest; +import ru.ulstu.core.model.response.PageableItems; import ru.ulstu.user.service.UserService; -import java.util.Collections; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; -import static ru.ulstu.core.util.StreamApiUtils.convert; +import static ru.ulstu.core.util.StreamApiUtils.convertPageable; @Service public class EventService { - - private final EventRepository eventRepository; - private final TimelineService timelineService; private final UserService userService; + private final EventRepository eventRepository; - public EventService(EventRepository eventRepository, - @Lazy TimelineService timelineService, - UserService userService) { - this.eventRepository = eventRepository; - this.timelineService = timelineService; + public EventService(UserService userService, + EventRepository eventRepository) { this.userService = userService; + this.eventRepository = eventRepository; } - public List findAllDto() { - return convert(findAll(), EventDto::new); + public PageableItems getAllEvents(int offset, int count) { + return createPageable(eventRepository.findAll(new OffsetablePageRequest(offset, count))); } - public List findAll() { - return eventRepository.findAll(); + public PageableItems getFutureEvents(int offset, int count) { + return createPageable(eventRepository.findAllFuture(new OffsetablePageRequest(offset, count))); } - @Transactional - public Integer create(EventDto eventDto) { - return eventRepository.save(copyFromDto(new Event(), eventDto)).getId(); + public PageableItems getUserEvents(int userId, int offset, int count) { + return createPageable(eventRepository.findByUser(new OffsetablePageRequest(offset, count), userService.findById(userId))); } - private Event copyFromDto(Event event, EventDto eventDto) { - event.setExecuteDate(eventDto.getExecuteDate()); - event.setCreateDate(eventDto.getId() == null ? new Date() : eventDto.getCreateDate()); - event.setDescription(eventDto.getDescription()); - event.setRecipients(userService.findByIds(convert(eventDto.getRecipients(), UserDto::getId))); - event.setTitle(eventDto.getTitle()); - event.setPeriod(eventDto.getPeriod()); - event.setStatus(eventDto.getStatus()); - event.setUpdateDate(new Date()); - return event; + public PageableItems getUserFutureEvents(int userId, int offset, int count) { + return createPageable(eventRepository.findUserFuture(new OffsetablePageRequest(offset, count), userService.findById(userId))); } - @Transactional - public Integer update(EventDto eventDto) { - Event event = eventRepository.getOne(eventDto.getId()); - return eventRepository.save(copyFromDto(event, eventDto)).getId(); - } - - @Transactional - public Event save(Event event) { - return eventRepository.save(event); - } - - @Transactional - public void delete(Integer eventId) { - Event event = eventRepository.getOne(eventId); - event.setParents(null); - eventRepository.delete(event); - } - - public List findByIds(List ids) { - return eventRepository.findAllById(ids); - } - - public void createBasedOn(Event event, Date executeDate) { - //backup event id - Integer parentEventId = event.getId(); - - event.setId(null); - event.setStatus(Event.EventStatus.POSSIBLE); - event.setExecuteDate(executeDate); - event.setCreateDate(new Date()); - event.setUpdateDate(new Date()); - event = eventRepository.save(event); - - //set child to parent - Event parentEvent = eventRepository.getOne(parentEventId); - parentEvent.setChild(event); - eventRepository.save(parentEvent); - } - - public void createFromPaper(Paper newPaper) { - createFromObject(newPaper, Collections.emptyList(), false, "статьи"); - } - - public void createFromObject(EventSource eventSource, List events, Boolean addCurrentUser, String suffix) { - List timelines = timelineService.findAll(); - Timeline timeline = timelines.isEmpty() ? new Timeline() : timelines.get(0); - - timeline.getEvents().removeAll(events); + public void createFromObject(EventSource eventSource) { + List newEvents = new ArrayList<>(); for (Deadline deadline : eventSource.getDeadlines() .stream() .filter(d -> d.getDate().after(new Date()) || DateUtils.isSameDay(d.getDate(), new Date())) .collect(Collectors.toList())) { Event newEvent = new Event(); - newEvent.setTitle("Дедлайн " + suffix); + newEvent.setTitle("Дедлайн " + eventSource.getSuffix()); newEvent.setStatus(Event.EventStatus.NEW); newEvent.setExecuteDate(deadline.getDate()); newEvent.setCreateDate(new Date()); newEvent.setUpdateDate(new Date()); - newEvent.setDescription("Дедлайн '" + deadline.getDescription() + "' " + suffix + " '" + newEvent.setDescription("Дедлайн '" + + deadline.getDescription() + + "' " + eventSource.getSuffix() + " '" + eventSource.getTitle() + "'"); - if (addCurrentUser) { - newEvent.getRecipients().add(userService.getCurrentUser()); - } + newEvent.getRecipients().addAll(eventSource.getRecipients()); newEvent.setRecipients(eventSource.getRecipients()); - eventSource.addObjectToEvent(newEvent); - timeline.getEvents().add(eventRepository.save(newEvent)); + newEvents.add(eventRepository.save(newEvent)); } - timelineService.save(timeline); + eventRepository.saveAll(newEvents); } - public void updatePaperDeadlines(Paper paper) { - List foundEvents = eventRepository.findAllByPaper(paper); - eventRepository.deleteAll(foundEvents); - createFromObject(paper, foundEvents, false, "статьи"); + + private PageableItems createPageable(Page page) { + return convertPageable(new PageableItems<>(page.getTotalElements(), page.getContent()), EventDto::new); } - public List findByCurrentDate() { - return eventRepository.findByCurrentDate(); - } + public void deleteByObject(EventSource eventSource) { - private List findAllFuture() { - return eventRepository.findAllFuture(); - } - public List findAllFutureDto() { - return convert(findAllFuture(), EventDto::new); - } - - public void updateConferenceDeadlines(Conference conference) { - eventRepository.deleteAll(eventRepository.findAllByConference(conference)); - createFromObject(conference, Collections.emptyList(), false, "конференции"); - } - - public void updateGrantDeadlines(Grant grant) { - eventRepository.deleteAll(eventRepository.findAllByGrant(grant)); - createFromObject(grant, Collections.emptyList(), false, "гранта"); - } - - public void updateProjectDeadlines(Project project) { - eventRepository.deleteAll(eventRepository.findAllByProject(project)); - createFromObject(project, Collections.emptyList(), false, "проекта"); - } - - public void removeConferencesEvent(Conference conference) { - List eventList = eventRepository.findAllByConference(conference); - eventList.forEach(event -> eventRepository.deleteById(event.getId())); - } - - public void updateTaskDeadlines(Task task) { - eventRepository.deleteAll(eventRepository.findAllByTask(task)); - createFromObject(task, Collections.emptyList(), true, "задачи"); } } \ No newline at end of file diff --git a/src/main/java/ru/ulstu/activity/timeline/service/TimelineService.java b/src/main/java/ru/ulstu/activity/timeline/service/TimelineService.java deleted file mode 100644 index e84f314..0000000 --- a/src/main/java/ru/ulstu/activity/timeline/service/TimelineService.java +++ /dev/null @@ -1,60 +0,0 @@ -package ru.ulstu.activity.timeline.service; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import ru.ulstu.activity.timeline.model.EventDto; -import ru.ulstu.activity.timeline.model.Timeline; -import ru.ulstu.activity.timeline.model.TimelineDto; -import ru.ulstu.activity.timeline.repository.TimelineRepository; - -import java.util.List; - -import static ru.ulstu.core.util.StreamApiUtils.convert; - -@Service -public class TimelineService { - - private final TimelineRepository timelineRepository; - private final EventService eventService; - - public TimelineService(TimelineRepository timelineRepository, - EventService eventService) { - this.timelineRepository = timelineRepository; - this.eventService = eventService; - } - - public List findAllDto() { - return convert(timelineRepository.findAll(), TimelineDto::new); - } - - public List findAll() { - return timelineRepository.findAll(); - } - - @Transactional - public int create(TimelineDto timelineDto) { - return timelineRepository.save(copyFromDto(new Timeline(), timelineDto)).getId(); - } - - @Transactional - public Timeline save(Timeline timeline) { - return timelineRepository.save(timeline); - } - - private Timeline copyFromDto(Timeline timeline, TimelineDto timelineDto) { - timeline.setEvents(eventService.findByIds(convert(timelineDto.getEvents(), EventDto::getId))); - return timeline; - } - - @Transactional - public Integer update(TimelineDto timelineDto) { - Timeline timeline = timelineRepository.getOne(timelineDto.getId()); - return timelineRepository.save(copyFromDto(timeline, timelineDto)).getId(); - } - - @Transactional - public void delete(Integer timelineId) { - Timeline timeline = timelineRepository.getOne(timelineId); - timelineRepository.delete(timeline); - } -}