mirror of
https://codeberg.org/jsilveira/br.dev.jsilveira.coresync.git
synced 2026-06-11 18:05:06 +00:00
Implement application services and domain model mutations
- Add state transition and update methods to User, WorkoutDay, WorkoutPlan, and WorkoutExercise domain models - Create service implementations for managing Users, WorkoutPlans, WorkoutDays, WorkoutExercises, and Sessions - Add Spring Configuration classes (UserConfig, WorkoutConfig, SessionConfig) to register service beans - Fix calculation of total time in WorkoutDay and add estimatedTime logic to WorkoutExercise
This commit is contained in:
parent
6f7a44e87b
commit
e52a07dd9a
24 changed files with 652 additions and 4 deletions
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.session.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.session.application.port.in.UpdateUserWorkoutSessionCompletedAtUseCase
|
||||
import br.dev.jsilveira.coresync.session.application.port.out.LoadUserWorkoutSessionPort
|
||||
import br.dev.jsilveira.coresync.session.application.port.out.SaveUserWorkoutSessionPort
|
||||
import br.dev.jsilveira.coresync.session.domain.model.UserWorkoutSession
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class UpdateUserWorkoutSessionCompletedAtService implements UpdateUserWorkoutSessionCompletedAtUseCase {
|
||||
private final LoadUserWorkoutSessionPort loadUserWorkoutSessionPort
|
||||
private final SaveUserWorkoutSessionPort saveUserWorkoutSessionPort
|
||||
|
||||
UpdateUserWorkoutSessionCompletedAtService(LoadUserWorkoutSessionPort loadUserWorkoutSessionPort, SaveUserWorkoutSessionPort saveUserWorkoutSessionPort) {
|
||||
this.loadUserWorkoutSessionPort = loadUserWorkoutSessionPort
|
||||
this.saveUserWorkoutSessionPort = saveUserWorkoutSessionPort
|
||||
}
|
||||
|
||||
@Override
|
||||
UserWorkoutSession execute(UUID id) {
|
||||
def session = loadUserWorkoutSessionPort.load(id)
|
||||
def finishedSession = session.finish()
|
||||
saveUserWorkoutSessionPort.save(finishedSession)
|
||||
return finishedSession
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package br.dev.jsilveira.coresync.session.config
|
||||
|
||||
import br.dev.jsilveira.coresync.session.application.port.out.LoadUserWorkoutSessionPort
|
||||
import br.dev.jsilveira.coresync.session.application.port.out.SaveUserWorkoutSessionPort
|
||||
import br.dev.jsilveira.coresync.session.application.service.UpdateUserWorkoutSessionCompletedAtService
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
|
||||
@Configuration
|
||||
class SessionConfig {
|
||||
|
||||
@Bean
|
||||
UpdateUserWorkoutSessionCompletedAtService updateUserWorkoutSessionCompletedAtService(
|
||||
LoadUserWorkoutSessionPort loadUserWorkoutSessionPort,
|
||||
SaveUserWorkoutSessionPort saveUserWorkoutSessionPort
|
||||
) {
|
||||
return new UpdateUserWorkoutSessionCompletedAtService(loadUserWorkoutSessionPort, saveUserWorkoutSessionPort)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package br.dev.jsilveira.coresync.user.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.user.application.port.in.CreateUserUseCase
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.SaveUserPort
|
||||
import br.dev.jsilveira.coresync.user.domain.model.User
|
||||
|
||||
class CreateUserService implements CreateUserUseCase{
|
||||
private final SaveUserPort saveUserPort
|
||||
|
||||
CreateUserService(SaveUserPort saveUserPort){
|
||||
this.saveUserPort =saveUserPort
|
||||
}
|
||||
|
||||
@Override
|
||||
User execute(String name, String email) {
|
||||
def user = new User(UUID.randomUUID(), name, email)
|
||||
saveUserPort.save(user)
|
||||
return user
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.user.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.user.application.port.in.DisableUserEmailVerifiedUseCase
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.LoadUserPort
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.SaveUserPort
|
||||
import br.dev.jsilveira.coresync.user.domain.model.User
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class DisableUserEmailVerifiedService implements DisableUserEmailVerifiedUseCase {
|
||||
private final LoadUserPort loadUserPort
|
||||
private final SaveUserPort saveUserPort
|
||||
|
||||
DisableUserEmailVerifiedService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
this.loadUserPort = loadUserPort
|
||||
this.saveUserPort = saveUserPort
|
||||
}
|
||||
|
||||
@Override
|
||||
User execute(UUID id) {
|
||||
def user = loadUserPort.load(id)
|
||||
def unverifiedUser = user.unverifyEmail()
|
||||
saveUserPort.save(unverifiedUser)
|
||||
return unverifiedUser
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.user.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.user.application.port.in.DisableUserUseCase
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.LoadUserPort
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.SaveUserPort
|
||||
import br.dev.jsilveira.coresync.user.domain.model.User
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class DisableUserService implements DisableUserUseCase {
|
||||
private final LoadUserPort loadUserPort
|
||||
private final SaveUserPort saveUserPort
|
||||
|
||||
DisableUserService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
this.loadUserPort = loadUserPort
|
||||
this.saveUserPort = saveUserPort
|
||||
}
|
||||
|
||||
@Override
|
||||
User execute(UUID id) {
|
||||
def user = loadUserPort.load(id)
|
||||
def deactivatedUser = user.deactivate()
|
||||
saveUserPort.save(deactivatedUser)
|
||||
return deactivatedUser
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.user.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.user.application.port.in.EnableUserEmailVerifiedUseCase
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.LoadUserPort
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.SaveUserPort
|
||||
import br.dev.jsilveira.coresync.user.domain.model.User
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class EnableUserEmailVerifiedService implements EnableUserEmailVerifiedUseCase {
|
||||
private final LoadUserPort loadUserPort
|
||||
private final SaveUserPort saveUserPort
|
||||
|
||||
EnableUserEmailVerifiedService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
this.loadUserPort = loadUserPort
|
||||
this.saveUserPort = saveUserPort
|
||||
}
|
||||
|
||||
@Override
|
||||
User execute(UUID id) {
|
||||
def user = loadUserPort.load(id)
|
||||
def verifiedUser = user.verifyEmail()
|
||||
saveUserPort.save(verifiedUser)
|
||||
return verifiedUser
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.user.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.user.application.port.in.EnableUserUseCase
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.LoadUserPort
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.SaveUserPort
|
||||
import br.dev.jsilveira.coresync.user.domain.model.User
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class EnableUserService implements EnableUserUseCase {
|
||||
private final LoadUserPort loadUserPort
|
||||
private final SaveUserPort saveUserPort
|
||||
|
||||
EnableUserService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
this.loadUserPort = loadUserPort
|
||||
this.saveUserPort = saveUserPort
|
||||
}
|
||||
|
||||
@Override
|
||||
User execute(UUID id) {
|
||||
def user = loadUserPort.load(id)
|
||||
def activatedUser = user.activate()
|
||||
saveUserPort.save(activatedUser)
|
||||
return activatedUser
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.user.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.user.application.port.in.UpdateUserEmailUseCase
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.LoadUserPort
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.SaveUserPort
|
||||
import br.dev.jsilveira.coresync.user.domain.model.User
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class UpdateUserEmailService implements UpdateUserEmailUseCase {
|
||||
private final LoadUserPort loadUserPort
|
||||
private final SaveUserPort saveUserPort
|
||||
|
||||
UpdateUserEmailService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
this.loadUserPort = loadUserPort
|
||||
this.saveUserPort = saveUserPort
|
||||
}
|
||||
|
||||
@Override
|
||||
User execute(UUID id, String email) {
|
||||
def user = loadUserPort.load(id)
|
||||
def updatedUser = user.withEmail(email)
|
||||
saveUserPort.save(updatedUser)
|
||||
return updatedUser
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.user.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.user.application.port.in.UpdateUserImageUseCase
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.LoadUserPort
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.SaveUserPort
|
||||
import br.dev.jsilveira.coresync.user.domain.model.User
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class UpdateUserImageService implements UpdateUserImageUseCase {
|
||||
private final LoadUserPort loadUserPort
|
||||
private final SaveUserPort saveUserPort
|
||||
|
||||
UpdateUserImageService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
this.loadUserPort = loadUserPort
|
||||
this.saveUserPort = saveUserPort
|
||||
}
|
||||
|
||||
@Override
|
||||
User execute(UUID id, String image) {
|
||||
def user = loadUserPort.load(id)
|
||||
def updatedUser = user.withImage(image)
|
||||
saveUserPort.save(updatedUser)
|
||||
return updatedUser
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.user.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.user.application.port.in.UpdateUserNameUseCase
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.LoadUserPort
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.SaveUserPort
|
||||
import br.dev.jsilveira.coresync.user.domain.model.User
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class UpdateUserNameService implements UpdateUserNameUseCase {
|
||||
private final LoadUserPort loadUserPort
|
||||
private final SaveUserPort saveUserPort
|
||||
|
||||
UpdateUserNameService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
this.loadUserPort = loadUserPort
|
||||
this.saveUserPort = saveUserPort
|
||||
}
|
||||
|
||||
@Override
|
||||
User execute(UUID id, String name) {
|
||||
def user = loadUserPort.load(id)
|
||||
def updatedUser = user.withName(name)
|
||||
saveUserPort.save(updatedUser)
|
||||
return updatedUser
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
package br.dev.jsilveira.coresync.user.config
|
||||
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.LoadUserPort
|
||||
import br.dev.jsilveira.coresync.user.application.port.out.SaveUserPort
|
||||
import br.dev.jsilveira.coresync.user.application.service.CreateUserService
|
||||
import br.dev.jsilveira.coresync.user.application.service.DisableUserEmailVerifiedService
|
||||
import br.dev.jsilveira.coresync.user.application.service.DisableUserService
|
||||
import br.dev.jsilveira.coresync.user.application.service.EnableUserEmailVerifiedService
|
||||
import br.dev.jsilveira.coresync.user.application.service.EnableUserService
|
||||
import br.dev.jsilveira.coresync.user.application.service.UpdateUserEmailService
|
||||
import br.dev.jsilveira.coresync.user.application.service.UpdateUserImageService
|
||||
import br.dev.jsilveira.coresync.user.application.service.UpdateUserNameService
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
|
||||
@Configuration
|
||||
class UserConfig {
|
||||
|
||||
@Bean
|
||||
CreateUserService createUserService(SaveUserPort saveUserPort) {
|
||||
return new CreateUserService(saveUserPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
EnableUserService enableUserService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
return new EnableUserService(loadUserPort, saveUserPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
DisableUserService disableUserService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
return new DisableUserService(loadUserPort, saveUserPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
EnableUserEmailVerifiedService enableUserEmailVerifiedService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
return new EnableUserEmailVerifiedService(loadUserPort, saveUserPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
DisableUserEmailVerifiedService disableUserEmailVerifiedService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
return new DisableUserEmailVerifiedService(loadUserPort, saveUserPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
UpdateUserNameService updateUserNameService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
return new UpdateUserNameService(loadUserPort, saveUserPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
UpdateUserEmailService updateUserEmailService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
return new UpdateUserEmailService(loadUserPort, saveUserPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
UpdateUserImageService updateUserImageService(LoadUserPort loadUserPort, SaveUserPort saveUserPort) {
|
||||
return new UpdateUserImageService(loadUserPort, saveUserPort)
|
||||
}
|
||||
}
|
||||
|
|
@ -21,11 +21,45 @@ record User(
|
|||
}
|
||||
|
||||
if (!name?.trim()) {
|
||||
throw new UserException("O campo de nome não estar vazio")
|
||||
throw new UserException("O campo de nome não pode estar vazio")
|
||||
}
|
||||
|
||||
if(!email?.trim()) {
|
||||
if (!email?.trim()) {
|
||||
throw new UserException("O campo email não pode estar vazio")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
User activate() {
|
||||
if (isActive) throw new UserException("O usuário já está ativo")
|
||||
return new User(id, name, email, emailVerified, image, createdAt, LocalDateTime.now(), Boolean.TRUE)
|
||||
}
|
||||
|
||||
User deactivate() {
|
||||
if (!isActive) throw new UserException("O usuário já está inativo")
|
||||
return new User(id, name, email, emailVerified, image, createdAt, LocalDateTime.now(), Boolean.FALSE)
|
||||
}
|
||||
|
||||
User verifyEmail() {
|
||||
if (emailVerified) throw new UserException("O email já foi verificado")
|
||||
return new User(id, name, email, Boolean.TRUE, image, createdAt, LocalDateTime.now(), isActive)
|
||||
}
|
||||
|
||||
User unverifyEmail() {
|
||||
if (!emailVerified) throw new UserException("O email já não está verificado")
|
||||
return new User(id, name, email, Boolean.FALSE, image, createdAt, LocalDateTime.now(), isActive)
|
||||
}
|
||||
|
||||
User withName(String newName) {
|
||||
if (!newName?.trim()) throw new UserException("O campo de nome não pode estar vazio")
|
||||
return new User(id, newName, email, emailVerified, image, createdAt, LocalDateTime.now(), isActive)
|
||||
}
|
||||
|
||||
User withEmail(String newEmail) {
|
||||
if (!newEmail?.trim()) throw new UserException("O campo email não pode estar vazio")
|
||||
return new User(id, name, newEmail, emailVerified, image, createdAt, LocalDateTime.now(), isActive)
|
||||
}
|
||||
|
||||
User withImage(String newImage) {
|
||||
return new User(id, name, email, emailVerified, newImage, createdAt, LocalDateTime.now(), isActive)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
package br.dev.jsilveira.coresync.workout.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.workout.application.port.in.CreateWorkoutPlanUseCase
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutPlanPort
|
||||
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutPlan
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class CreateWorkoutPlanService implements CreateWorkoutPlanUseCase {
|
||||
private final SaveWorkoutPlanPort saveWorkoutPlanPort
|
||||
|
||||
CreateWorkoutPlanService(SaveWorkoutPlanPort saveWorkoutPlanPort) {
|
||||
this.saveWorkoutPlanPort = saveWorkoutPlanPort
|
||||
}
|
||||
|
||||
@Override
|
||||
WorkoutPlan execute(String name, UUID userId) {
|
||||
def workoutPlan = new WorkoutPlan(UUID.randomUUID(), name, userId)
|
||||
saveWorkoutPlanPort.save(workoutPlan)
|
||||
return workoutPlan
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.workout.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.workout.application.port.in.DisableWorkoutDayRestUseCase
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.LoadWorkoutDayPort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutDayPort
|
||||
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutDay
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class DisableWorkoutDayRestService implements DisableWorkoutDayRestUseCase {
|
||||
private final LoadWorkoutDayPort loadWorkoutDayPort
|
||||
private final SaveWorkoutDayPort saveWorkoutDayPort
|
||||
|
||||
DisableWorkoutDayRestService(LoadWorkoutDayPort loadWorkoutDayPort, SaveWorkoutDayPort saveWorkoutDayPort) {
|
||||
this.loadWorkoutDayPort = loadWorkoutDayPort
|
||||
this.saveWorkoutDayPort = saveWorkoutDayPort
|
||||
}
|
||||
|
||||
@Override
|
||||
WorkoutDay execute(UUID id) {
|
||||
def workoutDay = loadWorkoutDayPort.load(id)
|
||||
def nonRestDay = workoutDay.disableRest()
|
||||
saveWorkoutDayPort.save(nonRestDay)
|
||||
return nonRestDay
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.workout.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.workout.application.port.in.DisableWorkoutPlanUseCase
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.LoadWorkoutPlanPort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutPlanPort
|
||||
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutPlan
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class DisableWorkoutPlanService implements DisableWorkoutPlanUseCase {
|
||||
private final LoadWorkoutPlanPort loadWorkoutPlanPort
|
||||
private final SaveWorkoutPlanPort saveWorkoutPlanPort
|
||||
|
||||
DisableWorkoutPlanService(LoadWorkoutPlanPort loadWorkoutPlanPort, SaveWorkoutPlanPort saveWorkoutPlanPort) {
|
||||
this.loadWorkoutPlanPort = loadWorkoutPlanPort
|
||||
this.saveWorkoutPlanPort = saveWorkoutPlanPort
|
||||
}
|
||||
|
||||
@Override
|
||||
WorkoutPlan execute(UUID id) {
|
||||
def workoutPlan = loadWorkoutPlanPort.load(id)
|
||||
def deactivatedPlan = workoutPlan.deactivate()
|
||||
saveWorkoutPlanPort.save(deactivatedPlan)
|
||||
return deactivatedPlan
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.workout.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.workout.application.port.in.EnableWorkoutDayRestUseCase
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.LoadWorkoutDayPort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutDayPort
|
||||
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutDay
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class EnableWorkoutDayRestService implements EnableWorkoutDayRestUseCase {
|
||||
private final LoadWorkoutDayPort loadWorkoutDayPort
|
||||
private final SaveWorkoutDayPort saveWorkoutDayPort
|
||||
|
||||
EnableWorkoutDayRestService(LoadWorkoutDayPort loadWorkoutDayPort, SaveWorkoutDayPort saveWorkoutDayPort) {
|
||||
this.loadWorkoutDayPort = loadWorkoutDayPort
|
||||
this.saveWorkoutDayPort = saveWorkoutDayPort
|
||||
}
|
||||
|
||||
@Override
|
||||
WorkoutDay execute(UUID id) {
|
||||
def workoutDay = loadWorkoutDayPort.load(id)
|
||||
def restDay = workoutDay.enableRest()
|
||||
saveWorkoutDayPort.save(restDay)
|
||||
return restDay
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.workout.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.workout.application.port.in.EnableWorkoutPlanUseCase
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.LoadWorkoutPlanPort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutPlanPort
|
||||
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutPlan
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class EnableWorkoutPlanService implements EnableWorkoutPlanUseCase {
|
||||
private final LoadWorkoutPlanPort loadWorkoutPlanPort
|
||||
private final SaveWorkoutPlanPort saveWorkoutPlanPort
|
||||
|
||||
EnableWorkoutPlanService(LoadWorkoutPlanPort loadWorkoutPlanPort, SaveWorkoutPlanPort saveWorkoutPlanPort) {
|
||||
this.loadWorkoutPlanPort = loadWorkoutPlanPort
|
||||
this.saveWorkoutPlanPort = saveWorkoutPlanPort
|
||||
}
|
||||
|
||||
@Override
|
||||
WorkoutPlan execute(UUID id) {
|
||||
def workoutPlan = loadWorkoutPlanPort.load(id)
|
||||
def activatedPlan = workoutPlan.activate()
|
||||
saveWorkoutPlanPort.save(activatedPlan)
|
||||
return activatedPlan
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.workout.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.workout.application.port.in.UpdateWorkoutDayNameUseCase
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.LoadWorkoutDayPort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutDayPort
|
||||
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutDay
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class UpdateWorkoutDayNameService implements UpdateWorkoutDayNameUseCase {
|
||||
private final LoadWorkoutDayPort loadWorkoutDayPort
|
||||
private final SaveWorkoutDayPort saveWorkoutDayPort
|
||||
|
||||
UpdateWorkoutDayNameService(LoadWorkoutDayPort loadWorkoutDayPort, SaveWorkoutDayPort saveWorkoutDayPort) {
|
||||
this.loadWorkoutDayPort = loadWorkoutDayPort
|
||||
this.saveWorkoutDayPort = saveWorkoutDayPort
|
||||
}
|
||||
|
||||
@Override
|
||||
WorkoutDay execute(UUID id, String name) {
|
||||
def workoutDay = loadWorkoutDayPort.load(id)
|
||||
def updatedDay = workoutDay.withName(name)
|
||||
saveWorkoutDayPort.save(updatedDay)
|
||||
return updatedDay
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.workout.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.workout.application.port.in.UpdateWorkoutExerciseNameUseCase
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.LoadWorkoutExercisePort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutExercisePort
|
||||
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutExercise
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class UpdateWorkoutExerciseNameService implements UpdateWorkoutExerciseNameUseCase {
|
||||
private final LoadWorkoutExercisePort loadWorkoutExercisePort
|
||||
private final SaveWorkoutExercisePort saveWorkoutExercisePort
|
||||
|
||||
UpdateWorkoutExerciseNameService(LoadWorkoutExercisePort loadWorkoutExercisePort, SaveWorkoutExercisePort saveWorkoutExercisePort) {
|
||||
this.loadWorkoutExercisePort = loadWorkoutExercisePort
|
||||
this.saveWorkoutExercisePort = saveWorkoutExercisePort
|
||||
}
|
||||
|
||||
@Override
|
||||
WorkoutExercise execute(UUID id, String name) {
|
||||
def workoutExercise = loadWorkoutExercisePort.load(id)
|
||||
def updatedExercise = workoutExercise.withName(name)
|
||||
saveWorkoutExercisePort.save(updatedExercise)
|
||||
return updatedExercise
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package br.dev.jsilveira.coresync.workout.application.service
|
||||
|
||||
import br.dev.jsilveira.coresync.workout.application.port.in.UpdateWorkoutPlanNameUseCase
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.LoadWorkoutPlanPort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutPlanPort
|
||||
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutPlan
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
class UpdateWorkoutPlanNameService implements UpdateWorkoutPlanNameUseCase {
|
||||
private final LoadWorkoutPlanPort loadWorkoutPlanPort
|
||||
private final SaveWorkoutPlanPort saveWorkoutPlanPort
|
||||
|
||||
UpdateWorkoutPlanNameService(LoadWorkoutPlanPort loadWorkoutPlanPort, SaveWorkoutPlanPort saveWorkoutPlanPort) {
|
||||
this.loadWorkoutPlanPort = loadWorkoutPlanPort
|
||||
this.saveWorkoutPlanPort = saveWorkoutPlanPort
|
||||
}
|
||||
|
||||
@Override
|
||||
WorkoutPlan execute(UUID id, String name) {
|
||||
def workoutPlan = loadWorkoutPlanPort.load(id)
|
||||
def updatedPlan = workoutPlan.withName(name)
|
||||
saveWorkoutPlanPort.save(updatedPlan)
|
||||
return updatedPlan
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
package br.dev.jsilveira.coresync.workout.config
|
||||
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.LoadWorkoutDayPort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.LoadWorkoutExercisePort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.LoadWorkoutPlanPort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutDayPort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutExercisePort
|
||||
import br.dev.jsilveira.coresync.workout.application.port.out.SaveWorkoutPlanPort
|
||||
import br.dev.jsilveira.coresync.workout.application.service.CreateWorkoutPlanService
|
||||
import br.dev.jsilveira.coresync.workout.application.service.DisableWorkoutDayRestService
|
||||
import br.dev.jsilveira.coresync.workout.application.service.DisableWorkoutPlanService
|
||||
import br.dev.jsilveira.coresync.workout.application.service.EnableWorkoutDayRestService
|
||||
import br.dev.jsilveira.coresync.workout.application.service.EnableWorkoutPlanService
|
||||
import br.dev.jsilveira.coresync.workout.application.service.UpdateWorkoutDayNameService
|
||||
import br.dev.jsilveira.coresync.workout.application.service.UpdateWorkoutExerciseNameService
|
||||
import br.dev.jsilveira.coresync.workout.application.service.UpdateWorkoutPlanNameService
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
|
||||
@Configuration
|
||||
class WorkoutConfig {
|
||||
|
||||
@Bean
|
||||
CreateWorkoutPlanService createWorkoutPlanService(SaveWorkoutPlanPort saveWorkoutPlanPort) {
|
||||
return new CreateWorkoutPlanService(saveWorkoutPlanPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
EnableWorkoutPlanService enableWorkoutPlanService(LoadWorkoutPlanPort loadWorkoutPlanPort, SaveWorkoutPlanPort saveWorkoutPlanPort) {
|
||||
return new EnableWorkoutPlanService(loadWorkoutPlanPort, saveWorkoutPlanPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
DisableWorkoutPlanService disableWorkoutPlanService(LoadWorkoutPlanPort loadWorkoutPlanPort, SaveWorkoutPlanPort saveWorkoutPlanPort) {
|
||||
return new DisableWorkoutPlanService(loadWorkoutPlanPort, saveWorkoutPlanPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
UpdateWorkoutPlanNameService updateWorkoutPlanNameService(LoadWorkoutPlanPort loadWorkoutPlanPort, SaveWorkoutPlanPort saveWorkoutPlanPort) {
|
||||
return new UpdateWorkoutPlanNameService(loadWorkoutPlanPort, saveWorkoutPlanPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
UpdateWorkoutDayNameService updateWorkoutDayNameService(LoadWorkoutDayPort loadWorkoutDayPort, SaveWorkoutDayPort saveWorkoutDayPort) {
|
||||
return new UpdateWorkoutDayNameService(loadWorkoutDayPort, saveWorkoutDayPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
EnableWorkoutDayRestService enableWorkoutDayRestService(LoadWorkoutDayPort loadWorkoutDayPort, SaveWorkoutDayPort saveWorkoutDayPort) {
|
||||
return new EnableWorkoutDayRestService(loadWorkoutDayPort, saveWorkoutDayPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
DisableWorkoutDayRestService disableWorkoutDayRestService(LoadWorkoutDayPort loadWorkoutDayPort, SaveWorkoutDayPort saveWorkoutDayPort) {
|
||||
return new DisableWorkoutDayRestService(loadWorkoutDayPort, saveWorkoutDayPort)
|
||||
}
|
||||
|
||||
@Bean
|
||||
UpdateWorkoutExerciseNameService updateWorkoutExerciseNameService(LoadWorkoutExercisePort loadWorkoutExercisePort, SaveWorkoutExercisePort saveWorkoutExercisePort) {
|
||||
return new UpdateWorkoutExerciseNameService(loadWorkoutExercisePort, saveWorkoutExercisePort)
|
||||
}
|
||||
}
|
||||
|
|
@ -49,6 +49,25 @@ record WorkoutDay(
|
|||
}
|
||||
|
||||
int calculateTotalTime() {
|
||||
return workoutExercises.sum { it.estimatedTime() } ?: 0 as int
|
||||
if (workoutExercises.isEmpty()) return 0
|
||||
return (int) workoutExercises.sum { it.estimatedTime() }
|
||||
}
|
||||
|
||||
WorkoutDay enableRest() {
|
||||
if (isRest) throw new WorkoutDayException("O dia já está marcado como descanso")
|
||||
if (workoutExercises && !workoutExercises.isEmpty()) {
|
||||
throw new WorkoutDayException("Não é possível marcar como descanso um dia com exercícios")
|
||||
}
|
||||
return new WorkoutDay(id, name, workoutPlanId, Boolean.TRUE, weekDay, estimatedDurationInSeconds, createdAt, LocalDateTime.now(), workoutExercises)
|
||||
}
|
||||
|
||||
WorkoutDay disableRest() {
|
||||
if (!isRest) throw new WorkoutDayException("O dia já não está marcado como descanso")
|
||||
return new WorkoutDay(id, name, workoutPlanId, Boolean.FALSE, weekDay, estimatedDurationInSeconds, createdAt, LocalDateTime.now(), workoutExercises)
|
||||
}
|
||||
|
||||
WorkoutDay withName(String newName) {
|
||||
if (!newName?.trim()) throw new WorkoutDayException("O campo de nome não pode estar vazio")
|
||||
return new WorkoutDay(id, newName, workoutPlanId, isRest, weekDay, estimatedDurationInSeconds, createdAt, LocalDateTime.now(), workoutExercises)
|
||||
}
|
||||
}
|
||||
|
|
@ -41,4 +41,13 @@ record WorkoutExercise(
|
|||
throw new WorkoutExerciseException("O campo de identificação do dia de treino não pode ser nulo")
|
||||
}
|
||||
}
|
||||
|
||||
int estimatedTime() {
|
||||
return (sets * reps * 3) + ((sets - 1) * restTimeInSeconds)
|
||||
}
|
||||
|
||||
WorkoutExercise withName(String newName) {
|
||||
if (!newName?.trim()) throw new WorkoutExerciseException("O campo de nome não pode estar vazio")
|
||||
return new WorkoutExercise(id, order, newName, sets, reps, restTimeInSeconds, workoutDayId, createdAt, LocalDateTime.now())
|
||||
}
|
||||
}
|
||||
|
|
@ -32,4 +32,19 @@ record WorkoutPlan(
|
|||
}
|
||||
workoutDays = workoutDays.asImmutable()
|
||||
}
|
||||
|
||||
WorkoutPlan activate() {
|
||||
if (isActive) throw new WorkoutPlanException("O plano de treino já está ativo")
|
||||
return new WorkoutPlan(id, name, userId, Boolean.TRUE, createdAt, LocalDateTime.now(), workoutDays)
|
||||
}
|
||||
|
||||
WorkoutPlan deactivate() {
|
||||
if (!isActive) throw new WorkoutPlanException("O plano de treino já está inativo")
|
||||
return new WorkoutPlan(id, name, userId, Boolean.FALSE, createdAt, LocalDateTime.now(), workoutDays)
|
||||
}
|
||||
|
||||
WorkoutPlan withName(String newName) {
|
||||
if (!newName?.trim()) throw new WorkoutPlanException("O campo de nome não pode estar vazio")
|
||||
return new WorkoutPlan(id, newName, userId, isActive, createdAt, LocalDateTime.now(), workoutDays)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue