Skip to content

Commit

Permalink
Merge pull request #73 from bandalgomsu/main
Browse files Browse the repository at this point in the history
좋아요 기능 구현 및 테스트 구현
  • Loading branch information
bandalgomsu authored Jun 19, 2024
2 parents 5ac601a + 47e1d2a commit f96f2c1
Show file tree
Hide file tree
Showing 50 changed files with 1,297 additions and 918 deletions.
6 changes: 5 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,18 @@ dependencies {
//firebase
implementation 'com.google.firebase:firebase-admin:6.8.1'
//okhttp
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.2.2'
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.2.0'

//Query Dsl
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"

//feign
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
implementation platform("org.springframework.cloud:spring-cloud-dependencies:2023.0.1")

}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import java.util.TimeZone;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;

@EnableAsync
@EnableJpaAuditing
@SpringBootApplication
@EnableFeignClients
public class GraduateMinionsApplication {
public static void main(String[] args) {
SpringApplication.run(GraduateMinionsApplication.class, args);
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/example/jolvre/auth/api/AuthController.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public ResponseEntity<TokenResponse> refresh(@RequestBody RefreshRequest request
@GetMapping("/pw/email/{email}")
public ResponseEntity<Void> sendPwFindAuthEmail(@PathVariable String email) {
mailService.sendFindPwEmail(email);
log.info("[EMAIL] {}님 비밀번호 찾기 메일 발송 완료", email);
return ResponseEntity.ok().build();
}

Expand All @@ -63,6 +64,7 @@ public ResponseEntity<Void> sendPwFindAuthEmail(@PathVariable String email) {
public ResponseEntity<FindPwEmailVerifyResponse> verifyPwFindAuthEmail(@RequestBody EmailVerifyRequest request) {
FindPwEmailVerifyResponse response = mailVerifyService.CheckFindPwAuthNum(request.getEmail(),
request.getAuthNum());
log.info("[EMAIL] {}님 비밀번호 찾기 메일 검증 완료", request.getEmail());

return ResponseEntity.ok().body(response);
}
Expand All @@ -72,6 +74,8 @@ public ResponseEntity<FindPwEmailVerifyResponse> verifyPwFindAuthEmail(@RequestB
public ResponseEntity<Void> updatePw(@AuthenticationPrincipal PrincipalDetails principalDetails,
@RequestBody PasswordUpdateRequest request) {
userService.updatePassword(principalDetails.getId(), request.getPassword());
log.info("[EMAIL] {}님 비밀번호 찾기 메일 검증 완료", principalDetails.getUser().getEmail());

return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ public class SignUpController {
@Operation(summary = "회원 가입")
@PostMapping
public ResponseEntity<TokenResponse> signUpBasic(@Valid @RequestBody BasicSignUpRequest request) {
log.info("[AUTH] : 기본 회원가입");
TokenResponse response = signUpService.signUpBasic(request);
log.info("[AUTH] {}님 기본 회원가입 완료", request.getEmail());

return ResponseEntity.ok(response);
}
Expand All @@ -62,6 +62,7 @@ public ResponseEntity<String> signUpOauth(@AuthenticationPrincipal PrincipalDeta
@GetMapping("/check/nickname/{nickname}")
public ResponseEntity<DuplicateNicknameResponse> checkDuplicateNickname(@PathVariable String nickname) {
DuplicateNicknameResponse response = signUpService.checkDuplicateNickname(nickname);
log.info("[AUTH] {} 닉네임 중복 체크 완료", nickname);

return ResponseEntity.ok(response);
}
Expand All @@ -70,6 +71,7 @@ public ResponseEntity<DuplicateNicknameResponse> checkDuplicateNickname(@PathVar
@GetMapping("/check/email/{email}")
public ResponseEntity<DuplicateEmailResponse> checkDuplicateEmail(@PathVariable String email) {
DuplicateEmailResponse response = signUpService.checkDuplicateEmail(email);
log.info("[AUTH] {} 닉네임 중복 체크 완료", email);

return ResponseEntity.ok(response);
}
Expand All @@ -78,6 +80,7 @@ public ResponseEntity<DuplicateEmailResponse> checkDuplicateEmail(@PathVariable
@GetMapping("/email/{email}")
public ResponseEntity<EmailSendResponse> sendSignUpAuthEmail(@PathVariable String email) {
mailService.sendSignUpEmail(email);
log.info("[EMAIL] {}님 회원가입 인증 메일 발송 완료", email);

return ResponseEntity.ok().body(null);
}
Expand All @@ -87,6 +90,7 @@ public ResponseEntity<EmailSendResponse> sendSignUpAuthEmail(@PathVariable Strin
public ResponseEntity<SignUpEmailVerifyResponse> verifySingUpAuthEmail(@RequestBody EmailVerifyRequest request) {
SignUpEmailVerifyResponse response = mailVerifyService.CheckSignUpAuthNum(request.getEmail(),
request.getAuthNum());
log.info("[EMAIL] {}님 회원가입 인증 메일 검증 완료", request.getEmail());

return ResponseEntity.ok().body(response);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.example.jolvre.auth.email.service;

import com.example.jolvre.common.util.RedisUtil;
import com.example.jolvre.user.repository.UserRepository;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import java.util.Random;
Expand All @@ -17,10 +16,9 @@ public class MailService {
private final JavaMailSender mailSender;
private int authNumber;
private final RedisUtil redisUtil;
private final UserRepository userRepository;

//임의의 6자리 양수를 반환합니다.
public void makeRandomNumber() {
private void makeRandomNumber() {
Random r = new Random();
String randomNumber = "";
for (int i = 0; i < 6; i++) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public void checkRefreshTokenAndReIssueAccessToken(HttpServletResponse response,
reIssuedRefreshToken);
});
}


/**
* [리프레시 토큰 재발급 & DB에 리프레시 토큰 업데이트 메소드] jwtService.createRefreshToken()으로 리프레시 토큰 재발급 후 DB에 재발급한 리프레시 토큰 업데이트 후
Expand All @@ -95,7 +95,6 @@ private String reIssueRefreshToken(User user) {
*/
public void checkAccessTokenAndAuthentication(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
log.info("[AUTH] : checkAccessTokenAndAuthentication() 호출");
jwtService.extractAccessToken(request)
.filter(jwtService::isTokenValid)
.ifPresent(accessToken -> jwtService.extractEmail(accessToken)
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/com/example/jolvre/common/config/RedisConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {
Expand All @@ -17,4 +19,23 @@ public class RedisConfig {
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(host, port);
}

@Bean
public RedisTemplate redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());

// 일반적인 key:value의 경우 시리얼라이저
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());

// Hash를 사용할 경우 시리얼라이저
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());

// 모든 경우
redisTemplate.setDefaultSerializer(new StringRedisSerializer());

return redisTemplate;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public enum ErrorCode {
USER_ALREADY_EXIST("U03", "User is already exists.", HttpStatus.BAD_REQUEST.value()),
//Exhibit
EXHIBIT_NOT_FOUND("E01", "Exhibit is not found", HttpStatus.BAD_REQUEST.value()),
EXHIBIT_LIKE_DUPLICATION("E02", "ExhibitLike is Duplicate", HttpStatus.BAD_REQUEST.value()),
//Diary
DIARY_NOT_FOUND("D01", "Diary is not found", HttpStatus.BAD_REQUEST.value()),
//Group Exhibit
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.jolvre.common.error.exhibition;

import com.example.jolvre.common.error.EntityNotFoundException;
import com.example.jolvre.common.error.ErrorCode;

public class ExhibitLikeDuplicationException extends EntityNotFoundException {
public ExhibitLikeDuplicationException() {
super(ErrorCode.EXHIBIT_LIKE_DUPLICATION);
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
package com.example.jolvre.common.firebase.DTO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@Builder
@AllArgsConstructor
@Getter
public class FCMMessage {
private boolean validate_only;
private Message message;

@Builder
@AllArgsConstructor
@Getter
public static class Message {
private Notification notification;
private String token;
}

@Builder
@AllArgsConstructor
@Getter
public static class Notification {
private String title;
private String body;
}
}
//package com.example.jolvre.common.firebase.DTO;
//import lombok.AllArgsConstructor;
//import lombok.Builder;
//import lombok.Getter;
//
//@Builder
//@AllArgsConstructor
//@Getter
//public class FCMMessage {
// private boolean validate_only;
// private Message message;
//
// @Builder
// @AllArgsConstructor
// @Getter
// public static class Message {
// private Notification notification;
// private String token;
// }
//
// @Builder
// @AllArgsConstructor
// @Getter
// public static class Notification {
// private String title;
// private String body;
// }
//}
Original file line number Diff line number Diff line change
@@ -1,37 +1,37 @@
package com.example.jolvre.common.firebase.Entity;

import com.example.jolvre.user.entity.User;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Entity
@Getter
@Setter
@NoArgsConstructor
public class UserFcmToken {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userFcmTokenId;

@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private User user;

private String token;

@Builder
public UserFcmToken(String token, User user) {
this.token = token;
this.user = user;
}
}
//package com.example.jolvre.common.firebase.Entity;
//
//import com.example.jolvre.user.entity.User;
//import jakarta.persistence.Entity;
//import jakarta.persistence.FetchType;
//import jakarta.persistence.GeneratedValue;
//import jakarta.persistence.GenerationType;
//import jakarta.persistence.Id;
//import jakarta.persistence.JoinColumn;
//import jakarta.persistence.OneToOne;
//import lombok.Builder;
//import lombok.Getter;
//import lombok.NoArgsConstructor;
//import lombok.Setter;
//
//@Entity
//@Getter
//@Setter
//@NoArgsConstructor
//public class UserFcmToken {
//
// @Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)
// private Long userFcmTokenId;
//
// @OneToOne(fetch = FetchType.EAGER)
// @JoinColumn(name = "user_id")
// private User user;
//
// private String token;
//
// @Builder
// public UserFcmToken(String token, User user) {
// this.token = token;
// this.user = user;
// }
//}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.example.jolvre.common.firebase.Repository;
import com.example.jolvre.common.firebase.Entity.UserFcmToken;
import com.example.jolvre.user.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface UserFcmTokenRepository extends JpaRepository<UserFcmToken, Long> {
Optional<UserFcmToken> findByUser(User user);
boolean existsByUser(User user);
}
//package com.example.jolvre.common.firebase.Repository;
//import com.example.jolvre.common.firebase.Entity.UserFcmToken;
//import com.example.jolvre.user.entity.User;
//import org.springframework.data.jpa.repository.JpaRepository;
//
//import java.util.Optional;
//
//public interface UserFcmTokenRepository extends JpaRepository<UserFcmToken, Long> {
// Optional<UserFcmToken> findByUser(User user);
// boolean existsByUser(User user);
//}
Loading

0 comments on commit f96f2c1

Please sign in to comment.