Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/dev' into eumdeploy
Browse files Browse the repository at this point in the history
  • Loading branch information
ssoree912 committed Jun 4, 2024
2 parents 3c057b0 + 495b4d0 commit 6c53746
Show file tree
Hide file tree
Showing 17 changed files with 279 additions and 18 deletions.
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
# Auto detect text files and perform LF normalization
* text=auto
src/main/java/com/eum/auth/config/RedisRepositoryConfig.java merge=servers
src/main/java/com/eum/auth/client/HaetsalClient.java merge=servers
14 changes: 4 additions & 10 deletions .github/workflows/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,6 @@ jobs:
- name: Build with Gradle Wrapper
run: ./gradlew build -x test
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: cicdsample
path: build/libs/*.jar
- name: docker image build
run: docker build . --file Dockerfile --tag ${{ secrets.DOCKERHUB_USERNAME }}/eum-dev:auth
# DockerHub Login (push 하기 위해)
Expand All @@ -67,10 +62,6 @@ jobs:
needs: build
runs-on: ubuntu-latest
steps:
- name: Download artifact
uses: actions/download-artifact@v2
with:
name: cicdsample
- name: Login to Docker Hub
run: sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }}

Expand All @@ -88,6 +79,9 @@ jobs:
sudo docker rm auth
fi
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/eum-dev:auth
sudo docker run -d --restart always -p 8081:8081 --network root_eum_network --name auth ${{ secrets.DOCKERHUB_USERNAME }}/eum-dev:auth
sudo docker run -d --restart always -p 8081:8081 --network root_eum_network --name auth --log-opt max-size=1024m --log-opt max-file=5 ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKER_REPO }}:auth
sudo docker image prune -f
ps -ef | grep java
sudo docker image prune -f
ps -ef | grep java
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ dependencies {
testImplementation 'org.springframework.security:spring-security-test'
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'

implementation 'org.springframework.kafka:spring-kafka:3.1.0'

}
dependencyManagement {
imports {
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/com/eum/auth/controller/AuthController.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
import com.eum.auth.domain.user.SocialType;
import com.eum.auth.domain.user.User;
import com.eum.auth.service.AuthService;
import com.eum.auth.service.DTO.FcmTokenDTO;
import com.eum.auth.service.DTO.KakaoDTO;
import com.eum.auth.service.FcmService;
import com.eum.auth.service.KakaoService;
import com.eum.auth.service.UsersService;
import com.google.firebase.auth.FirebaseAuth;
Expand Down Expand Up @@ -39,6 +41,7 @@ public class AuthController {
private final AuthService authService;
private final KakaoService kakaoService;
private final UsersService usersService;
private final FcmService fcmService;
@Hidden
@GetMapping()
public String get(){
Expand All @@ -62,7 +65,10 @@ public UserResponse.TokenInfo updateToken(@RequestHeader("userId") String userId

@PostMapping("/auth/signin/local")
public ResponseEntity<APIResponse<UserResponse.TokenInfo>> signIn(@RequestBody @Validated UsersRequest.SignIn signIn){
return ResponseEntity.ok(authService.signIn(signIn));
UserResponse.TokenInfo tokenInfo = authService.signIn(signIn);
log.info(signIn.getFcmToken());
if(!signIn.getFcmToken().equals("")) fcmService.updateFcmToken(tokenInfo.getUserId(),signIn.getFcmToken());
return ResponseEntity.ok( APIResponse.of(SuccessCode.SELECT_SUCCESS,tokenInfo));
}

@PostMapping("/auth/reissue")
Expand All @@ -87,6 +93,7 @@ public ResponseEntity<?> logout(@RequestHeader(name = HttpHeaders.AUTHORIZATION)
// Extract Bearer token from Authorization header
String bearerToken = extractBearerToken(authorizationHeader);
authService.logout(bearerToken);
fcmService.deleteFcmToken(getUser.getUserId());

// Pass the Bearer token to the logout method
return ResponseEntity.ok( APIResponse.of(SuccessCode.UPDATE_SUCCESS,"로그아웃 되었습니다."));
Expand Down Expand Up @@ -115,6 +122,7 @@ public ResponseEntity<APIResponse<UserResponse.TokenInfo>> getToken(@PathVariabl
socialType = SocialType.FIREBASE;
}
UserResponse.TokenInfo tokenInfo = authService.getToken( uid, socialType);
if(!token.getFcmToken().equals("")) fcmService.updateFcmToken(tokenInfo.getUserId(),token.getFcmToken());
APIResponse response = APIResponse.of(SuccessCode.SELECT_SUCCESS, tokenInfo);
// log.info(token.);
return ResponseEntity.ok(response);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.eum.auth.controller.DTO.request;

import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class FcmTokenRequest {
private String fcmToken;
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ public class UsersRequest {
public static class Token{
@NotEmpty
private String token;

private String fcmToken;
}
//자체 로그인 폼
@Getter
Expand All @@ -26,6 +28,8 @@ public static class SignIn{
@NotEmpty(message = "비밀번호는 필수 입력값입니다.")
private String password;

private String fcmToken;

public UsernamePasswordAuthenticationToken toAuthentication(){
return new UsernamePasswordAuthenticationToken(testmail, password);
}
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/com/eum/auth/controller/UserController.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package com.eum.auth.controller;

import com.eum.auth.common.DTO.APIResponse;
import com.eum.auth.common.DTO.enums.SuccessCode;
import com.eum.auth.controller.DTO.request.FcmTokenRequest;
import com.eum.auth.controller.DTO.request.UsersRequest;
import com.eum.auth.domain.user.SocialType;
import com.eum.auth.domain.user.User;
import com.eum.auth.service.AuthService;
import com.eum.auth.service.FcmService;
import com.eum.auth.service.KakaoService;
import com.eum.auth.service.UsersService;
import com.google.firebase.auth.FirebaseAuth;
Expand All @@ -12,6 +16,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

Expand All @@ -24,6 +29,7 @@ public class UserController {
private final UsersService usersService;
private final KakaoService kakaoService;
private final AuthService authService;
private final FcmService fcmService;
@Hidden
@Transactional
@PostMapping("/withdrawal")
Expand All @@ -45,6 +51,11 @@ private String extractBearerToken(String authorizationHeader) {
}
return null;
}
@PostMapping("notification")
public ResponseEntity<APIResponse> updateFcm(@RequestBody FcmTokenRequest token, @RequestHeader("userId") String userId){
if(!token.getFcmToken().equals("")) fcmService.updateFcmToken( Long.valueOf(userId),token.getFcmToken());
return ResponseEntity.ok(APIResponse.of(SuccessCode.UPDATE_SUCCESS, "fcm 토큰 등록"));
}



Expand Down
27 changes: 27 additions & 0 deletions src/main/java/com/eum/auth/domain/fcmtoken/FcmToken.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.eum.auth.domain.fcmtoken;


import com.eum.auth.common.BaseTimeEntity;
import com.eum.auth.domain.user.User;
import jakarta.persistence.*;
import lombok.*;

@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class FcmToken extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long fcmTokenId;

@Column
private String token;

@OneToOne
@JoinColumn(name = "user_id")
private User user;

}
10 changes: 10 additions & 0 deletions src/main/java/com/eum/auth/domain/fcmtoken/FcmTokenRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.eum.auth.domain.fcmtoken;

import com.eum.auth.domain.user.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface FcmTokenRepository extends JpaRepository<FcmToken,Long> {
Optional<FcmToken> findByUser(User user);
}
6 changes: 6 additions & 0 deletions src/main/java/com/eum/auth/domain/user/User.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.eum.auth.domain.user;

import com.eum.auth.common.BaseTimeEntity;
import com.eum.auth.domain.fcmtoken.FcmToken;
import jakarta.persistence.*;
import lombok.*;

Expand Down Expand Up @@ -39,6 +40,11 @@ public void updateRole(Role role) {
@Enumerated(EnumType.STRING)
private SocialType socialType;

@OneToOne(mappedBy = "user")
private FcmToken fcmToken;



public static User toEntity(String uid, SocialType socialType){
return User.builder().email("")
.role(Role.ROLE_TEMPORARY_USER)
Expand Down
35 changes: 35 additions & 0 deletions src/main/java/com/eum/auth/messageq/FcmDeletedProducer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.eum.auth.messageq;

import com.eum.auth.service.DTO.FcmTokenDTO;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;


@Service
@Slf4j
@RequiredArgsConstructor
public class FcmDeletedProducer {

private final KafkaTemplate<String, String> kafkaTemplate;
public static String TOPIC = "eum-fcm-delete";

public FcmTokenDTO.deletedToken send( FcmTokenDTO.deletedToken user) {
ObjectMapper mapper = new ObjectMapper();
String jsonInString = "";
// 주문 정보 Json 포맷
try {
jsonInString = mapper.writeValueAsString(user);
} catch(JsonProcessingException ex) {
ex.printStackTrace();
}

kafkaTemplate.send(TOPIC, jsonInString);
log.info("producer >> : " + user);

return user;
}
}
35 changes: 35 additions & 0 deletions src/main/java/com/eum/auth/messageq/FcmProducer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.eum.auth.messageq;

import com.eum.auth.service.DTO.FcmTokenDTO;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;


@Service
@Slf4j
@RequiredArgsConstructor
public class FcmProducer {

private final KafkaTemplate<String, String> kafkaTemplate;
public static String TOPIC = "eum-fcm-create";

public FcmTokenDTO.FCMDTO send( FcmTokenDTO.FCMDTO fcmdto) {
ObjectMapper mapper = new ObjectMapper();
String jsonInString = "";
// 주문 정보 Json 포맷
try {
jsonInString = mapper.writeValueAsString(fcmdto);
} catch(JsonProcessingException ex) {
ex.printStackTrace();
}

kafkaTemplate.send(TOPIC, jsonInString);
log.info("create producer >> : " + fcmdto);

return fcmdto;
}
}
36 changes: 36 additions & 0 deletions src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.eum.auth.messageq;

import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;

import java.util.HashMap;
import java.util.Map;


@EnableKafka
@Configuration
public class KafkaProducerConfig {


@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> properties = new HashMap<>();
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka:9092");
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);

return new DefaultKafkaProducerFactory<>(properties);
}
@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
}


4 changes: 2 additions & 2 deletions src/main/java/com/eum/auth/service/AuthService.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public class AuthService {
* @param signIn
* @return
*/
public APIResponse<UserResponse.TokenInfo> signIn(UsersRequest.SignIn signIn) {
public UserResponse.TokenInfo signIn(UsersRequest.SignIn signIn) {
User getUser = userRepository.findByEmail(signIn.getTestmail()).orElseThrow(() -> new IllegalArgumentException("잘못된 이메일 정보"));
if(!passwordEncoder.matches(signIn.getPassword(),getUser.getPassword())) throw new IllegalArgumentException("잘못된 비밀번호");
CustomUserInfoDto userInfo = modelMapper.map(getUser, CustomUserInfoDto.class);
Expand All @@ -55,7 +55,7 @@ public APIResponse<UserResponse.TokenInfo> signIn(UsersRequest.SignIn signIn) {
redisTemplate.opsForValue()
.set("RT:" + getUser.getUserId(), tokenInfo.getRefreshToken(), tokenInfo.getRefreshTokenExpirationTime(), TimeUnit.MILLISECONDS);

return APIResponse.of(SuccessCode.SELECT_SUCCESS,tokenInfo);
return tokenInfo;
}

/**
Expand Down
29 changes: 29 additions & 0 deletions src/main/java/com/eum/auth/service/DTO/FcmTokenDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.eum.auth.service.DTO;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;

public class FcmTokenDTO {
@Getter
@Setter
public static class FCMDTO{
private Long userId;
private String token;

public FCMDTO(Long userId, String token) {
this.userId = userId;
this.token = token;
}
}

@Getter
@Setter
public static class deletedToken{
private Long userId;

public deletedToken(Long userId) {
this.userId = userId;
}
}
}
Loading

0 comments on commit 6c53746

Please sign in to comment.