diff --git a/.gitignore b/.gitignore index 4c7e9c2..af017c9 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,5 @@ out/ .vscode/ application-oauth.properties -application-aws.properties \ No newline at end of file +application-aws.properties +application-secret.properties \ No newline at end of file diff --git a/build.gradle b/build.gradle index 5eac240..1e14267 100644 --- a/build.gradle +++ b/build.gradle @@ -20,13 +20,12 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' - runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' + runtimeOnly 'com.h2database:h2' implementation 'com.google.code.gson:gson:2.8.7' - implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' -// compileOnly 'org.springframework.session:spring-session-jdbc' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/SwaggerConfig.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/SwaggerConfig.java similarity index 94% rename from src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/SwaggerConfig.java rename to src/main/java/HYLikeLion/gitppo/gitppoProject/config/SwaggerConfig.java index b720a7c..5f7d8a7 100644 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/SwaggerConfig.java +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/SwaggerConfig.java @@ -1,4 +1,4 @@ -package HYLikeLion.gitppo.gitppoProject.config.auth; +package HYLikeLion.gitppo.gitppoProject.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/WebConfig.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/WebConfig.java new file mode 100644 index 0000000..f77bc67 --- /dev/null +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/WebConfig.java @@ -0,0 +1,19 @@ +package HYLikeLion.gitppo.gitppoProject.config; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@RequiredArgsConstructor +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowedMethods("*") + .allowedHeaders("*"); + } +} diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/CustomOAuth2UserService.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/CustomOAuth2UserService.java deleted file mode 100644 index db56b3d..0000000 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/CustomOAuth2UserService.java +++ /dev/null @@ -1,58 +0,0 @@ -package HYLikeLion.gitppo.gitppoProject.config.auth; - -import HYLikeLion.gitppo.gitppoProject.domain.user.Role; -import java.time.LocalDate; -import java.util.Collections; - -import javax.servlet.http.HttpSession; - -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; -import org.springframework.security.oauth2.core.OAuth2AuthenticationException; -import org.springframework.security.oauth2.core.user.DefaultOAuth2User; -import org.springframework.security.oauth2.core.user.OAuth2User; -import org.springframework.stereotype.Service; - -import HYLikeLion.gitppo.gitppoProject.config.auth.dto.OAuthAttributes; -import HYLikeLion.gitppo.gitppoProject.config.auth.dto.SessionUser; -import HYLikeLion.gitppo.gitppoProject.domain.user.User; -import HYLikeLion.gitppo.gitppoProject.repository.user.UserRepository; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Service -public class CustomOAuth2UserService implements OAuth2UserService { - private final UserRepository userRepository; - private final HttpSession httpSession; - - @Override - public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { - OAuth2UserService delegate = new DefaultOAuth2UserService(); - OAuth2User oAuth2User = delegate.loadUser(userRequest); - - // oauth 진행시 키가 되는 값. - String userNameAttributeName = - userRequest.getClientRegistration().getProviderDetails().getUserInfoEndpoint().getUserNameAttributeName(); - - OAuthAttributes attributes = OAuthAttributes.ofGithub(userNameAttributeName, - oAuth2User.getAttributes()); // 정보 가져옴 - User user = saveOrUpdate(attributes); //유저값 생성 - - httpSession.setAttribute("user", new SessionUser(user)); // 세션에 user 저장. - - return new DefaultOAuth2User( - Collections.singleton(new SimpleGrantedAuthority(user.getRoleKey())), attributes.getAttributes(), - attributes.getNameAttributeKey() - ); // oauthUser 저장. - } - - private User saveOrUpdate(OAuthAttributes attributes) { - User authUser = userRepository.findByGithubId(attributes.getGithubId()) - .map(entity -> entity.update(attributes.getName(), attributes.getEmail(), LocalDate.now(), Role.USER)) - .orElse(attributes.toEntity()); - ; - return userRepository.save(authUser); // user 값 저장. - } -} diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/LoginUser.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/LoginUser.java deleted file mode 100644 index a4f6516..0000000 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/LoginUser.java +++ /dev/null @@ -1,11 +0,0 @@ -package HYLikeLion.gitppo.gitppoProject.config.auth; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target(ElementType.PARAMETER) -@Retention(RetentionPolicy.RUNTIME) -public @interface LoginUser { -} diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/LoginUserArgumentResolver.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/LoginUserArgumentResolver.java deleted file mode 100644 index 83dd9a3..0000000 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/LoginUserArgumentResolver.java +++ /dev/null @@ -1,35 +0,0 @@ -package HYLikeLion.gitppo.gitppoProject.config.auth; - -import javax.servlet.http.HttpSession; - -import org.springframework.core.MethodParameter; -import org.springframework.stereotype.Component; -import org.springframework.web.bind.support.WebDataBinderFactory; -import org.springframework.web.context.request.NativeWebRequest; -import org.springframework.web.method.support.HandlerMethodArgumentResolver; -import org.springframework.web.method.support.ModelAndViewContainer; - -import HYLikeLion.gitppo.gitppoProject.config.auth.dto.SessionUser; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -public class LoginUserArgumentResolver implements HandlerMethodArgumentResolver { - - private final HttpSession httpSession; - - @Override - public boolean supportsParameter(MethodParameter parameter) { - // 로그인 되어있는지, 세션유저가 맞는지 확인. - boolean isLoginUserAnnotation = parameter.getParameterAnnotation(LoginUser.class) != null; - boolean isUserClass = SessionUser.class.equals(parameter.getParameterType()); - return isLoginUserAnnotation && isUserClass; - } - - @Override - public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, - NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { - // 세션값이 있는지 확인. - return httpSession.getAttribute("user"); - } -} diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/SecurityConfig.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/SecurityConfig.java deleted file mode 100644 index db95a6d..0000000 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/SecurityConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package HYLikeLion.gitppo.gitppoProject.config.auth; - -import org.springframework.context.annotation.Bean; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.CorsConfigurationSource; -import org.springframework.web.cors.CorsUtils; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; - -import HYLikeLion.gitppo.gitppoProject.domain.user.Role; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - private final CustomOAuth2UserService customOAuth2UserService; - - @Override - protected void configure(HttpSecurity http) throws Exception { - http - .cors().and() // cors 허용 - - .csrf().disable() - .headers().frameOptions().disable().and() // h2용도 - .authorizeRequests()// url별 권한 설정. - // .antMatchers("/", "/css/**", "/images/**", "/js/**", "/h2-console/**", "/login/**", "/test/**", - // "/swagger-ui/**", "/swagger-resources/**", "/api/term", "/v3/api-docs", "/api/portfolio/lookup/**", - // "/auth/**").permitAll() - // .antMatchers("/api/**").hasRole(Role.USER.name()) - - .antMatchers("/", "/css/**", "/images/**", "/js/**", "/h2-console/**", "/login/**", - "/test/**", "/auth/**", "/api/**", "/swagger-ui/**", "/swagger-resources/**", - "/v3/api-docs", "/auth/**").permitAll() - .anyRequest().authenticated().and() - - .logout() - .logoutSuccessUrl("/") - .and() - - .oauth2Login() - .userInfoEndpoint() - .userService(customOAuth2UserService); //로그인 이후 진행되는 서비스 파일. - } -} diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/WebConfig.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/WebConfig.java deleted file mode 100644 index 5dcf3d3..0000000 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/WebConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package HYLikeLion.gitppo.gitppoProject.config.auth; - -import java.util.List; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.method.support.HandlerMethodArgumentResolver; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Configuration -public class WebConfig implements WebMvcConfigurer { - private final LoginUserArgumentResolver loginUserArgumentResolver; - - @Override - public void addArgumentResolvers(List resolvers) { - resolvers.add(loginUserArgumentResolver); // 로그인 유저를 자동으로 가져오고 + 확인하기 위한 resolver 추가. - } - - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - .allowedOrigins("*") - .allowedMethods("*") - .allowedHeaders("*"); - } -} diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/dto/OAuthAttributes.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/dto/OAuthAttributes.java deleted file mode 100644 index b97a57f..0000000 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/dto/OAuthAttributes.java +++ /dev/null @@ -1,49 +0,0 @@ -package HYLikeLion.gitppo.gitppoProject.config.auth.dto; - -import java.time.LocalDate; -import java.util.Map; - -import HYLikeLion.gitppo.gitppoProject.domain.user.Role; -import HYLikeLion.gitppo.gitppoProject.domain.user.User; -import lombok.Builder; -import lombok.Getter; - -@Getter -public class OAuthAttributes { - private Map attributes; - private String nameAttributeKey; - private String name; - private String email; - private Long githubId; - - @Builder - public OAuthAttributes(Map attributes, String nameAttributeKey, String name, String email, - Long githubId) { - this.attributes = attributes; - this.nameAttributeKey = nameAttributeKey; - this.name = name; - this.email = email; - this.githubId = githubId; - } - - public static OAuthAttributes ofGithub(String userNameAttributeName, Map attributes) { - return OAuthAttributes.builder() - .name(String.valueOf(attributes.get("name"))) - .email(String.valueOf(attributes.get("email"))) - .githubId(((Integer)attributes.get("id")).longValue()) - .attributes(attributes) - .nameAttributeKey(userNameAttributeName) - .build(); - } - - public User toEntity() { - return User.builder() - .name(name) - .email(email) - .role(Role.USER) - .githubId(githubId) - .joinDate(LocalDate.now()) - .loginDate(LocalDate.now()) - .build(); - } -} diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/dto/SessionUser.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/dto/SessionUser.java deleted file mode 100644 index c95f2d9..0000000 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/config/auth/dto/SessionUser.java +++ /dev/null @@ -1,24 +0,0 @@ -package HYLikeLion.gitppo.gitppoProject.config.auth.dto; - -import java.io.Serializable; -import java.time.LocalDate; - -import HYLikeLion.gitppo.gitppoProject.domain.user.User; -import lombok.Getter; - -@Getter -public class SessionUser implements Serializable { - private Long id; - private String name; - private String email; - private Long githubId; - private LocalDate loginDate; - - public SessionUser(User user) { - this.id = user.getId(); - this.name = user.getName(); - this.email = user.getEmail(); - this.githubId = user.getGithubId(); - this.loginDate = user.getLoginDate(); - } -} diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/AuthApiController.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/AuthApiController.java index d52463e..bf0503a 100644 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/AuthApiController.java +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/AuthApiController.java @@ -1,5 +1,6 @@ package HYLikeLion.gitppo.gitppoProject.controller; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -23,32 +24,25 @@ @RestController @RequiredArgsConstructor public class AuthApiController { - - // private final String REDIRECT_URL = "http://localhost:30/00"; - private final String TOKEN_REQUEST_URL = "https://github.com/login/oauth/access_token"; - private final String PROFILE_REQUEST_URL = "https://api.github.com/user"; - private final String REDIRECT_URL = "http://gitppo.github.io/Frontend/"; private final UserService userService; + @Value("${github.id}") + private String id; + + @Value("${github.secret}") + private String secret; + @PostMapping("/auth") private User getOAuthToken(@RequestParam String code) throws JsonProcessingException { - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate.exchange(TOKEN_REQUEST_URL, - HttpMethod.POST, - getCodeRequestHttpEntity(code), - String.class); - + final String tokenRequestUrl = "https://github.com/login/oauth/access_token"; + final String profileRequestUrl = "https://api.github.com/user"; ObjectMapper objectMapper = new ObjectMapper(); - OAuthToken oAuthToken = objectMapper.readValue(response.getBody(), OAuthToken.class); - System.out.println(oAuthToken); - ResponseEntity profileResponse = restTemplate.exchange( - PROFILE_REQUEST_URL, - HttpMethod.GET, - getProfileRequestEntity(oAuthToken), - String.class - ); + ResponseEntity response = getResponse(getCodeRequestHttpEntity(code), tokenRequestUrl, HttpMethod.POST); + OAuthToken oAuthToken = objectMapper.readValue(response.getBody(), OAuthToken.class); + ResponseEntity profileResponse = getResponse(getProfileRequestEntity(oAuthToken), profileRequestUrl, + HttpMethod.GET); JsonNode root = objectMapper.readTree(profileResponse.getBody()); return userService.saveOrUpdate(root); @@ -56,9 +50,10 @@ private User getOAuthToken(@RequestParam String code) throws JsonProcessingExcep private HttpEntity> getCodeRequestHttpEntity(String code) { MultiValueMap params = new LinkedMultiValueMap<>(); - // 주의! - params.add("client_id", "93ad6f9f68a2f8fbd473"); - params.add("client_secret", "b548d698a91c1057736919d1fc12555f1443b24c"); + String REDIRECT_URL = "https://gitppo.github.io/Frontend/"; + + params.add("client_id", id); + params.add("client_secret", secret); params.add("code", code); params.add("redirect_url", REDIRECT_URL); @@ -67,11 +62,20 @@ private HttpEntity> getCodeRequestHttpEntity(Strin return new HttpEntity<>(params, headers); } - private HttpEntity> getProfileRequestEntity( - OAuthToken oAuthToken) { + private HttpEntity> getProfileRequestEntity(OAuthToken oAuthToken) { HttpHeaders infoRequestHeaders = new HttpHeaders(); infoRequestHeaders.add("Authorization", "token " + oAuthToken.getAccessToken()); return new HttpEntity<>(infoRequestHeaders); } + private ResponseEntity getResponse(HttpEntity> requestEntity, String url, + HttpMethod httpMethod) { + RestTemplate restTemplate = new RestTemplate(); + return restTemplate.exchange( + url, + httpMethod, + requestEntity, + String.class); + } + } diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/PersonalApiController.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/PersonalApiController.java index eecdc30..347411e 100644 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/PersonalApiController.java +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/PersonalApiController.java @@ -5,7 +5,6 @@ import HYLikeLion.gitppo.gitppoProject.dto.ResponseDTO; import HYLikeLion.gitppo.gitppoProject.dto.StatusEnum; import HYLikeLion.gitppo.gitppoProject.service.PersonalService; -import HYLikeLion.gitppo.gitppoProject.service.PortfolioService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -32,82 +31,81 @@ public class PersonalApiController { private final PersonalService personalService; - private final PortfolioService portfolioService; @Operation(summary = "개인정보 조회") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "개인 정보 조회 완료", content = @Content(schema = @Schema(implementation = Personal.class))), + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "개인 정보 조회 완료", content = @Content(schema = @Schema(implementation = PersonalDTO.ResponsePersonal.class))), }) @GetMapping("personal") - public ResponseEntity getPortfolio( - @Parameter(description = "Personal id", example = "1") @RequestParam Long id) throws - NotFoundException { + public ResponseEntity getPortfolio( + @Parameter(description = "Personal id", example = "1") @RequestParam Long id) throws + NotFoundException { Personal personal = personalService.getPersonal(id); HttpHeaders header = new HttpHeaders(); - ResponseDTO.ResponseObject dto = ResponseDTO.ResponseObject.builder() - .status(StatusEnum.OK) - .data(personal) - .message("개인 정보 조회 완료") - .build(); + PersonalDTO.ResponsePersonal dto = PersonalDTO.ResponsePersonal.builder() + .status(StatusEnum.OK) + .data(personal) + .message("개인 정보 조회 완료") + .build(); return new ResponseEntity<>(dto, header, HttpStatus.OK); } @Operation(summary = "개인정보 저장") @ApiResponses({ - @ApiResponse(responseCode = "200", description = "개인 정보 저장 완료", content = @Content(schema = @Schema(implementation = Personal.class))), + @ApiResponse(responseCode = "200", description = "개인 정보 저장 완료", content = @Content(schema = @Schema(implementation = PersonalDTO.ResponsePersonal.class))), }) @PostMapping("personal") - public ResponseEntity postPortfolio( - @RequestBody PersonalDTO.AddPersonal dto) { + public ResponseEntity postPortfolio( + @RequestBody PersonalDTO.AddPersonal dto) { Personal personal = personalService.savePersonal(dto); HttpHeaders header = new HttpHeaders(); - ResponseDTO.ResponseObject response = ResponseDTO.ResponseObject.builder() - .status(StatusEnum.OK) - .data(personal) - .message("개인 정보 저장 완료") - .build(); + PersonalDTO.ResponsePersonal response = PersonalDTO.ResponsePersonal.builder() + .status(StatusEnum.OK) + .data(personal) + .message("개인 정보 저장 완료") + .build(); return new ResponseEntity<>(response, header, HttpStatus.OK); } @Operation(summary = "개인정보 삭제") @ApiResponses({ - @ApiResponse(responseCode = "200", description = "개인 정보 삭제 완료"), + @ApiResponse(responseCode = "200", description = "개인 정보 삭제 완료", content = @Content(schema = @Schema(implementation = ResponseDTO.ResponseId.class))), }) @DeleteMapping("personal") public ResponseEntity deletePortfolio( - @Parameter(description = "Personal id", required = true, example = "1") @RequestParam Long id) { + @Parameter(description = "Personal id", required = true, example = "1") @RequestParam Long id) { personalService.deletePersonal(id); HttpHeaders header = new HttpHeaders(); ResponseDTO.ResponseId response = ResponseDTO.ResponseId.builder() - .status(StatusEnum.OK) - .id(id) - .message("개인 정보 삭제 완료") - .build(); + .status(StatusEnum.OK) + .id(id) + .message("개인 정보 삭제 완료") + .build(); return new ResponseEntity<>(response, header, HttpStatus.OK); } @Operation(summary = "개인정보 수정") @ApiResponses({ - @ApiResponse(responseCode = "200", description = "개인 정보 수정 완료", content = @Content(schema = @Schema(implementation = Personal.class))), + @ApiResponse(responseCode = "200", description = "개인 정보 수정 완료", content = @Content(schema = @Schema(implementation = PersonalDTO.ResponsePersonal.class))), }) @PutMapping("personal") - public ResponseEntity editPersonal( - @RequestBody PersonalDTO.EditPersonal dto) throws NotFoundException { + public ResponseEntity editPersonal( + @RequestBody PersonalDTO.EditPersonal dto) throws NotFoundException { Personal personal = personalService.editPersonal(dto); HttpHeaders header = new HttpHeaders(); - ResponseDTO.ResponseObject response = ResponseDTO.ResponseObject.builder() - .status(StatusEnum.OK) - .data(personal) - .message("개인 정보 저장 완료") - .build(); + PersonalDTO.ResponsePersonal response = PersonalDTO.ResponsePersonal.builder() + .status(StatusEnum.OK) + .data(personal) + .message("개인 정보 저장 완료") + .build(); return new ResponseEntity<>(response, header, HttpStatus.OK); } diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/PersonalContentController.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/PersonalContentController.java index 0d0a095..901af9a 100644 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/PersonalContentController.java +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/PersonalContentController.java @@ -1,7 +1,5 @@ package HYLikeLion.gitppo.gitppoProject.controller; -import HYLikeLion.gitppo.gitppoProject.domain.personal.Skill; -import HYLikeLion.gitppo.gitppoProject.domain.personal.Sns; import HYLikeLion.gitppo.gitppoProject.dto.ResponseDTO; import HYLikeLion.gitppo.gitppoProject.dto.ResponseDTO.ResponseId; import HYLikeLion.gitppo.gitppoProject.dto.StatusEnum; @@ -9,7 +7,6 @@ import HYLikeLion.gitppo.gitppoProject.service.personal.AwardsService; import HYLikeLion.gitppo.gitppoProject.service.personal.CareerService; import HYLikeLion.gitppo.gitppoProject.service.personal.EducationService; -import HYLikeLion.gitppo.gitppoProject.service.personal.IntroductionService; import HYLikeLion.gitppo.gitppoProject.service.personal.LicenseService; import HYLikeLion.gitppo.gitppoProject.service.personal.PaperService; import HYLikeLion.gitppo.gitppoProject.service.personal.SkillService; diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/TermApiController.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/TermApiController.java index 92c2d5f..3a21a90 100644 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/TermApiController.java +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/TermApiController.java @@ -1,8 +1,5 @@ package HYLikeLion.gitppo.gitppoProject.controller; -import java.util.List; - -import HYLikeLion.gitppo.gitppoProject.domain.personal.Personal; import HYLikeLion.gitppo.gitppoProject.domain.term.Term; import HYLikeLion.gitppo.gitppoProject.domain.term.TermAgreement; import HYLikeLion.gitppo.gitppoProject.dto.TermDTO; @@ -12,9 +9,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; -import javassist.NotFoundException; +import java.util.List; import lombok.RequiredArgsConstructor; - import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -36,7 +32,7 @@ public class TermApiController { @ApiResponse(responseCode = "200", description = "약관 조회 완료", content = @Content(schema = @Schema(implementation = TermDTO.GetResult.class))), }) @GetMapping("/term") - public ResponseEntity getTerms() throws NotFoundException { + public ResponseEntity getTerms(){ List terms = termService.findTerms(); HttpHeaders header = new HttpHeaders(); diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/skillListController.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/skillListController.java index 2d6b24d..fe29f82 100644 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/skillListController.java +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/controller/skillListController.java @@ -1,5 +1,6 @@ package HYLikeLion.gitppo.gitppoProject.controller; +import HYLikeLion.gitppo.gitppoProject.dto.SkillListDTO; import java.util.List; import org.springframework.http.HttpHeaders; @@ -25,23 +26,23 @@ @RestController @RequestMapping("/api/") public class skillListController { - private final SkillListService skillListService; + private final SkillListService skillListService; - @Operation(summary = "기술 스텍 리스트 조회") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "스킬 리스트 조회 완료", content = @Content(schema = @Schema(implementation = SkillContent.class))), - }) - @GetMapping("/skillList") - public ResponseEntity getSkillList() throws NotFoundException { - HttpHeaders header = new HttpHeaders(); - List skills = skillListService.findSkillList(); + @Operation(summary = "기술 스텍 리스트 조회") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "스킬 리스트 조회 완료", content = @Content(schema = @Schema(implementation = SkillListDTO.ResponseList.class))), + }) + @GetMapping("/skillList") + public ResponseEntity getSkillList() { + HttpHeaders header = new HttpHeaders(); + List skills = skillListService.findSkillList(); - ResponseDTO.ResponseObject dto = ResponseDTO.ResponseObject.builder() - .status(StatusEnum.OK) - .data(skills) - .message("스킬 리스트 조회 완료") - .build(); + SkillListDTO.ResponseList dto = SkillListDTO.ResponseList.builder() + .status(StatusEnum.OK) + .data(skills) + .message("스킬 리스트 조회 완료") + .build(); - return new ResponseEntity<>(dto, header, HttpStatus.OK); - } + return new ResponseEntity<>(dto, header, HttpStatus.OK); + } } diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/domain/personal/Personal.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/domain/personal/Personal.java index 6df4928..cec1305 100644 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/domain/personal/Personal.java +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/domain/personal/Personal.java @@ -1,8 +1,8 @@ package HYLikeLion.gitppo.gitppoProject.domain.personal; -import java.util.ArrayList; +import HYLikeLion.gitppo.gitppoProject.domain.portfolio.Portfolio; +import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; - import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -11,20 +11,18 @@ import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; - -import HYLikeLion.gitppo.gitppoProject.domain.portfolio.Portfolio; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; @AllArgsConstructor @NoArgsConstructor @Entity @Builder @Getter +@Schema(description = "개인정보") public class Personal { @Id @@ -70,14 +68,14 @@ public class Personal { private List papers; public void update(Introduction introduction, - BasicInfo basicInfo, - List careers, - List educations, - List licenses, - List activities, - List awards, List snsList, - List skills, - List papers) { + BasicInfo basicInfo, + List careers, + List educations, + List licenses, + List activities, + List awards, List snsList, + List skills, + List papers) { this.introduction = introduction; this.basicInfo = basicInfo; this.careers = careers; diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/PersonalDTO.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/PersonalDTO.java index dc5415d..9673729 100644 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/PersonalDTO.java +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/PersonalDTO.java @@ -4,12 +4,29 @@ import HYLikeLion.gitppo.gitppoProject.domain.personal.*; import HYLikeLion.gitppo.gitppoProject.domain.portfolio.Portfolio; -import HYLikeLion.gitppo.gitppoProject.domain.user.User; +import lombok.Builder; import lombok.Data; +import lombok.Getter; import lombok.NoArgsConstructor; public class PersonalDTO { + @NoArgsConstructor + @Getter + public static class ResponsePersonal { + private StatusEnum status; + private String message; + private Personal data; + + @Builder + public ResponsePersonal(StatusEnum status, String message, Personal data) { + this.status = status; + this.message = message; + this.data = data; + } + } + + @NoArgsConstructor @Data public static class AddPersonal { diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/ResponseDTO.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/ResponseDTO.java index d442c51..7017f27 100644 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/ResponseDTO.java +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/ResponseDTO.java @@ -6,17 +6,17 @@ import lombok.Getter; import lombok.NoArgsConstructor; -public class ResponseDTO { +public class ResponseDTO{ @NoArgsConstructor @Getter - public static class ResponseObject { + public static class ResponseObject { private StatusEnum status; private String message; - private Object data; + private T data; @Builder - public ResponseObject(StatusEnum status, String message, Object data) { + public ResponseObject(StatusEnum status, String message, T data) { this.status = status; this.message = message; this.data = data; @@ -25,13 +25,13 @@ public ResponseObject(StatusEnum status, String message, Object data) { @NoArgsConstructor @Getter - public static class ResponseList { + public static class ResponseList { private StatusEnum status; private String message; - private List data; + private List data; @Builder - public ResponseList(StatusEnum status, String message, List data) { + public ResponseList(StatusEnum status, String message, List data) { this.status = status; this.message = message; this.data = data; diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/SkillListDTO.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/SkillListDTO.java new file mode 100644 index 0000000..4a05316 --- /dev/null +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/dto/SkillListDTO.java @@ -0,0 +1,25 @@ +package HYLikeLion.gitppo.gitppoProject.dto; + +import HYLikeLion.gitppo.gitppoProject.domain.skillList.SkillContent; +import java.util.List; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +public class SkillListDTO { + + @NoArgsConstructor + @Getter + public static class ResponseList{ + private StatusEnum status; + private String message; + private List data; + + @Builder + public ResponseList(StatusEnum status, String message, List data) { + this.status = status; + this.message = message; + this.data = data; + } + } +} diff --git a/src/main/java/HYLikeLion/gitppo/gitppoProject/service/UserService.java b/src/main/java/HYLikeLion/gitppo/gitppoProject/service/UserService.java index 5c790ed..d9a2d9b 100644 --- a/src/main/java/HYLikeLion/gitppo/gitppoProject/service/UserService.java +++ b/src/main/java/HYLikeLion/gitppo/gitppoProject/service/UserService.java @@ -21,26 +21,25 @@ public class UserService { @Transactional public User findById(Long id) { - Optional optUser = userRepository.findById(id); - - return optUser.orElseThrow(() -> new NullPointerException("해당 id의 유저가 존재하지 않습니다.")); + return userRepository.findById(id) + .orElseThrow(() -> new IllegalArgumentException("해당 id가 존재하지 않습니다. id = " + id)); } @Transactional public User saveOrUpdate(JsonNode root) { User authUser = userRepository.findByGithubId(root.path("id").asLong()) - .map(entity -> entity.update(root.path("name").asText(), root.path("email").asText(), - LocalDate.now(), Role.USER)) - .orElse(User.builder() - .name(root.path("name").asText()) - .githubId(root.path("id").asLong()) - .githubUserName(root.path("login").asText()) - .email(root.path("email").asText()) - .joinDate(LocalDate.now()) - .loginDate(LocalDate.now()) - .role(Role.FIRST) - .build()); - ; + .map(entity -> entity.update(root.path("name").asText(), root.path("email").asText(), + LocalDate.now(), Role.USER)) + .orElse(User.builder() + .name(root.path("name").asText()) + .githubId(root.path("id").asLong()) + .githubUserName(root.path("login").asText()) + .email(root.path("email").asText()) + .joinDate(LocalDate.now()) + .loginDate(LocalDate.now()) + .role(Role.FIRST) + .build()); + return userRepository.save(authUser); } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f72af42..8549961 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,2 @@ -spring.profiles.include=oauth, local +spring.profiles.include=oauth, local, secret #spring.session.store-type=jdbc