Refactor architecture into user, workout, and session domains

- Move domain models and exceptions into their corresponding modules
- Fix typos in interface names, renaming 'UserCase' to 'UseCase'
- Reorganize input and output ports for each specific domain
- Create dedicated web controllers and Mongo persistence adapters for the new modules
- Clean up unused application ports and legacy adapters
This commit is contained in:
João P.A Silveira 2026-05-31 18:30:48 -03:00
parent d97cdf49c2
commit 6f7a44e87b
83 changed files with 224 additions and 291 deletions

View file

@ -1,4 +0,0 @@
package br.dev.jsilveira.coresync.adapter.in.web
class TrainingController {
}

View file

@ -1,4 +0,0 @@
package br.dev.jsilveira.coresync.adapter.out.persistence
class MongoTrainingAdapter {
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.User
interface CreateUserUseCase {
User execute(String name, String email)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutPlan
interface CreateWorkoutPlanUserCase {
WorkoutPlan(String name, UUID userId)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.User
interface DisableUserEmailVerifiedUseCase {
User execute(UUID id)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.User
interface DisableUserUseCase {
User execute(UUID id)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutDay
interface DisableWorkoutDayRestUserCase {
WorkoutDay execute(UUID id)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutPlan
interface DisableWorkoutPlanUserCase {
WorkoutPlan execute(UUID id)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.User
interface EnableUserEmailVerifiedUseCase {
User execute(UUID id)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.User
interface EnableUserUseCase {
User execute(UUID id)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutDay
interface EnableWorkoutDayRestUserCase {
WorkoutDay execute(UUID id)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutPlan
interface EnableWorkoutPlanUserCase {
WorkoutPlan execute(UUID id)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.User
interface UpdateUserEmailUseCase {
User execute(UUID id, String email)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.User
interface UpdateUserImageUseCase {
User execute(UUID id, String image)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.User
interface UpdateUserNameUseCase {
User execute(UUID id, String name)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.User
interface UpdateUserUpdatedAtUseCase {
User execute(UUID id)
}

View file

@ -1,9 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.UserWorkoutSession
import java.time.LocalDateTime
interface UpdateUserWorkoutSessionCompletedAtUserCase {
UserWorkoutSession execute(UUID id, LocalDateTime completedAt)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutDay
interface UpdateWorkoutDayDurationUserCase {
WorkoutDay execute(UUID id, Integer estimatedDurationInSeconds)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutDay
interface UpdateWorkoutDayNameUserCase {
WorkoutDay execute(UUID id, String name)
}

View file

@ -1,9 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutDay
import java.time.LocalDateTime
interface UpdateWorkoutDayUpdatedAtUserCase {
WorkoutDay execute(UUID id, LocalDateTime updatedAt)
}

View file

@ -1,8 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WeekDay
import br.dev.jsilveira.coresync.domain.model.WorkoutDay
interface UpdateWorkoutDayWeekDayUserCase {
WorkoutDay execute(UUID id, WeekDay weekDay)
}

View file

@ -1,8 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutDay
import br.dev.jsilveira.coresync.domain.model.WorkoutExercise
interface UpdateWorkoutDayWorkoutExercisesUserCase {
WorkoutDay execute(UUID id, List<WorkoutExercise> workoutExercises )
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutExercise
interface UpdateWorkoutExerciseNameUserCase {
WorkoutExercise execute(UUID id, String name)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutExercise
interface UpdateWorkoutExerciseOrderUserCase {
WorkoutExercise execute(UUID id, Integer order)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutExercise
interface UpdateWorkoutExerciseRepsUserCase {
WorkoutExercise execute(UUID id, Integer reps)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutExercise
interface UpdateWorkoutExerciseRestTimeUserCase {
WorkoutExercise execute(UUID id, Integer restTime)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutExercise
interface UpdateWorkoutExerciseSetsUserCase {
WorkoutExercise execute(UUID id, Integer sets)
}

View file

@ -1,9 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutExercise
import java.time.LocalDateTime
interface UpdateWorkoutExerciseUpdatedAtUserCase {
WorkoutExercise execute(UUID id, LocalDateTime updatedAt)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutExercise
interface UpdateWorkoutPlanNameUserCase {
WorkoutExercise execute(UUID id, String name)
}

View file

@ -1,9 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutPlan
import java.time.LocalDateTime
interface UpdateWorkoutPlanUpdateAtUserCase {
WorkoutPlan execute(UUID id, LocalDateTime updateAt)
}

View file

@ -1,8 +0,0 @@
package br.dev.jsilveira.coresync.application.port.in
import br.dev.jsilveira.coresync.domain.model.WorkoutDay
import br.dev.jsilveira.coresync.domain.model.WorkoutPlan
interface UpdateWorkoutPlanWorkoutDaysUserCase {
WorkoutPlan execute(UUID id, List<WorkoutDay> workoutDays)
}

View file

@ -1,5 +0,0 @@
package br.dev.jsilveira.coresync.application.port.out
interface GetUserEmailUserCase {
String execute(UUID id)
}

View file

@ -1,5 +0,0 @@
package br.dev.jsilveira.coresync.application.port.out
interface GetUserEmailVerifiedUserCase {
Boolean execute(UUID id)
}

View file

@ -1,5 +0,0 @@
package br.dev.jsilveira.coresync.application.port.out
interface GetUserImageUserCase {
String execute(UUID id)
}

View file

@ -1,5 +0,0 @@
package br.dev.jsilveira.coresync.application.port.out
interface GetUserIsActiveUserCase {
Boolean execute(UUID id)
}

View file

@ -1,5 +0,0 @@
package br.dev.jsilveira.coresync.application.port.out
interface GetUserNameUserCase {
String execute(UUID id)
}

View file

@ -1,5 +0,0 @@
package br.dev.jsilveira.coresync.application.port.out
interface GetWorkoutPlanIsActiveUserCase {
Boolean execute(UUID id)
}

View file

@ -1,7 +0,0 @@
package br.dev.jsilveira.coresync.application.port.out
import br.dev.jsilveira.coresync.domain.model.WorkoutPlan
interface GetWorkoutPlanNameUserCase {
String execute(UUID id)
}

View file

@ -1,8 +0,0 @@
package br.dev.jsilveira.coresync.application.port.out
import br.dev.jsilveira.coresync.domain.model.WorkoutDay
interface GetWorkoutPlanWorkoutDaysUserCase {
List<WorkoutDay> execute(UUID id)
}

View file

@ -0,0 +1 @@
package br.dev.jsilveira.coresync.session.adapter.in.web

View file

@ -0,0 +1 @@
package br.dev.jsilveira.coresync.session.adapter.out.persistence

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.session.application.port.in
import br.dev.jsilveira.coresync.session.domain.model.UserWorkoutSession
interface UpdateUserWorkoutSessionCompletedAtUseCase {
UserWorkoutSession execute(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.session.application.port.out
import br.dev.jsilveira.coresync.session.domain.model.UserWorkoutSession
interface LoadUserWorkoutSessionPort {
UserWorkoutSession load(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.session.application.port.out
import br.dev.jsilveira.coresync.session.domain.model.UserWorkoutSession
interface SaveUserWorkoutSessionPort {
void save(UserWorkoutSession userWorkoutSession)
}

View file

@ -1,7 +1,7 @@
package br.dev.jsilveira.coresync.domain.exception;
package br.dev.jsilveira.coresync.session.domain.exception;
public class UserWorkoutSessionException extends RuntimeException {
public UserWorkoutSessionException(String message) {
super(message);
}
}
}

View file

@ -1,8 +1,9 @@
package br.dev.jsilveira.coresync.domain.model
package br.dev.jsilveira.coresync.session.domain.model
import br.dev.jsilveira.coresync.domain.exception.UserWorkoutSessionException
import br.dev.jsilveira.coresync.session.domain.exception.UserWorkoutSessionException
import java.time.LocalDateTime
import java.time.Duration
import java.util.UUID
record UserWorkoutSession(
UUID id,

View file

@ -0,0 +1 @@
package br.dev.jsilveira.coresync.user.adapter.in.web

View file

@ -0,0 +1,2 @@
package br.dev.jsilveira.coresync.user.adapter.out.persistence

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.user.application.port.in
import br.dev.jsilveira.coresync.user.domain.model.User
interface CreateUserUseCase {
User execute(String name, String email)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.user.application.port.in
import br.dev.jsilveira.coresync.user.domain.model.User
interface DisableUserEmailVerifiedUseCase {
User execute(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.user.application.port.in
import br.dev.jsilveira.coresync.user.domain.model.User
interface DisableUserUseCase {
User execute(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.user.application.port.in
import br.dev.jsilveira.coresync.user.domain.model.User
interface EnableUserEmailVerifiedUseCase {
User execute(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.user.application.port.in
import br.dev.jsilveira.coresync.user.domain.model.User
interface EnableUserUseCase {
User execute(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.user.application.port.in
import br.dev.jsilveira.coresync.user.domain.model.User
interface UpdateUserEmailUseCase {
User execute(UUID id, String email)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.user.application.port.in
import br.dev.jsilveira.coresync.user.domain.model.User
interface UpdateUserImageUseCase {
User execute(UUID id, String image)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.user.application.port.in
import br.dev.jsilveira.coresync.user.domain.model.User
interface UpdateUserNameUseCase {
User execute(UUID id, String name)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.user.application.port.out
import br.dev.jsilveira.coresync.user.domain.model.User
interface LoadUserPort {
User load(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.user.application.port.out
import br.dev.jsilveira.coresync.user.domain.model.User
interface SaveUserPort {
void save(User user)
}

View file

@ -1,7 +1,7 @@
package br.dev.jsilveira.coresync.domain.exception;
package br.dev.jsilveira.coresync.user.domain.exception;
public class UserException extends RuntimeException {
public UserException(String message) {
super(message);
}
}
}

View file

@ -1,8 +1,9 @@
package br.dev.jsilveira.coresync.domain.model
package br.dev.jsilveira.coresync.user.domain.model
import br.dev.jsilveira.coresync.domain.exception.UserException
import br.dev.jsilveira.coresync.user.domain.exception.UserException
import java.time.LocalDateTime
import java.util.UUID
record User(
UUID id,

View file

@ -0,0 +1 @@
package br.dev.jsilveira.coresync.workout.adapter.in.web

View file

@ -0,0 +1 @@
package br.dev.jsilveira.coresync.workout.adapter.out.persistence

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.in
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutPlan
interface CreateWorkoutPlanUseCase {
WorkoutPlan execute(String name, UUID userId)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.in
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutDay
interface DisableWorkoutDayRestUseCase {
WorkoutDay execute(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.in
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutPlan
interface DisableWorkoutPlanUseCase {
WorkoutPlan execute(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.in
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutDay
interface EnableWorkoutDayRestUseCase {
WorkoutDay execute(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.in
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutPlan
interface EnableWorkoutPlanUseCase {
WorkoutPlan execute(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.in
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutDay
interface UpdateWorkoutDayNameUseCase {
WorkoutDay execute(UUID id, String name)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.in
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutExercise
interface UpdateWorkoutExerciseNameUseCase {
WorkoutExercise execute(UUID id, String name)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.in
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutPlan
interface UpdateWorkoutPlanNameUseCase {
WorkoutPlan execute(UUID id, String name)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.out
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutDay
interface LoadWorkoutDayPort {
WorkoutDay load(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.out
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutExercise
interface LoadWorkoutExercisePort {
WorkoutExercise load(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.out
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutPlan
interface LoadWorkoutPlanPort {
WorkoutPlan load(UUID id)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.out
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutDay
interface SaveWorkoutDayPort {
void save(WorkoutDay workoutDay)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.out
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutExercise
interface SaveWorkoutExercisePort {
void save(WorkoutExercise workoutExercise)
}

View file

@ -0,0 +1,7 @@
package br.dev.jsilveira.coresync.workout.application.port.out
import br.dev.jsilveira.coresync.workout.domain.model.WorkoutPlan
interface SaveWorkoutPlanPort {
void save(WorkoutPlan workoutPlan)
}

View file

@ -1,7 +1,7 @@
package br.dev.jsilveira.coresync.domain.exception;
package br.dev.jsilveira.coresync.workout.domain.exception;
public class WorkoutDayException extends RuntimeException {
public WorkoutDayException(String message) {
super(message);
}
}
}

View file

@ -1,7 +1,7 @@
package br.dev.jsilveira.coresync.domain.exception;
package br.dev.jsilveira.coresync.workout.domain.exception;
public class WorkoutExerciseException extends RuntimeException {
public WorkoutExerciseException(String message) {
super(message);
}
}
}

View file

@ -1,7 +1,7 @@
package br.dev.jsilveira.coresync.domain.exception;
package br.dev.jsilveira.coresync.workout.domain.exception;
public class WorkoutPlanException extends RuntimeException {
public WorkoutPlanException(String message) {
super(message);
}
}
}

View file

@ -1,4 +1,4 @@
package br.dev.jsilveira.coresync.domain.model
package br.dev.jsilveira.coresync.workout.domain.model
enum WeekDay {
DOMINGO(1),

View file

@ -1,8 +1,9 @@
package br.dev.jsilveira.coresync.domain.model
package br.dev.jsilveira.coresync.workout.domain.model
import br.dev.jsilveira.coresync.domain.exception.WorkoutDayException
import br.dev.jsilveira.coresync.workout.domain.exception.WorkoutDayException
import java.time.LocalDateTime
import java.util.UUID
record WorkoutDay(
UUID id,
@ -50,5 +51,4 @@ record WorkoutDay(
int calculateTotalTime() {
return workoutExercises.sum { it.estimatedTime() } ?: 0 as int
}
}
}

View file

@ -1,8 +1,9 @@
package br.dev.jsilveira.coresync.domain.model
package br.dev.jsilveira.coresync.workout.domain.model
import br.dev.jsilveira.coresync.domain.exception.WorkoutExerciseException
import br.dev.jsilveira.coresync.workout.domain.exception.WorkoutExerciseException
import java.time.LocalDateTime
import java.util.UUID
record WorkoutExercise(
UUID id,

View file

@ -1,8 +1,9 @@
package br.dev.jsilveira.coresync.domain.model
package br.dev.jsilveira.coresync.workout.domain.model
import br.dev.jsilveira.coresync.domain.exception.WorkoutPlanException
import br.dev.jsilveira.coresync.workout.domain.exception.WorkoutPlanException
import java.time.LocalDateTime
import java.util.UUID
record WorkoutPlan(
UUID id,
@ -10,7 +11,7 @@ record WorkoutPlan(
UUID userId,
Boolean isActive = Boolean.FALSE,
LocalDateTime createdAt = LocalDateTime.now(),
LocalDateTime updateAt = LocaDateTime.now(),
LocalDateTime updateAt = LocalDateTime.now(),
List<WorkoutDay> workoutDays = []
) {
public WorkoutPlan {