Лучшие n исполнителей с максимальной продолжительностью своих сессий и показывают среднее расстояние, пройденное за это время - PullRequest
0 голосов
/ 22 сентября 2018

Я работаю над API отдыха, где я пытаюсь найти n лучших исполнителей во время сеанса.

Это пользователь сущности, который хранит информацию о пользователе

@Entity
@Table(name = "user")
public class User implements Serializable {

    private static final long serialVersionUID = 7401548380514451401L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @Column(name = "name")
    String name;

    @NotNull
    @Email
    @Column(name = "email")
    String email;

    @Column(name = "registration_number")
    String registrationNumber;
// getter and setter
}

Этоэто вторая сущность, которая сохраняет детали сеанса: -

@Entity
@Table(name = "session")
public class Session implements Serializable {

    private static final long serialVersionUID = 0x7E414EAA3DB0C391L;

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    Long id;

    @Column(name = "start_time")
    @NotNull
    String startTime;

    @Column(name = "end_time")
    @NotNull
    String endTime;

    @Column(name = "distance")
    Long distance;

    @JoinColumn(name = "driver_id", referencedColumnName = "id")
    @ManyToOne
    User trainer;

    @JoinColumn(name = "sessionr_id", referencedColumnName = "id")
    @ManyToOne
    User trainee;  //getter and setters

}

Это третья модель, в которой мы сохраняем результат из сеанса и пользовательской сущности

открытый класс TopTrainer {

private String name;

private String email;

private Long totalSessionDurationInSeconds;

private Long maxSessionDurationInSecods;

private Double averageDistance;

/**
 * Constructor for TopTrainer
 * 
 * @param name
 * @param email
 * @param totalSessionDurationInSeconds
 * @param maxSessionDurationInSecods
 * @param averageDistance
 */
public TopTrainer(String name, String email, Long totalSessionDurationInSeconds, Long maxSessionDurationInSecods,
        Double averageDistance) {
    this.setName(name);
    this.setEmail(email);
    this.setAverageDistance(averageDistance);
    this.setMaxSessionDurationInSecods(maxSessionDurationInSecods);
    this.setTotalSessionDurationInSeconds(totalSessionDurationInSeconds);

}

public TopTrainer() {

}

//Getter and Setter}

Это контроллер, который вызывает службу тренера, чтобы получить желаемый результат

@GetMapping(path = "/api/top-trainer")
    public ResponseEntity<List<TopTrainer>> getTopTrainer(@RequestParam(value = "max", defaultValue = "5") Long count,
            @RequestParam(value = "startTime", required = true) @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") LocalDateTime startTime,
            @RequestParam(value = "endTime", required = true) @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") LocalDateTime endTime) {
        //To do

    }

Я застрял в этой точке на долгое время.Где у меня есть список лучших n тренеров между выбранной отметкой времени на основе их среднего сеанса, а также общего времени сеанса и максимального времени сеанса.

Я новичок в JPA (CrudRepository<Session,Long>)и я не могу понять, как извлечь желаемый результат, а также как выполнить агрегацию для объекта.

@RestResource(exported = false)
public interface SessionRepository extends CrudRepository<Session, Long> {

  Optional<List<TopTrainer>> findByStartTimeAfterAndEndTimeBefore(String startTime, String endTime);

}

Может кто-нибудь как] ответить на это.Мы также можем использовать критерии запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...