diff --git a/build.gradle b/build.gradle index 45a03fc..ea942bd 100644 --- a/build.gradle +++ b/build.gradle @@ -34,6 +34,9 @@ dependencies { implementation 'io.jsonwebtoken:jjwt-api:0.11.2' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2', 'io.jsonwebtoken:jjwt-jackson:0.11.2' + //swagger + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' + compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.mysql:mysql-connector-j' diff --git a/settings.gradle b/settings.gradle index b72b5ec..265643b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -rootProject.name = 'santa' +rootProject.name = 'tohero' diff --git a/src/main/java/com/neighbors/santa/application/oauth/service/OAuthService.java b/src/main/java/com/neighbors/santa/application/oauth/service/OAuthService.java deleted file mode 100644 index 3e8b264..0000000 --- a/src/main/java/com/neighbors/santa/application/oauth/service/OAuthService.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.neighbors.santa.application.oauth.service; - -import com.neighbors.santa.application.oauth.dto.kakao.KakaoInfoResponse; -import com.neighbors.santa.application.oauth.dto.kakao.KakaoTokens; -import com.neighbors.santa.application.oauth.dto.OAuthLoginResponse; -import com.neighbors.santa.application.baseResponse.BaseResponse; -import com.neighbors.santa.application.baseResponse.BaseResponseMessage; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; -import com.neighbors.santa.common.jwt.AuthTokens; -import com.neighbors.santa.common.jwt.JwtProvider; -import com.neighbors.santa.common.jwt.JwtUserDetails; -import com.neighbors.santa.domain.model.User; -import com.neighbors.santa.domain.service.CreateUser; -import com.neighbors.santa.domain.service.oauth.kakao.RequestKakaoInfo; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.stereotype.Service; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; - -@Service -@RequiredArgsConstructor -public class OAuthService { - - private final RequestKakaoInfo requestUserInfo; - private final CreateUser createUser; - private final JwtProvider jwtProvider; - - public BaseResponse oAuthKaKaoLoin(String code){ - KakaoInfoResponse kakaoInfoResponse = requestUserInfo.requestKakaoInfo(code); - - User user = User.builder() - .email(kakaoInfoResponse.getEmail()) - .userName(kakaoInfoResponse.getNickname()) - .build(); - - createUser.createUser(user); - - AuthTokens authTokens = jwtProvider.createToken(JwtUserDetails.from(user)); - - return new BaseResponse<>( - BaseResponseStatus.OK, - BaseResponseMessage.로그인_성공했습니다.getMessage(), - OAuthLoginResponse.createSuccessObjFrom(authTokens, kakaoInfoResponse.getEmail()) - ); - } -} diff --git a/src/main/java/com/neighbors/santa/domain/model/User.java b/src/main/java/com/neighbors/santa/domain/model/User.java deleted file mode 100644 index 0e950a8..0000000 --- a/src/main/java/com/neighbors/santa/domain/model/User.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.neighbors.santa.domain.model; - -import com.neighbors.santa.common.enums.Role; -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class User { - private Long userId; - private String userName; - private String email; - private Role role; -} diff --git a/src/main/java/com/neighbors/santa/domain/service/CreateUser.java b/src/main/java/com/neighbors/santa/domain/service/CreateUser.java deleted file mode 100644 index bbff18f..0000000 --- a/src/main/java/com/neighbors/santa/domain/service/CreateUser.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.neighbors.santa.domain.service; - -import com.neighbors.santa.domain.model.User; -import org.springframework.stereotype.Component; - -@Component -public class CreateUser { - public void createUser(User user) { - - } -} diff --git a/src/main/java/com/neighbors/santa/presentation/OAuthController.java b/src/main/java/com/neighbors/santa/presentation/OAuthController.java deleted file mode 100644 index 2a2dc1f..0000000 --- a/src/main/java/com/neighbors/santa/presentation/OAuthController.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.neighbors.santa.presentation; - -import com.neighbors.santa.application.oauth.dto.OAuthLoginResponse; -import com.neighbors.santa.application.oauth.service.OAuthService; -import com.neighbors.santa.application.baseResponse.BaseResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -@RestController -@RequiredArgsConstructor -@RequestMapping("") -public class OAuthController { - - private final OAuthService oAuthService; - - @GetMapping("/oauth/kakao/callback") - public ResponseEntity> kakaoLogin(@RequestParam("code") String code) { - return ResponseEntity.ok() - .body(oAuthService.oAuthKaKaoLoin(code)); - } -} diff --git a/src/main/java/com/neighbors/santa/SantaApplication.java b/src/main/java/com/neighbors/tohero/SantaApplication.java similarity index 51% rename from src/main/java/com/neighbors/santa/SantaApplication.java rename to src/main/java/com/neighbors/tohero/SantaApplication.java index 740d2ba..1def97e 100644 --- a/src/main/java/com/neighbors/santa/SantaApplication.java +++ b/src/main/java/com/neighbors/tohero/SantaApplication.java @@ -1,9 +1,13 @@ -package com.neighbors.santa; +package com.neighbors.tohero; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication +@EnableJpaAuditing +@EntityScan(basePackages = "com.neighbors.tohero.infrastructure.entity") public class SantaApplication { public static void main(String[] args) { diff --git a/src/main/java/com/neighbors/santa/application/baseResponse/BaseResponse.java b/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponse.java similarity index 92% rename from src/main/java/com/neighbors/santa/application/baseResponse/BaseResponse.java rename to src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponse.java index ae506b6..b242abb 100644 --- a/src/main/java/com/neighbors/santa/application/baseResponse/BaseResponse.java +++ b/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponse.java @@ -1,4 +1,4 @@ -package com.neighbors.santa.application.baseResponse; +package com.neighbors.tohero.application.baseResponse; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonPropertyOrder; diff --git a/src/main/java/com/neighbors/santa/application/baseResponse/BaseResponseMessage.java b/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java similarity index 72% rename from src/main/java/com/neighbors/santa/application/baseResponse/BaseResponseMessage.java rename to src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java index f431154..61a996b 100644 --- a/src/main/java/com/neighbors/santa/application/baseResponse/BaseResponseMessage.java +++ b/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java @@ -1,4 +1,4 @@ -package com.neighbors.santa.application.baseResponse; +package com.neighbors.tohero.application.baseResponse; import lombok.Getter; @@ -8,12 +8,19 @@ public enum BaseResponseMessage { //oauth success 로그인_성공했습니다("로그인 성공했습니다"), + //notice success + 공지_조회_성공했습니댜("공지 조회 성공했습니댜"), + + //user + 이미_존재하는_유저입니다("이미 존재하는 유저입니다"), + //jwt error message JWT_토큰_오류입니다("JWT 토큰 오류입니다"), 지원하지_않는_토큰_입니다("지원하지 않는 토큰 입니다"), 토큰이_올바르지_못한_형식입니다("토큰이 올바르지 못한 형식입니다"), 유효하지_않은_토큰_입니다("유효하지 않은 토큰입니다"); + private final String message; private BaseResponseMessage(String message) { diff --git a/src/main/java/com/neighbors/santa/application/baseResponse/BaseResponseStatus.java b/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseStatus.java similarity index 55% rename from src/main/java/com/neighbors/santa/application/baseResponse/BaseResponseStatus.java rename to src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseStatus.java index ba15c01..23bd58c 100644 --- a/src/main/java/com/neighbors/santa/application/baseResponse/BaseResponseStatus.java +++ b/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseStatus.java @@ -1,4 +1,4 @@ -package com.neighbors.santa.application.baseResponse; +package com.neighbors.tohero.application.baseResponse; public enum BaseResponseStatus { OK, BAD_REQUEST, JWT_ERROR; diff --git a/src/main/java/com/neighbors/santa/application/oauth/dto/OAuthLoginResponse.java b/src/main/java/com/neighbors/tohero/application/login/dto/OAuthLoginResponse.java similarity index 85% rename from src/main/java/com/neighbors/santa/application/oauth/dto/OAuthLoginResponse.java rename to src/main/java/com/neighbors/tohero/application/login/dto/OAuthLoginResponse.java index c061373..01326bd 100644 --- a/src/main/java/com/neighbors/santa/application/oauth/dto/OAuthLoginResponse.java +++ b/src/main/java/com/neighbors/tohero/application/login/dto/OAuthLoginResponse.java @@ -1,7 +1,7 @@ -package com.neighbors.santa.application.oauth.dto; +package com.neighbors.tohero.application.login.dto; import com.fasterxml.jackson.annotation.JsonInclude; -import com.neighbors.santa.common.jwt.AuthTokens; +import com.neighbors.tohero.common.jwt.AuthTokens; import lombok.Builder; import lombok.Data; diff --git a/src/main/java/com/neighbors/santa/application/oauth/dto/kakao/KakaoInfoResponse.java b/src/main/java/com/neighbors/tohero/application/login/dto/kakao/KakaoInfoResponse.java similarity index 93% rename from src/main/java/com/neighbors/santa/application/oauth/dto/kakao/KakaoInfoResponse.java rename to src/main/java/com/neighbors/tohero/application/login/dto/kakao/KakaoInfoResponse.java index 48a1a6c..9a7d36c 100644 --- a/src/main/java/com/neighbors/santa/application/oauth/dto/kakao/KakaoInfoResponse.java +++ b/src/main/java/com/neighbors/tohero/application/login/dto/kakao/KakaoInfoResponse.java @@ -1,4 +1,4 @@ -package com.neighbors.santa.application.oauth.dto.kakao; +package com.neighbors.tohero.application.login.dto.kakao; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/src/main/java/com/neighbors/santa/application/oauth/dto/kakao/KakaoTokens.java b/src/main/java/com/neighbors/tohero/application/login/dto/kakao/KakaoTokens.java similarity index 90% rename from src/main/java/com/neighbors/santa/application/oauth/dto/kakao/KakaoTokens.java rename to src/main/java/com/neighbors/tohero/application/login/dto/kakao/KakaoTokens.java index 6f8d295..7a5defe 100644 --- a/src/main/java/com/neighbors/santa/application/oauth/dto/kakao/KakaoTokens.java +++ b/src/main/java/com/neighbors/tohero/application/login/dto/kakao/KakaoTokens.java @@ -1,4 +1,4 @@ -package com.neighbors.santa.application.oauth.dto.kakao; +package com.neighbors.tohero.application.login.dto.kakao; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; diff --git a/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java b/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java new file mode 100644 index 0000000..0aff264 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java @@ -0,0 +1,47 @@ +package com.neighbors.tohero.application.login.service; + +import com.neighbors.tohero.application.login.dto.kakao.KakaoInfoResponse; +import com.neighbors.tohero.application.login.dto.OAuthLoginResponse; +import com.neighbors.tohero.application.baseResponse.BaseResponse; +import com.neighbors.tohero.application.baseResponse.BaseResponseMessage; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.common.enums.Role; +import com.neighbors.tohero.common.exception.user.UserException; +import com.neighbors.tohero.common.jwt.AuthTokens; +import com.neighbors.tohero.common.jwt.JwtProvider; +import com.neighbors.tohero.common.jwt.JwtUserDetails; +import com.neighbors.tohero.domain.login.model.User; +import com.neighbors.tohero.domain.login.service.CreateUser; +import com.neighbors.tohero.domain.login.service.oauth.kakao.RequestKakaoInfo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@RequiredArgsConstructor +public class OAuthService { + + private final RequestKakaoInfo requestUserInfo; + private final CreateUser createUser; + private final JwtProvider jwtProvider; + + public BaseResponse oAuthKaKaoLoin(String code){ + KakaoInfoResponse kakaoInfoResponse = requestUserInfo.requestKakaoInfo(code); + + User user = User.builder() + .userName(kakaoInfoResponse.getNickname()) + .email(kakaoInfoResponse.getEmail()) + .role(Role.USER) + .build(); + + User createdUser = createUser.createUser(user); + AuthTokens authTokens = jwtProvider.createToken(JwtUserDetails.from(createdUser)); + + return new BaseResponse<>( + BaseResponseStatus.OK, + BaseResponseMessage.로그인_성공했습니다.getMessage(), + OAuthLoginResponse.createSuccessObjFrom(authTokens, kakaoInfoResponse.getEmail()) + ); + } +} diff --git a/src/main/java/com/neighbors/tohero/application/notice/dto/GetNoticeResponse.java b/src/main/java/com/neighbors/tohero/application/notice/dto/GetNoticeResponse.java new file mode 100644 index 0000000..4936408 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/application/notice/dto/GetNoticeResponse.java @@ -0,0 +1,30 @@ +package com.neighbors.tohero.application.notice.dto; + +import com.neighbors.tohero.domain.notice.model.Notice; + +import java.util.List; + +public record GetNoticeResponse(List noticeList) { + + public record NoticeDTO( + String title, + String content, + String createdAT + ) { + public static NoticeDTO from(Notice notice) { + return new GetNoticeResponse.NoticeDTO( + notice.getNoticeTitle(), + notice.getNoticeContent(), + notice.getCreatedAt().toLocalDate().toString() + ); + } + } + + public static GetNoticeResponse createSuccessObjFrom(List notices) { + return new GetNoticeResponse( + notices.stream() + .map(GetNoticeResponse.NoticeDTO::from) + .toList() + ); + } +} diff --git a/src/main/java/com/neighbors/tohero/application/notice/service/NoticeService.java b/src/main/java/com/neighbors/tohero/application/notice/service/NoticeService.java new file mode 100644 index 0000000..ebe392b --- /dev/null +++ b/src/main/java/com/neighbors/tohero/application/notice/service/NoticeService.java @@ -0,0 +1,32 @@ +package com.neighbors.tohero.application.notice.service; + +import com.neighbors.tohero.application.baseResponse.BaseResponse; +import com.neighbors.tohero.application.baseResponse.BaseResponseMessage; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.application.notice.dto.GetNoticeResponse; +import com.neighbors.tohero.domain.notice.model.Notice; +import com.neighbors.tohero.domain.notice.service.GetNotice; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class NoticeService { + + private final GetNotice getNotice; + + public BaseResponse getNotice(Pageable pageable){ + + List notices = getNotice.getPagedNotice(pageable); + + return new BaseResponse<>( + BaseResponseStatus.OK, + BaseResponseMessage.공지_조회_성공했습니댜.getMessage(), + GetNoticeResponse.createSuccessObjFrom(notices) + ); + } + +} diff --git a/src/main/java/com/neighbors/santa/common/ErrorResponseUtil.java b/src/main/java/com/neighbors/tohero/common/ErrorResponseUtil.java similarity index 78% rename from src/main/java/com/neighbors/santa/common/ErrorResponseUtil.java rename to src/main/java/com/neighbors/tohero/common/ErrorResponseUtil.java index 4922914..49f3a1a 100644 --- a/src/main/java/com/neighbors/santa/common/ErrorResponseUtil.java +++ b/src/main/java/com/neighbors/tohero/common/ErrorResponseUtil.java @@ -1,8 +1,8 @@ -package com.neighbors.santa.common; +package com.neighbors.tohero.common; import com.fasterxml.jackson.databind.ObjectMapper; -import com.neighbors.santa.application.baseResponse.BaseResponse; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.application.baseResponse.BaseResponse; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; diff --git a/src/main/java/com/neighbors/tohero/common/annotaion/DomainService.java b/src/main/java/com/neighbors/tohero/common/annotaion/DomainService.java new file mode 100644 index 0000000..be33ae3 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/common/annotaion/DomainService.java @@ -0,0 +1,14 @@ +package com.neighbors.tohero.common.annotaion; + +import org.springframework.stereotype.Service; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Service +public @interface DomainService { +} diff --git a/src/main/java/com/neighbors/santa/common/config/ClientConfig.java b/src/main/java/com/neighbors/tohero/common/config/ClientConfig.java similarity index 87% rename from src/main/java/com/neighbors/santa/common/config/ClientConfig.java rename to src/main/java/com/neighbors/tohero/common/config/ClientConfig.java index 9728215..3142a9b 100644 --- a/src/main/java/com/neighbors/santa/common/config/ClientConfig.java +++ b/src/main/java/com/neighbors/tohero/common/config/ClientConfig.java @@ -1,4 +1,4 @@ -package com.neighbors.santa.common.config; +package com.neighbors.tohero.common.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/com/neighbors/santa/common/config/SecurityConfig.java b/src/main/java/com/neighbors/tohero/common/config/SecurityConfig.java similarity index 89% rename from src/main/java/com/neighbors/santa/common/config/SecurityConfig.java rename to src/main/java/com/neighbors/tohero/common/config/SecurityConfig.java index edc2a4f..99e29f1 100644 --- a/src/main/java/com/neighbors/santa/common/config/SecurityConfig.java +++ b/src/main/java/com/neighbors/tohero/common/config/SecurityConfig.java @@ -1,8 +1,8 @@ -package com.neighbors.santa.common.config; +package com.neighbors.tohero.common.config; -import com.neighbors.santa.common.security.CustomAccessDeniedHandler; -import com.neighbors.santa.common.security.CustomJwtAuthenticationEntryPoint; -import com.neighbors.santa.common.security.JwtAuthenticationFilter; +import com.neighbors.tohero.common.security.CustomAccessDeniedHandler; +import com.neighbors.tohero.common.security.CustomJwtAuthenticationEntryPoint; +import com.neighbors.tohero.common.security.JwtAuthenticationFilter; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -35,7 +35,8 @@ public WebSecurityCustomizer webSecurityCustomizer() { "/v3/api-docs/**", "/oauth/kakao/callback", "/auth/refreshToken", - "/address"); + "/address" + ); } @Bean diff --git a/src/main/java/com/neighbors/tohero/common/config/SwaggerConfig.java b/src/main/java/com/neighbors/tohero/common/config/SwaggerConfig.java new file mode 100644 index 0000000..17c266b --- /dev/null +++ b/src/main/java/com/neighbors/tohero/common/config/SwaggerConfig.java @@ -0,0 +1,40 @@ +package com.neighbors.tohero.common.config; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Arrays; + +@Configuration +public class SwaggerConfig { + @Bean + public OpenAPI openAPI() { + String jwt = "JWT"; + SecurityRequirement securityRequirement = new SecurityRequirement().addList(jwt); + Components components = new Components().addSecuritySchemes(jwt, new SecurityScheme() + .name(jwt) + .type(SecurityScheme.Type.HTTP) + .scheme("bearer") + .bearerFormat("JWT") + ); + return new OpenAPI() + .components(new Components()) + .info(apiInfo()) + .addSecurityItem(securityRequirement) + .components(components) + .servers(Arrays.asList(new Server().url("https://tohero.co.kr"), + new Server().url("http://localhost:8080"),new Server().url("https://tohero.co.kr"))); + } + private Info apiInfo() { + return new Info() + .title("TOHERO API") // API의 제목 + .description("구현 완료된 API 목록입니다.") // API에 대한 설명 + .version("1.0.0"); // API의 버전 + } +} \ No newline at end of file diff --git a/src/main/java/com/neighbors/santa/common/enums/Role.java b/src/main/java/com/neighbors/tohero/common/enums/Role.java similarity index 90% rename from src/main/java/com/neighbors/santa/common/enums/Role.java rename to src/main/java/com/neighbors/tohero/common/enums/Role.java index 2db8f2a..ff7b303 100644 --- a/src/main/java/com/neighbors/santa/common/enums/Role.java +++ b/src/main/java/com/neighbors/tohero/common/enums/Role.java @@ -1,4 +1,4 @@ -package com.neighbors.santa.common.enums; +package com.neighbors.tohero.common.enums; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; diff --git a/src/main/java/com/neighbors/santa/common/exception/jwt/bad_request/JwtBadRequestException.java b/src/main/java/com/neighbors/tohero/common/exception/jwt/bad_request/JwtBadRequestException.java similarity index 71% rename from src/main/java/com/neighbors/santa/common/exception/jwt/bad_request/JwtBadRequestException.java rename to src/main/java/com/neighbors/tohero/common/exception/jwt/bad_request/JwtBadRequestException.java index 2c8f9c0..70f8964 100644 --- a/src/main/java/com/neighbors/santa/common/exception/jwt/bad_request/JwtBadRequestException.java +++ b/src/main/java/com/neighbors/tohero/common/exception/jwt/bad_request/JwtBadRequestException.java @@ -1,6 +1,6 @@ -package com.neighbors.santa.common.exception.jwt.bad_request; +package com.neighbors.tohero.common.exception.jwt.bad_request; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; import lombok.Getter; @Getter diff --git a/src/main/java/com/neighbors/santa/common/exception/jwt/bad_request/JwtNoTokenException.java b/src/main/java/com/neighbors/tohero/common/exception/jwt/bad_request/JwtNoTokenException.java similarity index 72% rename from src/main/java/com/neighbors/santa/common/exception/jwt/bad_request/JwtNoTokenException.java rename to src/main/java/com/neighbors/tohero/common/exception/jwt/bad_request/JwtNoTokenException.java index ce19a89..c0db75d 100644 --- a/src/main/java/com/neighbors/santa/common/exception/jwt/bad_request/JwtNoTokenException.java +++ b/src/main/java/com/neighbors/tohero/common/exception/jwt/bad_request/JwtNoTokenException.java @@ -1,6 +1,6 @@ -package com.neighbors.santa.common.exception.jwt.bad_request; +package com.neighbors.tohero.common.exception.jwt.bad_request; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; import lombok.Getter; @Getter diff --git a/src/main/java/com/neighbors/santa/common/exception/jwt/bad_request/JwtUnsupportedTokenException.java b/src/main/java/com/neighbors/tohero/common/exception/jwt/bad_request/JwtUnsupportedTokenException.java similarity index 73% rename from src/main/java/com/neighbors/santa/common/exception/jwt/bad_request/JwtUnsupportedTokenException.java rename to src/main/java/com/neighbors/tohero/common/exception/jwt/bad_request/JwtUnsupportedTokenException.java index d793f83..069910e 100644 --- a/src/main/java/com/neighbors/santa/common/exception/jwt/bad_request/JwtUnsupportedTokenException.java +++ b/src/main/java/com/neighbors/tohero/common/exception/jwt/bad_request/JwtUnsupportedTokenException.java @@ -1,6 +1,6 @@ -package com.neighbors.santa.common.exception.jwt.bad_request; +package com.neighbors.tohero.common.exception.jwt.bad_request; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; import lombok.Getter; @Getter diff --git a/src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtExpiredTokenException.java b/src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtExpiredTokenException.java similarity index 73% rename from src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtExpiredTokenException.java rename to src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtExpiredTokenException.java index 7c6b5b1..d35ab60 100644 --- a/src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtExpiredTokenException.java +++ b/src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtExpiredTokenException.java @@ -1,6 +1,6 @@ -package com.neighbors.santa.common.exception.jwt.unauthorized; +package com.neighbors.tohero.common.exception.jwt.unauthorized; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; import lombok.Getter; @Getter diff --git a/src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtInvalidRefreshTokenException.java b/src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtInvalidRefreshTokenException.java similarity index 73% rename from src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtInvalidRefreshTokenException.java rename to src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtInvalidRefreshTokenException.java index da1bf98..2434e78 100644 --- a/src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtInvalidRefreshTokenException.java +++ b/src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtInvalidRefreshTokenException.java @@ -1,6 +1,6 @@ -package com.neighbors.santa.common.exception.jwt.unauthorized; +package com.neighbors.tohero.common.exception.jwt.unauthorized; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; import lombok.Getter; @Getter diff --git a/src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtInvalidTokenException.java b/src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtInvalidTokenException.java similarity index 73% rename from src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtInvalidTokenException.java rename to src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtInvalidTokenException.java index 3335ee5..fa47c55 100644 --- a/src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtInvalidTokenException.java +++ b/src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtInvalidTokenException.java @@ -1,6 +1,6 @@ -package com.neighbors.santa.common.exception.jwt.unauthorized; +package com.neighbors.tohero.common.exception.jwt.unauthorized; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; import lombok.Getter; @Getter diff --git a/src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtMalformedTokenException.java b/src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtMalformedTokenException.java similarity index 73% rename from src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtMalformedTokenException.java rename to src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtMalformedTokenException.java index 3c8c068..b5e7821 100644 --- a/src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtMalformedTokenException.java +++ b/src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtMalformedTokenException.java @@ -1,6 +1,6 @@ -package com.neighbors.santa.common.exception.jwt.unauthorized; +package com.neighbors.tohero.common.exception.jwt.unauthorized; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; import lombok.Getter; @Getter diff --git a/src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtUnauthorizedTokenException.java b/src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtUnauthorizedTokenException.java similarity index 72% rename from src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtUnauthorizedTokenException.java rename to src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtUnauthorizedTokenException.java index cb5cfee..58ec7e0 100644 --- a/src/main/java/com/neighbors/santa/common/exception/jwt/unauthorized/JwtUnauthorizedTokenException.java +++ b/src/main/java/com/neighbors/tohero/common/exception/jwt/unauthorized/JwtUnauthorizedTokenException.java @@ -1,6 +1,6 @@ -package com.neighbors.santa.common.exception.jwt.unauthorized; +package com.neighbors.tohero.common.exception.jwt.unauthorized; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; import lombok.Getter; @Getter diff --git a/src/main/java/com/neighbors/tohero/common/exception/user/UserException.java b/src/main/java/com/neighbors/tohero/common/exception/user/UserException.java new file mode 100644 index 0000000..1f8fd67 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/common/exception/user/UserException.java @@ -0,0 +1,15 @@ +package com.neighbors.tohero.common.exception.user; + +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; + +public class UserException extends RuntimeException { + + private final BaseResponseStatus status; + private final String message; + + public UserException(BaseResponseStatus status, String message) { + super(message); + this.status = status; + this.message = message; + } +} diff --git a/src/main/java/com/neighbors/santa/common/jwt/AuthTokens.java b/src/main/java/com/neighbors/tohero/common/jwt/AuthTokens.java similarity index 91% rename from src/main/java/com/neighbors/santa/common/jwt/AuthTokens.java rename to src/main/java/com/neighbors/tohero/common/jwt/AuthTokens.java index 85df556..ff0d8bf 100644 --- a/src/main/java/com/neighbors/santa/common/jwt/AuthTokens.java +++ b/src/main/java/com/neighbors/tohero/common/jwt/AuthTokens.java @@ -1,4 +1,4 @@ -package com.neighbors.santa.common.jwt; +package com.neighbors.tohero.common.jwt; import lombok.*; diff --git a/src/main/java/com/neighbors/santa/common/jwt/JwtProvider.java b/src/main/java/com/neighbors/tohero/common/jwt/JwtProvider.java similarity index 89% rename from src/main/java/com/neighbors/santa/common/jwt/JwtProvider.java rename to src/main/java/com/neighbors/tohero/common/jwt/JwtProvider.java index b07a12d..f05638d 100644 --- a/src/main/java/com/neighbors/santa/common/jwt/JwtProvider.java +++ b/src/main/java/com/neighbors/tohero/common/jwt/JwtProvider.java @@ -1,11 +1,11 @@ -package com.neighbors.santa.common.jwt; - -import com.neighbors.santa.application.baseResponse.BaseResponseMessage; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; -import com.neighbors.santa.common.enums.Role; -import com.neighbors.santa.common.exception.jwt.bad_request.JwtUnsupportedTokenException; -import com.neighbors.santa.common.exception.jwt.unauthorized.JwtInvalidTokenException; -import com.neighbors.santa.common.exception.jwt.unauthorized.JwtMalformedTokenException; +package com.neighbors.tohero.common.jwt; + +import com.neighbors.tohero.application.baseResponse.BaseResponseMessage; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.common.enums.Role; +import com.neighbors.tohero.common.exception.jwt.bad_request.JwtUnsupportedTokenException; +import com.neighbors.tohero.common.exception.jwt.unauthorized.JwtInvalidTokenException; +import com.neighbors.tohero.common.exception.jwt.unauthorized.JwtMalformedTokenException; import io.jsonwebtoken.*; import lombok.Getter; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/neighbors/santa/common/jwt/JwtUserDetails.java b/src/main/java/com/neighbors/tohero/common/jwt/JwtUserDetails.java similarity index 82% rename from src/main/java/com/neighbors/santa/common/jwt/JwtUserDetails.java rename to src/main/java/com/neighbors/tohero/common/jwt/JwtUserDetails.java index 654f232..4e3173d 100644 --- a/src/main/java/com/neighbors/santa/common/jwt/JwtUserDetails.java +++ b/src/main/java/com/neighbors/tohero/common/jwt/JwtUserDetails.java @@ -1,7 +1,7 @@ -package com.neighbors.santa.common.jwt; +package com.neighbors.tohero.common.jwt; -import com.neighbors.santa.common.enums.Role; -import com.neighbors.santa.domain.model.User; +import com.neighbors.tohero.common.enums.Role; +import com.neighbors.tohero.domain.login.model.User; import lombok.Builder; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/neighbors/santa/common/security/AuthenticationUtil.java b/src/main/java/com/neighbors/tohero/common/security/AuthenticationUtil.java similarity index 96% rename from src/main/java/com/neighbors/santa/common/security/AuthenticationUtil.java rename to src/main/java/com/neighbors/tohero/common/security/AuthenticationUtil.java index e8aaa74..d140b41 100644 --- a/src/main/java/com/neighbors/santa/common/security/AuthenticationUtil.java +++ b/src/main/java/com/neighbors/tohero/common/security/AuthenticationUtil.java @@ -1,6 +1,6 @@ -package com.neighbors.santa.common.security; +package com.neighbors.tohero.common.security; -import com.neighbors.santa.common.jwt.JwtProvider; +import com.neighbors.tohero.common.jwt.JwtProvider; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/neighbors/santa/common/security/CustomAccessDeniedHandler.java b/src/main/java/com/neighbors/tohero/common/security/CustomAccessDeniedHandler.java similarity index 82% rename from src/main/java/com/neighbors/santa/common/security/CustomAccessDeniedHandler.java rename to src/main/java/com/neighbors/tohero/common/security/CustomAccessDeniedHandler.java index 6d3c25e..5ff3789 100644 --- a/src/main/java/com/neighbors/santa/common/security/CustomAccessDeniedHandler.java +++ b/src/main/java/com/neighbors/tohero/common/security/CustomAccessDeniedHandler.java @@ -1,7 +1,7 @@ -package com.neighbors.santa.common.security; +package com.neighbors.tohero.common.security; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; -import com.neighbors.santa.common.ErrorResponseUtil; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.common.ErrorResponseUtil; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/src/main/java/com/neighbors/santa/common/security/CustomJwtAuthenticationEntryPoint.java b/src/main/java/com/neighbors/tohero/common/security/CustomJwtAuthenticationEntryPoint.java similarity index 83% rename from src/main/java/com/neighbors/santa/common/security/CustomJwtAuthenticationEntryPoint.java rename to src/main/java/com/neighbors/tohero/common/security/CustomJwtAuthenticationEntryPoint.java index edf1dfa..c9f1f23 100644 --- a/src/main/java/com/neighbors/santa/common/security/CustomJwtAuthenticationEntryPoint.java +++ b/src/main/java/com/neighbors/tohero/common/security/CustomJwtAuthenticationEntryPoint.java @@ -1,7 +1,7 @@ -package com.neighbors.santa.common.security; +package com.neighbors.tohero.common.security; -import com.neighbors.santa.application.baseResponse.BaseResponseStatus; -import com.neighbors.santa.common.ErrorResponseUtil; +import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; +import com.neighbors.tohero.common.ErrorResponseUtil; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/src/main/java/com/neighbors/santa/common/security/JwtAuthenticationFilter.java b/src/main/java/com/neighbors/tohero/common/security/JwtAuthenticationFilter.java similarity index 95% rename from src/main/java/com/neighbors/santa/common/security/JwtAuthenticationFilter.java rename to src/main/java/com/neighbors/tohero/common/security/JwtAuthenticationFilter.java index 1210f90..2b4c45f 100644 --- a/src/main/java/com/neighbors/santa/common/security/JwtAuthenticationFilter.java +++ b/src/main/java/com/neighbors/tohero/common/security/JwtAuthenticationFilter.java @@ -1,4 +1,4 @@ -package com.neighbors.santa.common.security; +package com.neighbors.tohero.common.security; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; diff --git a/src/main/java/com/neighbors/santa/common/security/UserAuthentication.java b/src/main/java/com/neighbors/tohero/common/security/UserAuthentication.java similarity index 84% rename from src/main/java/com/neighbors/santa/common/security/UserAuthentication.java rename to src/main/java/com/neighbors/tohero/common/security/UserAuthentication.java index 04f188c..4b7ff05 100644 --- a/src/main/java/com/neighbors/santa/common/security/UserAuthentication.java +++ b/src/main/java/com/neighbors/tohero/common/security/UserAuthentication.java @@ -1,7 +1,7 @@ -package com.neighbors.santa.common.security; +package com.neighbors.tohero.common.security; -import com.neighbors.santa.common.enums.Role; -import com.neighbors.santa.common.jwt.JwtUserDetails; +import com.neighbors.tohero.common.enums.Role; +import com.neighbors.tohero.common.jwt.JwtUserDetails; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.GrantedAuthority; diff --git a/src/main/java/com/neighbors/tohero/domain/login/model/User.java b/src/main/java/com/neighbors/tohero/domain/login/model/User.java new file mode 100644 index 0000000..688c4c4 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/domain/login/model/User.java @@ -0,0 +1,20 @@ +package com.neighbors.tohero.domain.login.model; + +import com.neighbors.tohero.common.enums.Role; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +@AllArgsConstructor +public class User { + private Long userId; + private String userName; + private String email; + private Role role; + + public static User of (Long userId, String userName, String email, Role role) { + return new User(userId, userName, email, role); + } +} diff --git a/src/main/java/com/neighbors/tohero/domain/login/service/CreateUser.java b/src/main/java/com/neighbors/tohero/domain/login/service/CreateUser.java new file mode 100644 index 0000000..b896525 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/domain/login/service/CreateUser.java @@ -0,0 +1,18 @@ +package com.neighbors.tohero.domain.login.service; + +import com.neighbors.tohero.common.annotaion.DomainService; +import com.neighbors.tohero.common.exception.user.UserException; +import com.neighbors.tohero.domain.login.model.User; +import com.neighbors.tohero.domain.query.UserRepository; +import lombok.RequiredArgsConstructor; + +@DomainService +@RequiredArgsConstructor +public class CreateUser { + + private final UserRepository userRepository; + + public User createUser(User user) { + return userRepository.createUser(user); + } +} diff --git a/src/main/java/com/neighbors/santa/domain/service/oauth/kakao/RequestKakaoInfo.java b/src/main/java/com/neighbors/tohero/domain/login/service/oauth/kakao/RequestKakaoInfo.java similarity index 88% rename from src/main/java/com/neighbors/santa/domain/service/oauth/kakao/RequestKakaoInfo.java rename to src/main/java/com/neighbors/tohero/domain/login/service/oauth/kakao/RequestKakaoInfo.java index aa07190..cc6f870 100644 --- a/src/main/java/com/neighbors/santa/domain/service/oauth/kakao/RequestKakaoInfo.java +++ b/src/main/java/com/neighbors/tohero/domain/login/service/oauth/kakao/RequestKakaoInfo.java @@ -1,18 +1,18 @@ -package com.neighbors.santa.domain.service.oauth.kakao; +package com.neighbors.tohero.domain.login.service.oauth.kakao; -import com.neighbors.santa.application.oauth.dto.kakao.KakaoInfoResponse; -import com.neighbors.santa.application.oauth.dto.kakao.KakaoTokens; +import com.neighbors.tohero.application.login.dto.kakao.KakaoInfoResponse; +import com.neighbors.tohero.application.login.dto.kakao.KakaoTokens; +import com.neighbors.tohero.common.annotaion.DomainService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; -import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; -@Component +@DomainService @RequiredArgsConstructor public class RequestKakaoInfo { diff --git a/src/main/java/com/neighbors/tohero/domain/notice/model/Notice.java b/src/main/java/com/neighbors/tohero/domain/notice/model/Notice.java new file mode 100644 index 0000000..88f98f9 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/domain/notice/model/Notice.java @@ -0,0 +1,21 @@ +package com.neighbors.tohero.domain.notice.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +import java.time.LocalDateTime; + +@Builder +@Getter +@AllArgsConstructor +public class Notice { + private long noticeId; + private String noticeTitle; + private String noticeContent; + private LocalDateTime createdAt; + + public static Notice of(long noticeId, String noticeTitle, String noticeContent, LocalDateTime createdAt) { + return new Notice(noticeId, noticeTitle, noticeContent, createdAt); + } +} diff --git a/src/main/java/com/neighbors/tohero/domain/notice/service/GetNotice.java b/src/main/java/com/neighbors/tohero/domain/notice/service/GetNotice.java new file mode 100644 index 0000000..8920dc7 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/domain/notice/service/GetNotice.java @@ -0,0 +1,20 @@ +package com.neighbors.tohero.domain.notice.service; + +import com.neighbors.tohero.common.annotaion.DomainService; +import com.neighbors.tohero.domain.notice.model.Notice; +import com.neighbors.tohero.domain.query.NoticeRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +@DomainService +@RequiredArgsConstructor +public class GetNotice { + + private final NoticeRepository noticeRepository; + + public List getPagedNotice(Pageable pageable) { + return noticeRepository.getPagedNotice(pageable); + } +} diff --git a/src/main/java/com/neighbors/tohero/domain/query/NoticeRepository.java b/src/main/java/com/neighbors/tohero/domain/query/NoticeRepository.java new file mode 100644 index 0000000..6a06aab --- /dev/null +++ b/src/main/java/com/neighbors/tohero/domain/query/NoticeRepository.java @@ -0,0 +1,10 @@ +package com.neighbors.tohero.domain.query; + +import com.neighbors.tohero.domain.notice.model.Notice; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +public interface NoticeRepository { + List getPagedNotice(Pageable pageable); +} diff --git a/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java b/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java new file mode 100644 index 0000000..3c5d68e --- /dev/null +++ b/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java @@ -0,0 +1,7 @@ +package com.neighbors.tohero.domain.query; + +import com.neighbors.tohero.domain.login.model.User; + +public interface UserRepository { + User createUser(User user); +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/AddressEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/AddressEntity.java new file mode 100644 index 0000000..a24b7f3 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/AddressEntity.java @@ -0,0 +1,25 @@ +package com.neighbors.tohero.infrastructure.entity; + +import com.neighbors.tohero.infrastructure.entity.base.BaseEntity; +import jakarta.persistence.*; + +@Entity +@Table(name = "`Address`") +public class AddressEntity extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "address_id") + private long addressId; + + @Column(name = "branch_office") + private String branchOffice; + + @Column(name = "road_address") + private String roadAddress; + + @Column(name = "phone_number") + private String phoneNumber; + + @Column(name = "query_path") + private String queryPath; +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/LetterEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/LetterEntity.java new file mode 100644 index 0000000..15eb1f7 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/LetterEntity.java @@ -0,0 +1,35 @@ +package com.neighbors.tohero.infrastructure.entity; + +import com.neighbors.tohero.infrastructure.entity.base.BaseEntity; +import jakarta.persistence.*; + +@Entity +@Table(name = "`Letter`") +public class LetterEntity extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "letter_id") + private long letterId; + + @Column(name = "letter_content", nullable = false) + private String letterContent; + + @Column(name = "is_opened", nullable = false) + private boolean isOpened; + + @Column(name = "from_user_name", nullable = false) + private String fromUserName; + + @Column(name = "target_name", nullable = true) + private String targetName; + + @ManyToOne + @JoinColumn(name = "address_id", nullable = true) + private AddressEntity address; + + @ManyToOne + @JoinColumn(name = "user_id", nullable = true) + private UserEntity user; + + +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/NoticeEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/NoticeEntity.java new file mode 100644 index 0000000..2a926fa --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/NoticeEntity.java @@ -0,0 +1,21 @@ +package com.neighbors.tohero.infrastructure.entity; + +import com.neighbors.tohero.infrastructure.entity.base.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; + +@Entity +@Getter +@Table(name = "Notice") +public class NoticeEntity extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "notice_id") + private long noticeId; + + @Column(name = "notice_title") + private String noticeTitle; + + @Column(name = "notice_content") + private String noticeContent; +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/TidingsEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/TidingsEntity.java new file mode 100644 index 0000000..4a353f1 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/TidingsEntity.java @@ -0,0 +1,19 @@ +package com.neighbors.tohero.infrastructure.entity; + +import jakarta.persistence.*; + +@Entity +@Table(name = "`Tidings`") +public class TidingsEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "tidings_id") + private long tidingsId; + + @Column(name = "tidings_title") + private String tidingsTitle; + + @Column(name = "tidings_content") + private String tidingsContent; +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java new file mode 100644 index 0000000..9253aab --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java @@ -0,0 +1,38 @@ +package com.neighbors.tohero.infrastructure.entity; + +import com.neighbors.tohero.common.enums.Role; +import com.neighbors.tohero.infrastructure.entity.base.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; + +@Entity +@Table(name = "`User`") +@Getter +public class UserEntity extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private long userId; + + @Column(name = "nickname", nullable = false) + private String nickName; + + @Column(name = "email", nullable = false) + private String email; + + @Column(name = "role", nullable = false) + private Role role; + + public UserEntity() { + } + + public UserEntity(String nickName, String email, Role role){ + this.nickName = nickName; + this.email = email; + this.role = role; + } + + public static UserEntity of(String nickName, String email, Role role) { + return new UserEntity(nickName, email, role); + } +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/base/BaseEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/base/BaseEntity.java new file mode 100644 index 0000000..dd42f62 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/base/BaseEntity.java @@ -0,0 +1,27 @@ +package com.neighbors.tohero.infrastructure.entity.base; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Data +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseEntity { + @Column(name = "status") + public String status; + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + public LocalDateTime created_at; + + @LastModifiedDate + @Column(name = "updated_at") + public LocalDateTime updated_at; +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/mapper/NoticeMapper.java b/src/main/java/com/neighbors/tohero/infrastructure/mapper/NoticeMapper.java new file mode 100644 index 0000000..729a9d7 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/mapper/NoticeMapper.java @@ -0,0 +1,13 @@ +package com.neighbors.tohero.infrastructure.mapper; + +import com.neighbors.tohero.domain.notice.model.Notice; +import com.neighbors.tohero.infrastructure.entity.NoticeEntity; +import org.springframework.stereotype.Component; + +@Component +public class NoticeMapper { + + public Notice toDomain(NoticeEntity noticeEntity) { + return Notice.of(noticeEntity.getNoticeId(), noticeEntity.getNoticeTitle(), noticeEntity.getNoticeContent(), noticeEntity.getCreated_at()); + } +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java b/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java new file mode 100644 index 0000000..942eea5 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java @@ -0,0 +1,25 @@ +package com.neighbors.tohero.infrastructure.mapper; + +import com.neighbors.tohero.domain.login.model.User; +import com.neighbors.tohero.infrastructure.entity.UserEntity; +import org.springframework.stereotype.Component; + +@Component +public class UserMapper { + public UserEntity toEntity(User user){ + return UserEntity.of( + user.getUserName(), + user.getEmail(), + user.getRole() + ); + } + + public User toDomain(UserEntity userEntity){ + return User.of( + userEntity.getUserId(), + userEntity.getNickName(), + userEntity.getEmail(), + userEntity.getRole() + ); + } +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NoticeRepositoryImpl.java b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NoticeRepositoryImpl.java new file mode 100644 index 0000000..55c6111 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NoticeRepositoryImpl.java @@ -0,0 +1,29 @@ +package com.neighbors.tohero.infrastructure.query.impl; + +import com.neighbors.tohero.domain.notice.model.Notice; +import com.neighbors.tohero.domain.query.NoticeRepository; +import com.neighbors.tohero.infrastructure.entity.NoticeEntity; +import com.neighbors.tohero.infrastructure.mapper.NoticeMapper; +import com.neighbors.tohero.infrastructure.repository.NoticeEntityRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class NoticeRepositoryImpl implements NoticeRepository { + + private final NoticeEntityRepository noticeEntityRepository; + private final NoticeMapper noticeMapper; + + @Override + public List getPagedNotice(Pageable pageable) { + List noticeEntities = noticeEntityRepository.findPagedNoticeEntity(pageable).getContent(); + + return noticeEntities.stream() + .map(noticeMapper::toDomain) + .toList(); + } +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java new file mode 100644 index 0000000..d3c9039 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java @@ -0,0 +1,29 @@ +package com.neighbors.tohero.infrastructure.query.impl; + +import com.neighbors.tohero.domain.login.model.User; +import com.neighbors.tohero.domain.query.UserRepository; +import com.neighbors.tohero.infrastructure.entity.UserEntity; +import com.neighbors.tohero.infrastructure.mapper.UserMapper; +import com.neighbors.tohero.infrastructure.repository.UserEntityRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class UserRepositoryImpl implements UserRepository { + + private final UserEntityRepository userEntityRepository; + private final UserMapper userMapper; + + @Override + public User createUser(User user) { + UserEntity existedUserEntity = userEntityRepository.findByEmail(user.getEmail()); + if (existedUserEntity != null) { + return userMapper.toDomain(existedUserEntity); + } + UserEntity userEntity = userMapper.toEntity(user); + userEntityRepository.save(userEntity); + UserEntity createdUserEntity = userEntityRepository.findByEmail(user.getEmail()); + return userMapper.toDomain(createdUserEntity); + } +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/repository/NoticeEntityRepository.java b/src/main/java/com/neighbors/tohero/infrastructure/repository/NoticeEntityRepository.java new file mode 100644 index 0000000..a664ebb --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/repository/NoticeEntityRepository.java @@ -0,0 +1,15 @@ +package com.neighbors.tohero.infrastructure.repository; + +import com.neighbors.tohero.infrastructure.entity.NoticeEntity; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface NoticeEntityRepository extends JpaRepository { + + @Query("SELECT n FROM NoticeEntity n") + Slice findPagedNoticeEntity(Pageable pageable); +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/repository/UserEntityRepository.java b/src/main/java/com/neighbors/tohero/infrastructure/repository/UserEntityRepository.java new file mode 100644 index 0000000..b5fcf5c --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/repository/UserEntityRepository.java @@ -0,0 +1,11 @@ +package com.neighbors.tohero.infrastructure.repository; + +import com.neighbors.tohero.infrastructure.entity.UserEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserEntityRepository extends JpaRepository { + boolean existsByEmail(String email); + UserEntity findByEmail(String email); +} diff --git a/src/main/java/com/neighbors/tohero/presentation/NoticeController.java b/src/main/java/com/neighbors/tohero/presentation/NoticeController.java new file mode 100644 index 0000000..ab12acf --- /dev/null +++ b/src/main/java/com/neighbors/tohero/presentation/NoticeController.java @@ -0,0 +1,27 @@ +package com.neighbors.tohero.presentation; + +import com.neighbors.tohero.application.baseResponse.BaseResponse; +import com.neighbors.tohero.application.notice.service.NoticeService; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.data.domain.Pageable; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("") +public class NoticeController { + + private final NoticeService noticeService; + + @Operation(summary = "공지 API", description = "공지사항 무한페이징 API입니다.") + @GetMapping("/notice") + public ResponseEntity getNotice(@ParameterObject Pageable pageable){ + return ResponseEntity.ok() + .body(noticeService.getNotice(pageable)); + } +} diff --git a/src/main/java/com/neighbors/tohero/presentation/OAuthController.java b/src/main/java/com/neighbors/tohero/presentation/OAuthController.java new file mode 100644 index 0000000..02edec8 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/presentation/OAuthController.java @@ -0,0 +1,23 @@ +package com.neighbors.tohero.presentation; + +import com.neighbors.tohero.application.login.service.OAuthService; +import com.neighbors.tohero.application.baseResponse.BaseResponse; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("") +public class OAuthController { + + private final OAuthService oAuthService; + + @Operation(summary = "카카오 로그인 API", description = "카카오톡으로 로그인하기 API입니다.") + @GetMapping("/oauth/kakao/callback") + public ResponseEntity kakaoLogin(@RequestParam("code") String code) { + return ResponseEntity.ok() + .body(oAuthService.oAuthKaKaoLoin(code)); + } +} diff --git a/src/test/java/com/neighbors/santa/SantaApplicationTests.java b/src/test/java/com/neighbors/tohero/SantaApplicationTests.java similarity index 85% rename from src/test/java/com/neighbors/santa/SantaApplicationTests.java rename to src/test/java/com/neighbors/tohero/SantaApplicationTests.java index 4020431..2bf4cdd 100644 --- a/src/test/java/com/neighbors/santa/SantaApplicationTests.java +++ b/src/test/java/com/neighbors/tohero/SantaApplicationTests.java @@ -1,4 +1,4 @@ -package com.neighbors.santa; +package com.neighbors.tohero; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;