From 183e30cf67cbc1cd4eecd097aeb1c056f400f1ce Mon Sep 17 00:00:00 2001 From: jiixon Date: Sun, 9 Jul 2023 19:38:59 +0900 Subject: [PATCH] =?UTF-8?q?S3config=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + .../com/itsu/threedays/InitialUserLoader.java | 30 ------------ .../com/itsu/threedays/config/S3Config.java | 28 +++++++++++ .../itsu/threedays/config/jwt/JwtConfig.java | 20 -------- .../config/jwt/JwtTokenProvider.java | 8 ++++ .../threedays/controller/HabitController.java | 41 +++++++--------- .../controller/KaKaoLoginController.java | 31 ++++++------ .../threedays/dto/HabitEditResponseDto.java | 10 +--- .../itsu/threedays/dto/HabitResponseDto.java | 3 ++ .../threedays/repository/HabitRepository.java | 2 +- .../itsu/threedays/service/HabitService.java | 37 ++++++++++----- src/main/resources/application-local.yaml | 11 +++++ src/main/resources/application.yaml | 47 ++++++++++++------- .../itsu/threedays/JwtTokenProviderTest.java | 42 ----------------- 14 files changed, 141 insertions(+), 170 deletions(-) delete mode 100644 src/main/java/com/itsu/threedays/InitialUserLoader.java create mode 100644 src/main/java/com/itsu/threedays/config/S3Config.java delete mode 100644 src/main/java/com/itsu/threedays/config/jwt/JwtConfig.java delete mode 100644 src/test/java/com/itsu/threedays/JwtTokenProviderTest.java diff --git a/build.gradle b/build.gradle index 022aab7..6d70b3d 100644 --- a/build.gradle +++ b/build.gradle @@ -33,6 +33,7 @@ dependencies { runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5' + implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'mysql:mysql-connector-java:8.0.31' diff --git a/src/main/java/com/itsu/threedays/InitialUserLoader.java b/src/main/java/com/itsu/threedays/InitialUserLoader.java deleted file mode 100644 index b394c90..0000000 --- a/src/main/java/com/itsu/threedays/InitialUserLoader.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.itsu.threedays; - -import com.itsu.threedays.entity.UserEntity; -import com.itsu.threedays.entity.role.Role; -import com.itsu.threedays.repository.UserRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; - -//@Component -//public class InitialUserLoader implements ApplicationRunner { -// private final UserRepository userRepository; -// @Autowired -// public InitialUserLoader(UserRepository userRepository) { -// this.userRepository = userRepository; -// } -// @Override -// public void run(ApplicationArguments args){ -// //초기 유저셋팅 -// UserEntity user = new UserEntity(); -// user.setEmail("threeday2023@gmail.com"); -// user.setNickname("itsU"); -// user.setPassword("password1234"); -// user.setRole(Role.USER); -// -// userRepository.save(user); -// } -//} diff --git a/src/main/java/com/itsu/threedays/config/S3Config.java b/src/main/java/com/itsu/threedays/config/S3Config.java new file mode 100644 index 0000000..8049b2e --- /dev/null +++ b/src/main/java/com/itsu/threedays/config/S3Config.java @@ -0,0 +1,28 @@ +package com.itsu.threedays.config; + +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class S3Config { + @Value("${cloud.aws.credentials.access-key}") + private String accessKey; + @Value("${cloud.aws.credentials.secret-key}") + private String secretKey; + @Value("${cloud.aws.region.static}") + private String region; + + @Bean + public AmazonS3Client amazonS3Client() { + BasicAWSCredentials awsCredentials= new BasicAWSCredentials(accessKey, secretKey); + return (AmazonS3Client) AmazonS3ClientBuilder.standard() + .withRegion(region) + .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)) + .build(); + } +} diff --git a/src/main/java/com/itsu/threedays/config/jwt/JwtConfig.java b/src/main/java/com/itsu/threedays/config/jwt/JwtConfig.java deleted file mode 100644 index 92e09d9..0000000 --- a/src/main/java/com/itsu/threedays/config/jwt/JwtConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.itsu.threedays.config.jwt; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; - -import java.util.Base64; - -@Data -//@ConfigurationProperties(prefix = "jwt") -public class JwtConfig { - private byte[] jwtKey; - - public void setJwtKey(String jwtKey) { - this.jwtKey = Base64.getDecoder().decode(jwtKey); - } - - public byte[] getJwtKey() { - return jwtKey; - } -} diff --git a/src/main/java/com/itsu/threedays/config/jwt/JwtTokenProvider.java b/src/main/java/com/itsu/threedays/config/jwt/JwtTokenProvider.java index 5bf3fba..f666ef9 100644 --- a/src/main/java/com/itsu/threedays/config/jwt/JwtTokenProvider.java +++ b/src/main/java/com/itsu/threedays/config/jwt/JwtTokenProvider.java @@ -91,4 +91,12 @@ public Authentication getAuthentication(String token) { return new UsernamePasswordAuthenticationToken(principal, token, authorities); } + + public String resolveToken(HttpServletRequest request){ + String bearerToken = request.getHeader("authorization"); + if(StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { + return bearerToken.substring(7); + } + return null; + } } diff --git a/src/main/java/com/itsu/threedays/controller/HabitController.java b/src/main/java/com/itsu/threedays/controller/HabitController.java index df399d7..e7a6e70 100644 --- a/src/main/java/com/itsu/threedays/controller/HabitController.java +++ b/src/main/java/com/itsu/threedays/controller/HabitController.java @@ -69,6 +69,7 @@ ResponseEntity> getHabitList(@RequestParam("email") Strin HabitResponseDto responseDto = new HabitResponseDto(); responseDto.setId(habit.getId()); responseDto.setTitle(habit.getTitle()); + responseDto.setDuration(habit.getDuration()); responseDto.setVisible(habit.isVisible()); responseDto.setComboCount(habit.getComboCount()); responseDto.setAchievementRate(habit.getAchievementRate()); @@ -79,28 +80,6 @@ ResponseEntity> getHabitList(@RequestParam("email") Strin return ResponseEntity.ok(habitResponseDtos); } - @GetMapping("habits/edit-list") //편집시 습관목록조회(중지일 포함) - ResponseEntity> getHabitEditList(@RequestParam("email") String email) throws Exception{ - List habits = habitService.findUndeletedAndAllHabits(email); - log.info("undeletedAndAllHabits: {}",habits); - List habitEditListDto = habits.stream() - .map(habitEntity -> { - HabitEditResponseDto editResponseDto = new HabitEditResponseDto(); - editResponseDto.setId(habitEntity.getId()); - editResponseDto.setTitle(habitEntity.getTitle()); - editResponseDto.setDuration(habitEntity.getDuration()); - editResponseDto.setVisible(habitEntity.isVisible()); - editResponseDto.setComboCount(habitEntity.getComboCount()); - editResponseDto.setAchievementRate(habitEntity.getAchievementRate()); - editResponseDto.setAchievementCount(habitEntity.getAchievementCount()); - editResponseDto.setStopDate(habitEntity.getStopDate()); //중지일 - return editResponseDto; - }) - .collect(Collectors.toList()); - return ResponseEntity.ok(habitEditListDto) - } - - @PutMapping("habits/{habitId}/edit") //습관수정(이름, 기간, 공개여부) ResponseEntity updateHabit(@PathVariable("habitId") Long habitId, @@ -134,12 +113,26 @@ ResponseEntity stopHabit(@PathVariable("habitId") Long habitId){ } - //습관 편집시 목록 - + @GetMapping("habits/edit-list") //편집시 습관목록조회(중지일 포함) + ResponseEntity> getHabitEditList(@RequestParam("email") String email) throws Exception{ + List habits = habitService.findUndeletedAndAllHabits(email); + log.info("undeletedAndAllHabits: {}",habits); + List habitEditListDto = habits.stream() + .map(habitEntity -> { + HabitEditResponseDto editResponseDto = new HabitEditResponseDto(); + habitService.setCommonHabitFields(editResponseDto,habitEntity); //공통필드 설정 + editResponseDto.setStopDate(habitEntity.getStopDate()); //중지일 + return editResponseDto; + }) + .collect(Collectors.toList()); + return ResponseEntity.ok(habitEditListDto); + } @GetMapping("habits/{habitId}/reset") //매주마다 달성횟수 리셋 ResponseEntity resetAchievement(@PathVariable("habitId") Long habitId){ habitService.resetAchievement(habitId); return ResponseEntity.ok("Resetting the achievement count was successful."); } + + } diff --git a/src/main/java/com/itsu/threedays/controller/KaKaoLoginController.java b/src/main/java/com/itsu/threedays/controller/KaKaoLoginController.java index 2220b0a..e5b7ab9 100644 --- a/src/main/java/com/itsu/threedays/controller/KaKaoLoginController.java +++ b/src/main/java/com/itsu/threedays/controller/KaKaoLoginController.java @@ -21,6 +21,8 @@ import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; +import javax.servlet.http.HttpServletRequest; + @RestController @RequiredArgsConstructor @RequestMapping("api") @@ -109,20 +111,19 @@ ResponseEntity responseJwtToken(@RequestBody UserDto userDto) { //파베 토 return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } -// @GetMapping("/test") -// public ResponseEntity testApi(HttpServletRequest request) { -// log.info("!!"); -// String jwt = tokenProvider.resolveToken(request); -// log.info("testApi - jwt: {}",jwt); -// if (jwt == null) { -// return new ResponseEntity<>("JWT not found!", HttpStatus.BAD_REQUEST); -// } -// -// if (tokenProvider.validateToken(jwt)) { -// return new ResponseEntity<>("JWT is valid", HttpStatus.OK); -// } else { -// return new ResponseEntity<>("JWT is invalid", HttpStatus.UNAUTHORIZED); -// } -// } + @GetMapping("/test") + public ResponseEntity testApi(HttpServletRequest request) { + String jwt = tokenProvider.resolveToken(request); + log.info("testApi - jwt: {}",jwt); + if (jwt == null) { + return new ResponseEntity<>("JWT not found!", HttpStatus.BAD_REQUEST); + } + + if (tokenProvider.validateToken(jwt)) { + return new ResponseEntity<>("JWT is valid", HttpStatus.OK); + } else { + return new ResponseEntity<>("JWT is invalid", HttpStatus.UNAUTHORIZED); + } + } } diff --git a/src/main/java/com/itsu/threedays/dto/HabitEditResponseDto.java b/src/main/java/com/itsu/threedays/dto/HabitEditResponseDto.java index 0fab147..1e729df 100644 --- a/src/main/java/com/itsu/threedays/dto/HabitEditResponseDto.java +++ b/src/main/java/com/itsu/threedays/dto/HabitEditResponseDto.java @@ -8,16 +8,8 @@ import java.time.LocalDateTime; @Data -@Builder @AllArgsConstructor @NoArgsConstructor -public class HabitEditResponseDto { - Long id; - String title; - int duration; - boolean visible; - int comboCount; - int achievementRate; - int achievementCount; +public class HabitEditResponseDto extends HabitResponseDto{ LocalDateTime stopDate; } diff --git a/src/main/java/com/itsu/threedays/dto/HabitResponseDto.java b/src/main/java/com/itsu/threedays/dto/HabitResponseDto.java index 8191917..28856b6 100644 --- a/src/main/java/com/itsu/threedays/dto/HabitResponseDto.java +++ b/src/main/java/com/itsu/threedays/dto/HabitResponseDto.java @@ -19,4 +19,7 @@ public class HabitResponseDto { int comboCount; int achievementRate; int achievementCount; + + //추가할 것 + } diff --git a/src/main/java/com/itsu/threedays/repository/HabitRepository.java b/src/main/java/com/itsu/threedays/repository/HabitRepository.java index 5a0fd33..7437ef9 100644 --- a/src/main/java/com/itsu/threedays/repository/HabitRepository.java +++ b/src/main/java/com/itsu/threedays/repository/HabitRepository.java @@ -13,7 +13,7 @@ public interface HabitRepository extends JpaRepository { List findAllByUserId(UserEntity userId); List findAllByUserIdAndDeleteYnAndStopDateIsNull(UserEntity userId, boolean deleteYn); - List findAllByUserIdAndDeleteYn(boolean deleteYn); + List findAllByDeleteYn(boolean deleteYn); Optional findById(Long habitId); diff --git a/src/main/java/com/itsu/threedays/service/HabitService.java b/src/main/java/com/itsu/threedays/service/HabitService.java index 4583113..537489e 100644 --- a/src/main/java/com/itsu/threedays/service/HabitService.java +++ b/src/main/java/com/itsu/threedays/service/HabitService.java @@ -49,7 +49,7 @@ public List findUndeletedAndAllHabits(String email) throws Exceptio if (byEmail.isPresent()){ UserEntity user = byEmail.get(); log.info("email로 user 찾기:{}",user.getEmail()); - return habitRepository.findAllByUserIdAndDeleteYn(false); + return habitRepository.findAllByDeleteYn(false); } else { throw new Exception("User NOT FOUND!"); @@ -73,13 +73,14 @@ public HabitResponseDto updateHabit(Long habitId, HabitUpdateRequestDto habitUpd HabitEntity updatedHabit = habitRepository.save(habit); HabitResponseDto habitResponseDto = new HabitResponseDto(); - habitResponseDto.setId(updatedHabit.getId()); - habitResponseDto.setTitle(updatedHabit.getTitle()); - habitResponseDto.setDuration(updatedHabit.getDuration()); - habitResponseDto.setVisible(updatedHabit.isVisible()); - habitResponseDto.setComboCount(updatedHabit.getComboCount()); - habitResponseDto.setAchievementRate(updatedHabit.getAchievementRate()); - habitResponseDto.setAchievementCount(updatedHabit.getAchievementCount()); +// habitResponseDto.setId(updatedHabit.getId()); +// habitResponseDto.setTitle(updatedHabit.getTitle()); +// habitResponseDto.setDuration(updatedHabit.getDuration()); +// habitResponseDto.setVisible(updatedHabit.isVisible()); +// habitResponseDto.setComboCount(updatedHabit.getComboCount()); +// habitResponseDto.setAchievementRate(updatedHabit.getAchievementRate()); +// habitResponseDto.setAchievementCount(updatedHabit.getAchievementCount()); + setCommonHabitFields(habitResponseDto,updatedHabit); return habitResponseDto; @@ -119,22 +120,27 @@ public void updateAchievementAndCombo(Long habitId){ int newAchievementCount = habit.getAchievementCount() + 1; habit.setAchievementCount(newAchievementCount); //달성횟수 +1 + log.info("달성횟수: {}", newAchievementCount); int newTotalAchievementCount = habit.getTotalAchievementCount() + 1; habit.setTotalAchievementCount(newTotalAchievementCount); //누적달성횟수 +1 + log.info("누적달성횟수: {}",newTotalAchievementCount); - LocalDate now = LocalDate.now(); + LocalDate now = LocalDate.now(); // LocalDate habitCreate = habit.getCreatedDate().toLocalDate(); long daysBetween = ChronoUnit.DAYS.between(now, habitCreate); int weeks = (int) (daysBetween / 7) + 1; + log.info("현재주차: {}",weeks); - int newAchievementRate = (newAchievementCount / habit.getDuration() * weeks) * 100; + double i = ((double) newTotalAchievementCount / habit.getDuration() * weeks) * 100; + int newAchievementRate = (int) Math.round(i); + log.info("달성률: {}",newAchievementRate); habit.setAchievementRate(newAchievementRate); //달성률 증가 - if(habit.getDuration() == newAchievementCount) { int newComboCount = habit.getComboCount() + 1; habit.setComboCount(newComboCount); //콤보횟수 +1 + log.info("콤보횟수: {}",newComboCount); } habitRepository.save(habit); @@ -183,6 +189,15 @@ public void resetAchievement(Long habitId) { } } + public void setCommonHabitFields(HabitResponseDto habitDto, HabitEntity habitEntity ){ + habitDto.setId(habitEntity.getId()); + habitDto.setTitle(habitEntity.getTitle()); + habitDto.setDuration(habitEntity.getDuration()); + habitDto.setVisible(habitEntity.isVisible()); + habitDto.setAchievementRate(habitEntity.getAchievementRate()); + habitDto.setAchievementCount(habitEntity.getAchievementCount()); + } + } diff --git a/src/main/resources/application-local.yaml b/src/main/resources/application-local.yaml index b76cf67..f40fe27 100644 --- a/src/main/resources/application-local.yaml +++ b/src/main/resources/application-local.yaml @@ -13,5 +13,16 @@ spring: properties: hibernate: format_sql: true +cloud: + aws: + s3: + bucket: itsubucket + stack: + auto: false + region: + static: ap-northeast-2 + credentials: + accessKey: AKIARREOKLWWNCOBGJHR + secretKey: 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 jwt: secret: threedaysapitokensecretkey123149398230 diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index a3f939f..2de35a4 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -1,18 +1,29 @@ -#spring: -# datasource: -# url: jdbc:mysql://threedays.cnaor4agdclw.ap-northeast-2.rds.amazonaws.com :3306/threedays -# username: root -# password: threedays -# driver-class-name: com.mysql.cj.jdbc.Driver -# jpa: -# show-sql: true -# hibernate: -# ddl-auto: create -# database: mysql -# properties: -# hibernate: -# format_sql: true -## profiles: -## active: test -#jwt: -# secret: threedaysapitokensecretkey123149398230 \ No newline at end of file +spring: + datasource: + url: jdbc:mysql://threedays.cnaor4agdclw.ap-northeast-2.rds.amazonaws.com :3306/threedays + username: root + password: threedays + driver-class-name: com.mysql.cj.jdbc.Driver + jpa: + show-sql: true + hibernate: + ddl-auto: create + database: mysql + properties: + hibernate: + format_sql: true +# profiles: +# active: test +cloud: + aws: + s3: + bucket: itsubucket + stack: + auto: false + region: + static: ap-northeast-2 + credentials: + accessKey: AKIARREOKLWWNCOBGJHR + secretKey: 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 +jwt: + secret: threedaysapitokensecretkey123149398230 \ No newline at end of file diff --git a/src/test/java/com/itsu/threedays/JwtTokenProviderTest.java b/src/test/java/com/itsu/threedays/JwtTokenProviderTest.java deleted file mode 100644 index 54a007f..0000000 --- a/src/test/java/com/itsu/threedays/JwtTokenProviderTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.itsu.threedays; - -import com.itsu.threedays.config.jwt.JwtConfig; -import com.itsu.threedays.config.jwt.JwtTokenProvider; -import com.itsu.threedays.entity.UserEntity; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertNotNull; - - -public class JwtTokenProviderTest { - - private JwtTokenProvider jwtTokenProvider; - private JwtConfig jwtConfig; - - @BeforeEach - void setUp() { - jwtConfig = new JwtConfig(); - jwtConfig.setJwtKey("secretKey"); - } - - - - @Test - @DisplayName("Accesstoken 생성 테스트") - void generated_accesstoken_test() { - //given - UserEntity user = new UserEntity(); - user.setNickname("itsU"); - user.setEmail("threedays@gmail.com"); - - - //when - String accessToken = jwtTokenProvider.generateAccessToken(user); - - //then - assertNotNull(accessToken); - - } -}