diff --git a/src/main/java/sopt/org/HMH/common/config/JpaAuditingConfig.java b/src/main/java/sopt/org/HMH/common/config/JpaAuditingConfig.java deleted file mode 100644 index ff802b2c..00000000 --- a/src/main/java/sopt/org/HMH/common/config/JpaAuditingConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package sopt.org.HMH.common.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; - -@Configuration -@EnableJpaAuditing -public class JpaAuditingConfig { -} \ No newline at end of file diff --git a/src/main/java/sopt/org/HMH/common/exception/base/RootEnum.java b/src/main/java/sopt/org/HMH/common/exception/base/RootEnum.java deleted file mode 100644 index 67d47e98..00000000 --- a/src/main/java/sopt/org/HMH/common/exception/base/RootEnum.java +++ /dev/null @@ -1,4 +0,0 @@ -package sopt.org.HMH.common.exception.base; - -public interface RootEnum { -} \ No newline at end of file diff --git a/src/main/java/sopt/org/HMH/domain/app/controller/AppController.java b/src/main/java/sopt/org/HMH/domain/app/controller/AppController.java new file mode 100644 index 00000000..3050d6fd --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/app/controller/AppController.java @@ -0,0 +1,11 @@ +package sopt.org.HMH.domain.app.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/app") +public class AppController { +} diff --git a/src/main/java/sopt/org/HMH/domain/app/domain/App.java b/src/main/java/sopt/org/HMH/domain/app/domain/App.java new file mode 100644 index 00000000..3f6a66d9 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/app/domain/App.java @@ -0,0 +1,34 @@ +package sopt.org.HMH.domain.app.domain; + +import jakarta.persistence.*; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import sopt.org.HMH.domain.dayChallenge.domain.DayChallenge; + +@Entity +@Getter +@NoArgsConstructor +@Table(name = "app") +public class App { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "app_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "day_challenge_id") + private DayChallenge dayChallenge; + + private String appCode; + private Long useTime; + private Long goalTime; + + public App(DayChallenge dayChallenge, String appCode, Long goalTime) { + this.dayChallenge = dayChallenge; + this.appCode = appCode; + this.useTime = 0L; + this.goalTime = goalTime; + } +} diff --git a/src/main/java/sopt/org/HMH/domain/app/dto/request/AppGoalTimeRequest.java b/src/main/java/sopt/org/HMH/domain/app/dto/request/AppGoalTimeRequest.java new file mode 100644 index 00000000..3fcacf01 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/app/dto/request/AppGoalTimeRequest.java @@ -0,0 +1,7 @@ +package sopt.org.HMH.domain.app.dto.request; + +public record AppGoalTimeRequest( + String appCode, + Long goalTime +) { +} diff --git a/src/main/java/sopt/org/HMH/domain/app/repository/AppRepository.java b/src/main/java/sopt/org/HMH/domain/app/repository/AppRepository.java new file mode 100644 index 00000000..f4c267c5 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/app/repository/AppRepository.java @@ -0,0 +1,7 @@ +package sopt.org.HMH.domain.app.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import sopt.org.HMH.domain.app.domain.App; + +public interface AppRepository extends JpaRepository { +} diff --git a/src/main/java/sopt/org/HMH/domain/app/service/AppService.java b/src/main/java/sopt/org/HMH/domain/app/service/AppService.java new file mode 100644 index 00000000..023e2f4b --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/app/service/AppService.java @@ -0,0 +1,31 @@ +package sopt.org.HMH.domain.app.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import sopt.org.HMH.domain.app.domain.App; +import sopt.org.HMH.domain.app.dto.request.AppGoalTimeRequest; +import sopt.org.HMH.domain.app.repository.AppRepository; +import sopt.org.HMH.domain.dayChallenge.domain.DayChallenge; +import sopt.org.HMH.domain.dayChallenge.repository.DayChallengeRepository; + +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class AppService { + + private final AppRepository appRepository; + private final DayChallengeRepository dayChallengeRepository; + + public List addApp(Long dayChallengeId, List requests) { + DayChallenge dayChallenge = dayChallengeRepository.findByIdOrThrowException(dayChallengeId); + + List apps = new ArrayList<>(); + for (AppGoalTimeRequest request: requests) { + appRepository.save(new App(dayChallenge, request.appCode(), request.goalTime())); + } + + return apps; + } +} diff --git a/src/main/java/sopt/org/HMH/domain/challenge/controller/ChallengeController.java b/src/main/java/sopt/org/HMH/domain/challenge/controller/ChallengeController.java new file mode 100644 index 00000000..77bfe283 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/challenge/controller/ChallengeController.java @@ -0,0 +1,28 @@ +package sopt.org.HMH.domain.challenge.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import sopt.org.HMH.domain.challenge.domain.exception.ChallengeSuccess; +import sopt.org.HMH.domain.challenge.dto.request.ChallengeRequest; +import sopt.org.HMH.domain.challenge.service.ChallengeService; +import sopt.org.HMH.global.common.response.ApiResponse; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/challenge") +public class ChallengeController { + + private final ChallengeService challengeService; + + @PostMapping + public ResponseEntity orderAdd(@RequestBody ChallengeRequest request) { + // TODO: - 토큰으로 유저 아이디 찾는 함수 연결 + return ResponseEntity + .status(ChallengeSuccess.SUCCESS_CREATE_CHALLENGE.getHttpStatus()) + .body(ApiResponse.success(ChallengeSuccess.SUCCESS_CREATE_CHALLENGE, challengeService.addChallenge(1L, request))); + } +} diff --git a/src/main/java/sopt/org/HMH/domain/challenge/domain/Challenge.java b/src/main/java/sopt/org/HMH/domain/challenge/domain/Challenge.java new file mode 100644 index 00000000..50993512 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/challenge/domain/Challenge.java @@ -0,0 +1,41 @@ +package sopt.org.HMH.domain.challenge.domain; + +import static jakarta.persistence.FetchType.*; +import static jakarta.persistence.GenerationType.*; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import sopt.org.HMH.global.common.domain.BaseTimeEntity; +import sopt.org.HMH.domain.dayChallenge.domain.DayChallenge; +import sopt.org.HMH.domain.user.User; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@NoArgsConstructor +@Table(name = "challenge") +public class Challenge extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = IDENTITY) + @Column(name = "challenge_id") + private Long id; + + @ManyToOne(fetch = LAZY) + @JoinColumn(name = "user_id") + private User user; + + private Integer period; + + @OneToMany(mappedBy = "challenge") + private List dayChallenges; + + public Challenge(User user, Integer period) { + this.user = user; + this.period = period; + this.dayChallenges = new ArrayList<>(); + } +} diff --git a/src/main/java/sopt/org/HMH/domain/challenge/domain/exception/ChallengeError.java b/src/main/java/sopt/org/HMH/domain/challenge/domain/exception/ChallengeError.java new file mode 100644 index 00000000..e233f0ec --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/challenge/domain/exception/ChallengeError.java @@ -0,0 +1,29 @@ +package sopt.org.HMH.domain.challenge.domain.exception; + +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import sopt.org.HMH.global.common.exception.base.ErrorBase; + +@AllArgsConstructor +public enum ChallengeError implements ErrorBase { + CHALLENGE_NOT_FOUND(HttpStatus.NOT_FOUND, "챌린지 찾기 불가"), + ; + + private final HttpStatus status; + private final String errorMessage; + + @Override + public int getHttpStatusCode() { + return status.value(); + } + + @Override + public HttpStatus getHttpStatus() { + return this.status; + } + + @Override + public String getErrorMessage() { + return this.errorMessage; + } +} \ No newline at end of file diff --git a/src/main/java/sopt/org/HMH/domain/challenge/domain/exception/ChallengeException.java b/src/main/java/sopt/org/HMH/domain/challenge/domain/exception/ChallengeException.java new file mode 100644 index 00000000..50feb4aa --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/challenge/domain/exception/ChallengeException.java @@ -0,0 +1,9 @@ +package sopt.org.HMH.domain.challenge.domain.exception; + +import sopt.org.HMH.global.common.exception.base.ExceptionBase; + +public class ChallengeException extends ExceptionBase { + public ChallengeException(ChallengeError error) { + super(error); + } +} \ No newline at end of file diff --git a/src/main/java/sopt/org/HMH/domain/challenge/domain/exception/ChallengeSuccess.java b/src/main/java/sopt/org/HMH/domain/challenge/domain/exception/ChallengeSuccess.java new file mode 100644 index 00000000..34e34f1b --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/challenge/domain/exception/ChallengeSuccess.java @@ -0,0 +1,29 @@ +package sopt.org.HMH.domain.challenge.domain.exception; + +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import sopt.org.HMH.global.common.exception.base.SuccessBase; + +@AllArgsConstructor +public enum ChallengeSuccess implements SuccessBase { + SUCCESS_CREATE_CHALLENGE(HttpStatus.OK, "챌린지 생성 성공"), + ; + + private final HttpStatus status; + private final String successMessage; + + @Override + public int getHttpStatusCode() { + return this.status.value(); + } + + @Override + public HttpStatus getHttpStatus() { + return this.status; + } + + @Override + public String getSuccessMessage() { + return this.successMessage; + } +} \ No newline at end of file diff --git a/src/main/java/sopt/org/HMH/domain/challenge/dto/request/ChallengeRequest.java b/src/main/java/sopt/org/HMH/domain/challenge/dto/request/ChallengeRequest.java new file mode 100644 index 00000000..c191ac87 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/challenge/dto/request/ChallengeRequest.java @@ -0,0 +1,12 @@ +package sopt.org.HMH.domain.challenge.dto.request; + +import sopt.org.HMH.domain.app.dto.request.AppGoalTimeRequest; + +import java.util.List; + +public record ChallengeRequest( + Integer period, + Long goalTime, + List apps +) { +} diff --git a/src/main/java/sopt/org/HMH/domain/challenge/dto/response/CreatedChallengeResponse.java b/src/main/java/sopt/org/HMH/domain/challenge/dto/response/CreatedChallengeResponse.java new file mode 100644 index 00000000..0de06cd7 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/challenge/dto/response/CreatedChallengeResponse.java @@ -0,0 +1,9 @@ +package sopt.org.HMH.domain.challenge.dto.response; + +public record CreatedChallengeResponse( + Long challengeId +) { + public static CreatedChallengeResponse of(Long challengeId) { + return new CreatedChallengeResponse(challengeId); + } +} \ No newline at end of file diff --git a/src/main/java/sopt/org/HMH/domain/challenge/repository/ChallengeRepository.java b/src/main/java/sopt/org/HMH/domain/challenge/repository/ChallengeRepository.java new file mode 100644 index 00000000..ffe04f59 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/challenge/repository/ChallengeRepository.java @@ -0,0 +1,7 @@ +package sopt.org.HMH.domain.challenge.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import sopt.org.HMH.domain.challenge.domain.Challenge; + +public interface ChallengeRepository extends JpaRepository { +} diff --git a/src/main/java/sopt/org/HMH/domain/challenge/service/ChallengeService.java b/src/main/java/sopt/org/HMH/domain/challenge/service/ChallengeService.java new file mode 100644 index 00000000..99116684 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/challenge/service/ChallengeService.java @@ -0,0 +1,33 @@ +package sopt.org.HMH.domain.challenge.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import sopt.org.HMH.domain.app.domain.App; +import sopt.org.HMH.domain.app.service.AppService; +import sopt.org.HMH.domain.challenge.domain.Challenge; +import sopt.org.HMH.domain.challenge.dto.request.ChallengeRequest; +import sopt.org.HMH.domain.challenge.dto.response.CreatedChallengeResponse; +import sopt.org.HMH.domain.challenge.repository.ChallengeRepository; +import sopt.org.HMH.domain.dayChallenge.service.DayChallengeService; +import sopt.org.HMH.domain.user.User; +import sopt.org.HMH.domain.user.service.UserService; + +@Service +@RequiredArgsConstructor +public class ChallengeService { + + private final ChallengeRepository challengeRepository; + + private final DayChallengeService dayChallengeService; + private final AppService appService; + private final UserService userService; + + public CreatedChallengeResponse addChallenge(Long userId, ChallengeRequest request) { + User user = userService.getUserId(userId); + Challenge challenge = challengeRepository.save(new Challenge(user, request.period())); + Long dayChallengeId = dayChallengeService.addDayChallenge(challenge, request.goalTime()); + appService.addApp(dayChallengeId, request.apps()); + + return CreatedChallengeResponse.of(challenge.getId()); + } +} diff --git a/src/main/java/sopt/org/HMH/domain/dayChallenge/domain/DayChallenge.java b/src/main/java/sopt/org/HMH/domain/dayChallenge/domain/DayChallenge.java new file mode 100644 index 00000000..8be715cf --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/dayChallenge/domain/DayChallenge.java @@ -0,0 +1,44 @@ +package sopt.org.HMH.domain.dayChallenge.domain; + +import static jakarta.persistence.FetchType.*; +import static jakarta.persistence.GenerationType.*; + +import jakarta.persistence.*; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import sopt.org.HMH.domain.app.domain.App; +import sopt.org.HMH.global.common.domain.BaseTimeEntity; +import sopt.org.HMH.domain.challenge.domain.Challenge; + +import java.util.List; + +@Entity +@Getter +@NoArgsConstructor +@Table(name = "day_challenge") +public class DayChallenge extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = IDENTITY) + private Long Id; + + @ManyToOne(fetch = LAZY) + @JoinColumn(name = "challenge_id") + private Challenge challenge; + + private Long goalTime; + private Boolean isSuccess; + private Boolean didGettingPoint; + + @OneToMany(mappedBy = "dayChallenge") + private List apps; + + @Builder + public DayChallenge(Challenge challenge, Long goalTime) { + this.challenge = challenge; + this.goalTime = goalTime; + this.isSuccess = false; + this.didGettingPoint = false; + } +} diff --git a/src/main/java/sopt/org/HMH/domain/dayChallenge/domain/exception/DayChallengeError.java b/src/main/java/sopt/org/HMH/domain/dayChallenge/domain/exception/DayChallengeError.java new file mode 100644 index 00000000..bd42ac0e --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/dayChallenge/domain/exception/DayChallengeError.java @@ -0,0 +1,29 @@ +package sopt.org.HMH.domain.dayChallenge.domain.exception; + +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import sopt.org.HMH.global.common.exception.base.ErrorBase; + +@AllArgsConstructor +public enum DayChallengeError implements ErrorBase { + CHALLENGE_NOT_FOUND(HttpStatus.NOT_FOUND, "데이챌린지 찾기 불가"), + ; + + private final HttpStatus status; + private final String errorMessage; + + @Override + public int getHttpStatusCode() { + return status.value(); + } + + @Override + public HttpStatus getHttpStatus() { + return this.status; + } + + @Override + public String getErrorMessage() { + return this.errorMessage; + } +} \ No newline at end of file diff --git a/src/main/java/sopt/org/HMH/domain/dayChallenge/repository/DayChallengeRepository.java b/src/main/java/sopt/org/HMH/domain/dayChallenge/repository/DayChallengeRepository.java new file mode 100644 index 00000000..87c27530 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/dayChallenge/repository/DayChallengeRepository.java @@ -0,0 +1,16 @@ +package sopt.org.HMH.domain.dayChallenge.repository; + +import jakarta.persistence.EntityNotFoundException; +import org.springframework.data.jpa.repository.JpaRepository; +import sopt.org.HMH.domain.dayChallenge.domain.DayChallenge; +import sopt.org.HMH.domain.dayChallenge.domain.exception.DayChallengeError; + +public interface DayChallengeRepository extends JpaRepository { + + default DayChallenge findByIdOrThrowException(Long dayChallengeId) { + return findById(dayChallengeId).orElseThrow(() -> new EntityNotFoundException(DayChallengeError.CHALLENGE_NOT_FOUND.getErrorMessage())); + } +} + + + diff --git a/src/main/java/sopt/org/HMH/domain/dayChallenge/service/DayChallengeService.java b/src/main/java/sopt/org/HMH/domain/dayChallenge/service/DayChallengeService.java new file mode 100644 index 00000000..8c6a3ef2 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/dayChallenge/service/DayChallengeService.java @@ -0,0 +1,20 @@ +package sopt.org.HMH.domain.dayChallenge.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import sopt.org.HMH.domain.challenge.domain.Challenge; +import sopt.org.HMH.domain.dayChallenge.domain.DayChallenge; +import sopt.org.HMH.domain.dayChallenge.repository.DayChallengeRepository; + +@Service +@RequiredArgsConstructor +public class DayChallengeService { + + private final DayChallengeRepository dayChallengeRepository; + + public Long addDayChallenge(Challenge challenge, Long goalTime) { + DayChallenge dayChallenge = dayChallengeRepository.save(new DayChallenge(challenge, goalTime)); + + return dayChallenge.getId(); + } +} diff --git a/src/main/java/sopt/org/HMH/domain/user/User.java b/src/main/java/sopt/org/HMH/domain/user/User.java new file mode 100644 index 00000000..dacddb8b --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/user/User.java @@ -0,0 +1,22 @@ +package sopt.org.HMH.domain.user; + +import jakarta.persistence.*; +import sopt.org.HMH.domain.challenge.domain.Challenge; +import sopt.org.HMH.global.common.domain.BaseTimeEntity; + +import java.util.List; + +import static jakarta.persistence.GenerationType.IDENTITY; + +@Entity +@Table(name = "user") +public class User extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = IDENTITY) + @Column(name = "user_id") + private Integer Id; + + @OneToMany(mappedBy = "user") + private List challenges; +} diff --git a/src/main/java/sopt/org/HMH/domain/user/exception/UserError.java b/src/main/java/sopt/org/HMH/domain/user/exception/UserError.java new file mode 100644 index 00000000..0609c81c --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/user/exception/UserError.java @@ -0,0 +1,29 @@ +package sopt.org.HMH.domain.user.exception; + +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import sopt.org.HMH.global.common.exception.base.ErrorBase; + +@AllArgsConstructor +public enum UserError implements ErrorBase { + USER_NOT_FOUND(HttpStatus.NOT_FOUND, "유저 찾기 불가"), + ; + + private final HttpStatus status; + private final String errorMessage; + + @Override + public int getHttpStatusCode() { + return status.value(); + } + + @Override + public HttpStatus getHttpStatus() { + return this.status; + } + + @Override + public String getErrorMessage() { + return this.errorMessage; + } +} \ No newline at end of file diff --git a/src/main/java/sopt/org/HMH/domain/user/repository/UserRepository.java b/src/main/java/sopt/org/HMH/domain/user/repository/UserRepository.java new file mode 100644 index 00000000..9b4d50e0 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/user/repository/UserRepository.java @@ -0,0 +1,13 @@ +package sopt.org.HMH.domain.user.repository; + +import jakarta.persistence.EntityNotFoundException; +import org.springframework.data.jpa.repository.JpaRepository; +import sopt.org.HMH.domain.user.User; +import sopt.org.HMH.domain.user.exception.UserError; + +public interface UserRepository extends JpaRepository { + + default User findByIdOrThrowException(Long userId) { + return findById(userId).orElseThrow(() -> new EntityNotFoundException(UserError.USER_NOT_FOUND.getErrorMessage())); + } +} diff --git a/src/main/java/sopt/org/HMH/domain/user/service/UserService.java b/src/main/java/sopt/org/HMH/domain/user/service/UserService.java new file mode 100644 index 00000000..5bd0d905 --- /dev/null +++ b/src/main/java/sopt/org/HMH/domain/user/service/UserService.java @@ -0,0 +1,17 @@ +package sopt.org.HMH.domain.user.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import sopt.org.HMH.domain.user.User; +import sopt.org.HMH.domain.user.repository.UserRepository; + +@Service +@RequiredArgsConstructor +public class UserService { + + private final UserRepository userRepository; + + public User getUserId(Long userId) { + return userRepository.findByIdOrThrowException(userId); + } +} diff --git a/src/main/java/sopt/org/HMH/global/common/Util.java b/src/main/java/sopt/org/HMH/global/common/Util.java new file mode 100644 index 00000000..6121cf72 --- /dev/null +++ b/src/main/java/sopt/org/HMH/global/common/Util.java @@ -0,0 +1,14 @@ +package sopt.org.HMH.global.common; + +import java.security.Principal; + +import static java.util.Objects.isNull; + +public class Util { +// public static Long getUserId(Principal principal) { +// if (isNull(principal)) { +// throw new SecurityException(EMPTY_ACCESS_TOKEN.getMessage()); +// } +// return Long.valueOf(principal.getName()); +// } +} diff --git a/src/main/java/sopt/org/HMH/global/common/config/JpaAuditingConfig.java b/src/main/java/sopt/org/HMH/global/common/config/JpaAuditingConfig.java new file mode 100644 index 00000000..8b760ef3 --- /dev/null +++ b/src/main/java/sopt/org/HMH/global/common/config/JpaAuditingConfig.java @@ -0,0 +1,12 @@ +package sopt.org.HMH.global.common.config; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +@Configuration +@EnableJpaAuditing +@SpringBootApplication(exclude = SecurityAutoConfiguration.class) +public class JpaAuditingConfig { +} \ No newline at end of file diff --git a/src/main/java/sopt/org/HMH/common/domain/BaseTimeEntity.java b/src/main/java/sopt/org/HMH/global/common/domain/BaseTimeEntity.java similarity index 92% rename from src/main/java/sopt/org/HMH/common/domain/BaseTimeEntity.java rename to src/main/java/sopt/org/HMH/global/common/domain/BaseTimeEntity.java index 9a656b7f..f96f9406 100644 --- a/src/main/java/sopt/org/HMH/common/domain/BaseTimeEntity.java +++ b/src/main/java/sopt/org/HMH/global/common/domain/BaseTimeEntity.java @@ -1,4 +1,4 @@ -package sopt.org.HMH.common.domain; +package sopt.org.HMH.global.common.domain; import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; @@ -18,5 +18,4 @@ public abstract class BaseTimeEntity { @LastModifiedDate private LocalDateTime updatedAt; - } diff --git a/src/main/java/sopt/org/HMH/common/exception/GlobalError.java b/src/main/java/sopt/org/HMH/global/common/exception/GlobalError.java similarity index 82% rename from src/main/java/sopt/org/HMH/common/exception/GlobalError.java rename to src/main/java/sopt/org/HMH/global/common/exception/GlobalError.java index 90d90ca5..0f56103f 100644 --- a/src/main/java/sopt/org/HMH/common/exception/GlobalError.java +++ b/src/main/java/sopt/org/HMH/global/common/exception/GlobalError.java @@ -1,12 +1,11 @@ -package sopt.org.HMH.common.exception; +package sopt.org.HMH.global.common.exception; import lombok.AllArgsConstructor; import org.springframework.http.HttpStatus; -import sopt.org.HMH.common.exception.base.ErrorBase; +import sopt.org.HMH.global.common.exception.base.ErrorBase; @AllArgsConstructor public enum GlobalError implements ErrorBase { - ; private final HttpStatus status; diff --git a/src/main/java/sopt/org/HMH/common/exception/GlobalException.java b/src/main/java/sopt/org/HMH/global/common/exception/GlobalException.java similarity index 65% rename from src/main/java/sopt/org/HMH/common/exception/GlobalException.java rename to src/main/java/sopt/org/HMH/global/common/exception/GlobalException.java index c0ce1b62..809c8970 100644 --- a/src/main/java/sopt/org/HMH/common/exception/GlobalException.java +++ b/src/main/java/sopt/org/HMH/global/common/exception/GlobalException.java @@ -1,6 +1,6 @@ -package sopt.org.HMH.common.exception; +package sopt.org.HMH.global.common.exception; -import sopt.org.HMH.common.exception.base.ExceptionBase; +import sopt.org.HMH.global.common.exception.base.ExceptionBase; /** * 전역적 혹은 시스템 전체 범위에서 발생하는 예외 diff --git a/src/main/java/sopt/org/HMH/common/exception/GlobalSuccess.java b/src/main/java/sopt/org/HMH/global/common/exception/GlobalSuccess.java similarity index 82% rename from src/main/java/sopt/org/HMH/common/exception/GlobalSuccess.java rename to src/main/java/sopt/org/HMH/global/common/exception/GlobalSuccess.java index 22a30c30..7a75a2a4 100644 --- a/src/main/java/sopt/org/HMH/common/exception/GlobalSuccess.java +++ b/src/main/java/sopt/org/HMH/global/common/exception/GlobalSuccess.java @@ -1,12 +1,11 @@ -package sopt.org.HMH.common.exception; +package sopt.org.HMH.global.common.exception; import lombok.AllArgsConstructor; import org.springframework.http.HttpStatus; -import sopt.org.HMH.common.exception.base.SuccessBase; +import sopt.org.HMH.global.common.exception.base.SuccessBase; @AllArgsConstructor public enum GlobalSuccess implements SuccessBase { - ; private final HttpStatus status; diff --git a/src/main/java/sopt/org/HMH/common/exception/base/ErrorBase.java b/src/main/java/sopt/org/HMH/global/common/exception/base/ErrorBase.java similarity index 78% rename from src/main/java/sopt/org/HMH/common/exception/base/ErrorBase.java rename to src/main/java/sopt/org/HMH/global/common/exception/base/ErrorBase.java index fd43a914..fade4614 100644 --- a/src/main/java/sopt/org/HMH/common/exception/base/ErrorBase.java +++ b/src/main/java/sopt/org/HMH/global/common/exception/base/ErrorBase.java @@ -1,4 +1,4 @@ -package sopt.org.HMH.common.exception.base; +package sopt.org.HMH.global.common.exception.base; import org.springframework.http.HttpStatus; diff --git a/src/main/java/sopt/org/HMH/common/exception/base/ExceptionBase.java b/src/main/java/sopt/org/HMH/global/common/exception/base/ExceptionBase.java similarity index 90% rename from src/main/java/sopt/org/HMH/common/exception/base/ExceptionBase.java rename to src/main/java/sopt/org/HMH/global/common/exception/base/ExceptionBase.java index 40c06a6b..0c407737 100644 --- a/src/main/java/sopt/org/HMH/common/exception/base/ExceptionBase.java +++ b/src/main/java/sopt/org/HMH/global/common/exception/base/ExceptionBase.java @@ -1,4 +1,4 @@ -package sopt.org.HMH.common.exception.base; +package sopt.org.HMH.global.common.exception.base; /** * 하위 도메인 예외는 본 Exception 클래스를 상속 받습니다. diff --git a/src/main/java/sopt/org/HMH/global/common/exception/base/RootEnum.java b/src/main/java/sopt/org/HMH/global/common/exception/base/RootEnum.java new file mode 100644 index 00000000..d4070b15 --- /dev/null +++ b/src/main/java/sopt/org/HMH/global/common/exception/base/RootEnum.java @@ -0,0 +1,4 @@ +package sopt.org.HMH.global.common.exception.base; + +public interface RootEnum { +} \ No newline at end of file diff --git a/src/main/java/sopt/org/HMH/common/exception/base/SuccessBase.java b/src/main/java/sopt/org/HMH/global/common/exception/base/SuccessBase.java similarity index 78% rename from src/main/java/sopt/org/HMH/common/exception/base/SuccessBase.java rename to src/main/java/sopt/org/HMH/global/common/exception/base/SuccessBase.java index baf365ff..9a411899 100644 --- a/src/main/java/sopt/org/HMH/common/exception/base/SuccessBase.java +++ b/src/main/java/sopt/org/HMH/global/common/exception/base/SuccessBase.java @@ -1,4 +1,4 @@ -package sopt.org.HMH.common.exception.base; +package sopt.org.HMH.global.common.exception.base; import org.springframework.http.HttpStatus; diff --git a/src/main/java/sopt/org/HMH/common/response/ApiResponse.java b/src/main/java/sopt/org/HMH/global/common/response/ApiResponse.java similarity index 88% rename from src/main/java/sopt/org/HMH/common/response/ApiResponse.java rename to src/main/java/sopt/org/HMH/global/common/response/ApiResponse.java index 4105661e..8d6dd05a 100644 --- a/src/main/java/sopt/org/HMH/common/response/ApiResponse.java +++ b/src/main/java/sopt/org/HMH/global/common/response/ApiResponse.java @@ -1,12 +1,12 @@ -package sopt.org.HMH.common.response; +package sopt.org.HMH.global.common.response; import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.RequiredArgsConstructor; -import sopt.org.HMH.common.exception.base.ErrorBase; -import sopt.org.HMH.common.exception.base.SuccessBase; +import sopt.org.HMH.global.common.exception.base.ErrorBase; +import sopt.org.HMH.global.common.exception.base.SuccessBase; @Getter diff --git a/src/main/java/sopt/org/HMH/common/response/CommonControllerAdvice.java b/src/main/java/sopt/org/HMH/global/common/response/CommonControllerAdvice.java similarity index 79% rename from src/main/java/sopt/org/HMH/common/response/CommonControllerAdvice.java rename to src/main/java/sopt/org/HMH/global/common/response/CommonControllerAdvice.java index e062a2e2..b9c872b1 100644 --- a/src/main/java/sopt/org/HMH/common/response/CommonControllerAdvice.java +++ b/src/main/java/sopt/org/HMH/global/common/response/CommonControllerAdvice.java @@ -1,11 +1,11 @@ -package sopt.org.HMH.common.response; +package sopt.org.HMH.global.common.response; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; -import sopt.org.HMH.common.exception.base.ErrorBase; -import sopt.org.HMH.common.exception.base.ExceptionBase; +import sopt.org.HMH.global.common.exception.base.ErrorBase; +import sopt.org.HMH.global.common.exception.base.ExceptionBase; @ControllerAdvice @RequiredArgsConstructor