add paper create strategy
parent
def4f97784
commit
bd78be93ab
@ -0,0 +1,9 @@
|
||||
package ru.ulstu.core.model;
|
||||
|
||||
import ru.ulstu.user.model.User;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface UserContainer {
|
||||
List<User> getUsers();
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package ru.ulstu.strategy.api;
|
||||
|
||||
import ru.ulstu.core.model.UserContainer;
|
||||
import ru.ulstu.user.model.User;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public abstract class EntityCreateStrategy<T extends UserContainer> {
|
||||
protected abstract List<T> getActiveEntities();
|
||||
|
||||
protected abstract void createEntity(User user);
|
||||
|
||||
protected void createDefaultEntityIfNeed(List<User> allUsers, List<? extends UserContainer> entities) {
|
||||
allUsers.forEach(user -> {
|
||||
if (entities
|
||||
.stream()
|
||||
.filter(entity -> entity.getUsers().contains(user))
|
||||
.collect(Collectors.toSet()).isEmpty()) {
|
||||
createEntity(user);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void createEntityIfNeed(List<User> allUsers) {
|
||||
createDefaultEntityIfNeed(allUsers, getActiveEntities());
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package ru.ulstu.strategy.api;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.ulstu.core.util.DateUtils;
|
||||
import ru.ulstu.paper.model.Paper;
|
||||
import ru.ulstu.paper.service.PaperService;
|
||||
import ru.ulstu.user.model.User;
|
||||
import ru.ulstu.user.service.UserService;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class PaperCreateStrategy extends EntityCreateStrategy<Paper> {
|
||||
private static final String DEFAULT_NAME = "Статья создана автоматически";
|
||||
private static final int DEFAULT_DEADLINE_DAYS = 14;
|
||||
private final PaperService paperService;
|
||||
private final UserService userService;
|
||||
|
||||
public PaperCreateStrategy(PaperService paperService,
|
||||
UserService userService) {
|
||||
this.paperService = paperService;
|
||||
this.userService = userService;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Paper> getActiveEntities() {
|
||||
return paperService.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createEntity(User user) {
|
||||
paperService.create(DEFAULT_NAME, user, DateUtils.addDays(new Date(), DEFAULT_DEADLINE_DAYS));
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package ru.ulstu.strategy.api;
|
||||
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.ulstu.user.service.UserService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class StrategyEntityCreateExecutor {
|
||||
private final List<EntityCreateStrategy> entityCreateStrategies;
|
||||
private final UserService userService;
|
||||
|
||||
public StrategyEntityCreateExecutor(List<EntityCreateStrategy> entityCreateStrategies,
|
||||
UserService userService) {
|
||||
this.entityCreateStrategies = entityCreateStrategies;
|
||||
this.userService = userService;
|
||||
}
|
||||
|
||||
|
||||
//@Scheduled(cron = "0 0 8 * * *")
|
||||
@Scheduled(cron = "0 */5 * * * *")
|
||||
public void scheduleExecuteStrategies() {
|
||||
entityCreateStrategies.forEach(strategy -> strategy.createEntityIfNeed(userService.findAll()));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue