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