Skip to content

Instantly share code, notes, and snippets.

@y2k
Created April 9, 2020 14:19
Show Gist options
  • Save y2k/c3ee51f99bdcdc6777c84e855fd45ad4 to your computer and use it in GitHub Desktop.
Save y2k/c3ee51f99bdcdc6777c84e855fd45ad4 to your computer and use it in GitHub Desktop.
static class ResultPair {
String response;
List<User> altered;
}
public Response subscriptionConfirmed(Message message, int addDays, String messageText, String userFilter) {
LocalDateTime now = LocalDateTime.now();
List<User> users = findUsers(message.getFrom(), userFilter);
ResultPair result = pureLogic(message, addDays, now, users);
for (User user : result.altered) {
this.users.saveAndFlush(user);
this.messageProvider.sendTxt(user.getChatId(), messageText);
}
return MainMenu
.mainMenu(message.getChatId())
.prepend(new SendMessage(message.getChatId(), result.response));
}
static ResultPair pureLogic(Message message, int addDays, LocalDateTime now, List<User> users) {
var result = new ResultPair();
if (message.getText().equals("Да!")) {
result.altered = users
.stream()
.peek(user -> setEndOfSubscription(addDays, now, user))
.collect(Collectors.toList());
result.response = alteredUsersReport(
result.altered,
"Не нашлось ни одного такого пользователя.",
"Обновлён пользователь {0}.",
"Обновлено пользователей: {0} шт."
);
} else {
result.altered = Collections.emptyList();
result.response = "Охрана, отмена!..";
}
return result;
}
static void setEndOfSubscription(int addDays, LocalDateTime now, User user) {
var sub = user.getSubscription();
sub.setEndOfSubscription(
sub.getEndOfSubscription().isBefore(now)
? now.plusDays(addDays)
: sub.getEndOfSubscribe().plusDays(addDays)
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment