Untitled

 avatar
unknown
plain_text
9 months ago
2.3 kB
1
Indexable
package com.capgemini.wsb.fitnesstracker.notification;

import com.capgemini.wsb.fitnesstracker.mail.api.EmailDto;
import com.capgemini.wsb.fitnesstracker.mail.api.EmailSender;
import com.capgemini.wsb.fitnesstracker.mail.internal.EmailService;
import com.capgemini.wsb.fitnesstracker.training.api.Training;
import com.capgemini.wsb.fitnesstracker.training.api.TrainingProvider;
import com.capgemini.wsb.fitnesstracker.user.api.User;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Component
@EnableScheduling
public class TrainingRaportGenerator {

    public TrainingRaportGenerator(TrainingProvider trainingProvider, EmailSender emailSender) {
        this.trainingProvider = trainingProvider;
        this.emailSender = emailSender;
    }
    private final TrainingProvider trainingProvider;
    private final EmailSender emailSender;
    @Scheduled(fixedDelay = 5000)
    public void generateTrainingRaport() {
        List<Training> trainingList = trainingProvider.getAllTrainings();

        trainingList.stream()
                .collect(Collectors.groupingBy(Training::getUser))
                .forEach((user, trainings) -> {
                    int numberOfTrainings = trainings.size();
                    String activType = getActivityType(trainings);
                    String result = user.getFirstName() + " " + user.getLastName() + "\n" + "Your weekly dose of trainings: " + numberOfTrainings + " " + activType + "\n";
                    System.out.println(result);
                    try {
                        emailSender.send(new EmailDto(user.getEmail(), "Weekly raport", result));
                    } catch (Exception e) {
                        System.err.println("Error sending email to " + user.getEmail());
                    }
                });
    }

    private String getActivityType(List<Training> trainings) {
        if (trainings.isEmpty()) {
            return "";  // Return empty string if no activity
        }
        return trainings.get(0).getActivityType().name();
    }
}
Editor is loading...
Leave a Comment