refactor submissions to domain.
This commit is contained in:
parent
af3435834f
commit
1ade7ffe66
|
@ -1,8 +1,8 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.controller;
|
||||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.CompoundGymId;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.SubmissionPayload;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dto.SubmissionPayload;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.GymResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.service.GymService;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.service.submission.ExerciseSubmissionService;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.controller;
|
||||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.service.LeaderboardService;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.controller;
|
||||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.service.submission.UserSubmissionService;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.service;
|
||||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.CompoundGymId;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.GymResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.GymRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.submission.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dao.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.Gym;
|
||||
import nl.andrewlalis.gymboard_api.util.PredicateBuilder;
|
||||
import org.slf4j.Logger;
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.service;
|
||||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.CompoundGymId;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.GymRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.ExerciseRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.submission.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dao.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.Gym;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.LeaderboardTimeframe;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.Exercise;
|
||||
|
|
|
@ -2,14 +2,15 @@ package nl.andrewlalis.gymboard_api.domains.api.service.submission;
|
|||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.GymRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.ExerciseRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.submission.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dao.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.*;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.Gym;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.WeightUnit;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.Exercise;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.submission.Submission;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dto.SubmissionPayload;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.model.Submission;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.service.cdn_client.CdnClient;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.service.cdn_client.UploadsClient;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.dao.UserRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.model.User;
|
||||
import nl.andrewlalis.gymboard_api.util.ULID;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.service.submission;
|
||||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.submission.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dao.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.dao.UserRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.model.User;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.service.UserAccessService;
|
||||
|
@ -9,10 +9,8 @@ import nl.andrewlalis.gymboard_api.util.PredicateBuilder;
|
|||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.server.ResponseStatusException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.auth.service;
|
||||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.submission.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dao.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.dao.*;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.model.User;
|
||||
import org.slf4j.Logger;
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.controller;
|
||||
package nl.andrewlalis.gymboard_api.domains.submission.controller;
|
||||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dto.SubmissionResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.VideoProcessingCompletePayload;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.service.cdn_client.UploadsClient;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.service.submission.ExerciseSubmissionService;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.model.User;
|
||||
import org.springframework.http.ResponseEntity;
|
|
@ -1,6 +1,6 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.dao.submission;
|
||||
package nl.andrewlalis.gymboard_api.domains.submission.dao;
|
||||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.submission.Submission;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.model.Submission;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.model.User;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
|
@ -1,4 +1,4 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.dto;
|
||||
package nl.andrewlalis.gymboard_api.domains.submission.dto;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.dto;
|
||||
package nl.andrewlalis.gymboard_api.domains.submission.dto;
|
||||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.submission.Submission;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.ExerciseResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dto.GymSimpleResponse;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.model.Submission;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.dto.UserResponse;
|
||||
import nl.andrewlalis.gymboard_api.util.StandardDateFormatter;
|
||||
|
||||
|
@ -11,7 +13,9 @@ public record SubmissionResponse(
|
|||
ExerciseResponse exercise,
|
||||
UserResponse user,
|
||||
String performedAt,
|
||||
long videoProcessingTaskId,
|
||||
String videoFileId,
|
||||
String thumbnailFileId,
|
||||
double rawWeight,
|
||||
String weightUnit,
|
||||
double metricWeight,
|
||||
|
@ -26,7 +30,9 @@ public record SubmissionResponse(
|
|||
new ExerciseResponse(submission.getExercise()),
|
||||
new UserResponse(submission.getUser()),
|
||||
StandardDateFormatter.format(submission.getPerformedAt()),
|
||||
submission.getVideoProcessingTaskId(),
|
||||
submission.getVideoFileId(),
|
||||
submission.getThumbnailFileId(),
|
||||
submission.getRawWeight().doubleValue(),
|
||||
submission.getWeightUnit().name(),
|
||||
submission.getMetricWeight().doubleValue(),
|
|
@ -1,4 +1,4 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.model.submission;
|
||||
package nl.andrewlalis.gymboard_api.domains.submission.model;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.Exercise;
|
||||
|
@ -48,6 +48,10 @@ public class Submission {
|
|||
@Column(length = 26)
|
||||
private String videoFileId = null;
|
||||
|
||||
/**
|
||||
* The id of the thumbnail file that was generated for this submission.
|
||||
* Similarly to the video file id, it refers to a file managed by the CDN.
|
||||
*/
|
||||
@Column(length = 26)
|
||||
private String thumbnailFileId = null;
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.submission.model;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.Exercise;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.Gym;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.WeightUnit;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.model.User;
|
||||
import org.hibernate.annotations.CreationTimestamp;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* A submission draft is a temporary entity that exists while a user is
|
||||
* preparing their submission. It includes all the data needed to make a
|
||||
* submission, so when the user has finished editing, they can "submit" their
|
||||
* draft and video processing will then begin, and once done, their submission
|
||||
* will be published.
|
||||
* <p>
|
||||
* <strong>This is not yet implemented!</strong>
|
||||
* </p>
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "submission_draft")
|
||||
public class SubmissionDraft {
|
||||
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@CreationTimestamp
|
||||
private LocalDateTime createdAt;
|
||||
|
||||
@ManyToOne(optional = false, fetch = FetchType.LAZY)
|
||||
private User user;
|
||||
|
||||
@ManyToOne(optional = false, fetch = FetchType.LAZY)
|
||||
private Gym gym;
|
||||
|
||||
// All of the following properties are editable while this draft has not yet
|
||||
// been submitted. They will be validated upon submission.
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
private Exercise exercise;
|
||||
|
||||
@Column
|
||||
private LocalDateTime performedAt;
|
||||
|
||||
@Column(precision = 7, scale = 2)
|
||||
private BigDecimal rawWeight;
|
||||
|
||||
@Column @Enumerated(EnumType.STRING)
|
||||
private WeightUnit weightUnit;
|
||||
|
||||
@Column
|
||||
private int reps;
|
||||
|
||||
@Column
|
||||
private long videoProcessingTaskId;
|
||||
|
||||
public SubmissionDraft() {}
|
||||
|
||||
public SubmissionDraft(User user, Gym gym) {
|
||||
this.user = user;
|
||||
this.gym = gym;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public LocalDateTime getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public User getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public Gym getGym() {
|
||||
return gym;
|
||||
}
|
||||
|
||||
public Exercise getExercise() {
|
||||
return exercise;
|
||||
}
|
||||
|
||||
public LocalDateTime getPerformedAt() {
|
||||
return performedAt;
|
||||
}
|
||||
|
||||
public BigDecimal getRawWeight() {
|
||||
return rawWeight;
|
||||
}
|
||||
|
||||
public WeightUnit getWeightUnit() {
|
||||
return weightUnit;
|
||||
}
|
||||
|
||||
public int getReps() {
|
||||
return reps;
|
||||
}
|
||||
|
||||
public long getVideoProcessingTaskId() {
|
||||
return videoProcessingTaskId;
|
||||
}
|
||||
|
||||
public void setExercise(Exercise exercise) {
|
||||
this.exercise = exercise;
|
||||
}
|
||||
|
||||
public void setPerformedAt(LocalDateTime performedAt) {
|
||||
this.performedAt = performedAt;
|
||||
}
|
||||
|
||||
public void setRawWeight(BigDecimal rawWeight) {
|
||||
this.rawWeight = rawWeight;
|
||||
}
|
||||
|
||||
public void setWeightUnit(WeightUnit weightUnit) {
|
||||
this.weightUnit = weightUnit;
|
||||
}
|
||||
|
||||
public void setReps(int reps) {
|
||||
this.reps = reps;
|
||||
}
|
||||
|
||||
public void setVideoProcessingTaskId(long videoProcessingTaskId) {
|
||||
this.videoProcessingTaskId = videoProcessingTaskId;
|
||||
}
|
||||
}
|
|
@ -1,7 +1,8 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.model.submission;
|
||||
package nl.andrewlalis.gymboard_api.domains.submission.model;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.model.User;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.model.Submission;
|
||||
import org.hibernate.annotations.CreationTimestamp;
|
||||
|
||||
import java.time.LocalDateTime;
|
|
@ -1,7 +1,8 @@
|
|||
package nl.andrewlalis.gymboard_api.domains.api.model.submission;
|
||||
package nl.andrewlalis.gymboard_api.domains.submission.model;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.model.User;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.model.Submission;
|
||||
|
||||
@Entity
|
||||
@Table(
|
|
@ -2,11 +2,11 @@ package nl.andrewlalis.gymboard_api.util.sample_data;
|
|||
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.ExerciseRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.GymRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.dao.submission.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.dao.SubmissionRepository;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.Exercise;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.Gym;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.WeightUnit;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.model.submission.Submission;
|
||||
import nl.andrewlalis.gymboard_api.domains.submission.model.Submission;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.service.cdn_client.CdnClient;
|
||||
import nl.andrewlalis.gymboard_api.domains.api.service.cdn_client.UploadsClient;
|
||||
import nl.andrewlalis.gymboard_api.domains.auth.dao.UserRepository;
|
||||
|
|
Loading…
Reference in New Issue