File tree Expand file tree Collapse file tree
casper-user/src/main/kotlin/hs/kr/entrydsm/user/infrastructure Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package hs.kr.entrydsm.user.infrastructure.grpc.server
2+
3+ import hs.kr.entrydsm.casper.user.proto.UserServiceGrpcKt
4+ import hs.kr.entrydsm.casper.user.proto.UserServiceProto
5+ import hs.kr.entrydsm.user.domain.user.application.port.`in`.QueryUserByUUIDUseCase
6+ import hs.kr.entrydsm.user.infrastructure.grpc.server.mapper.UserGrpcMapper
7+ import io.grpc.Status
8+ import io.grpc.StatusException
9+ import net.devh.boot.grpc.server.service.GrpcService
10+ import java.util.UUID
11+
12+ /* *
13+ * 사용자 관련 gRPC 서비스 구현 클래스입니다.
14+ * 다른 마이크로서비스와의 gRPC 통신을 통해 사용자 정보를 제공합니다.
15+ *
16+ * @property queryUserByUUIDUseCase UUID로 사용자 조회 유스케이스
17+ * @property userGrpcMapper gRPC 메시지 변환 매퍼
18+ */
19+ @GrpcService
20+ class UserGrpcService (
21+ private val queryUserByUUIDUseCase : QueryUserByUUIDUseCase ,
22+ private val userGrpcMapper : UserGrpcMapper ,
23+ ) : UserServiceGrpcKt.UserServiceCoroutineImplBase() {
24+
25+ /* *
26+ * 사용자 ID로 사용자 정보를 조회합니다.
27+ *
28+ * @param request 사용자 ID가 포함된 gRPC 요청
29+ * @return 사용자 정보 gRPC 응답
30+ * @throws StatusException UUID 형식이 잘못되었거나 서버 오류가 발생한 경우
31+ */
32+ override suspend fun getUserInfoByUserId (request : UserServiceProto .GetUserInfoRequest ): UserServiceProto .GetUserInfoResponse {
33+ val userId = UUID .fromString(request.userId)
34+ val userInfo = queryUserByUUIDUseCase.getUserById(userId)
35+ return userGrpcMapper.toGetUserInfoResponse(userInfo)
36+ }
37+ }
Original file line number Diff line number Diff line change 1+ package hs.kr.entrydsm.user.infrastructure.grpc.server.dto
2+
3+ import hs.kr.entrydsm.user.domain.user.adapter.out.domain.UserRole
4+ import java.util.UUID
5+
6+ /* *
7+ * 내부 gRPC 통신용 사용자 응답 DTO 클래스입니다.
8+ * 다른 마이크로서비스와의 통신에서 사용자 정보를 전달하는 데 사용됩니다.
9+ *
10+ * @property id 사용자 고유 식별자
11+ * @property phoneNumber 사용자 전화번호
12+ * @property name 사용자 이름
13+ * @property isParent 학부모 여부
14+ * @property receiptCode 지원서 접수번호
15+ * @property role 사용자 역할
16+ */
17+ data class InternalUserResponse (
18+ val id : UUID ,
19+ val phoneNumber : String ,
20+ val name : String ,
21+ val isParent : Boolean ,
22+ val receiptCode : Long? ,
23+ val role : UserRole ,
24+ )
Original file line number Diff line number Diff line change 1+ package hs.kr.entrydsm.user.infrastructure.grpc.server.mapper
2+
3+ import hs.kr.entrydsm.casper.user.proto.UserServiceProto
4+ import hs.kr.entrydsm.user.infrastructure.grpc.server.dto.InternalUserResponse
5+ import hs.kr.entrydsm.user.domain.user.adapter.out.domain.UserRole
6+ import org.springframework.stereotype.Component
7+
8+ /* *
9+ * 사용자 정보를 gRPC 프로토콜 버퍼와 매핑하는 매퍼 클래스입니다.
10+ * 내부 DTO와 gRPC 메시지 간의 변환을 담당합니다.
11+ */
12+ @Component
13+ class UserGrpcMapper {
14+
15+ /* *
16+ * InternalUserResponse 객체를 gRPC 사용자 정보 응답으로 변환합니다.
17+ *
18+ * @param userResponse 변환할 사용자 응답 DTO
19+ * @return gRPC 사용자 정보 응답
20+ */
21+ fun toGetUserInfoResponse (userResponse : InternalUserResponse ): UserServiceProto .GetUserInfoResponse {
22+ return UserServiceProto .GetUserInfoResponse .newBuilder()
23+ .setId(userResponse.id.toString())
24+ .setPhoneNumber(userResponse.phoneNumber)
25+ .setName(userResponse.name)
26+ .setIsParent(userResponse.isParent)
27+ .setRole(toProtoUserRole(userResponse.role))
28+ .build()
29+ }
30+
31+ /* *
32+ * 도메인 사용자 역할을 gRPC 프로토콜 사용자 역할로 변환합니다.
33+ *
34+ * @param userRole 변환할 도메인 사용자 역할
35+ * @return gRPC 프로토콜 사용자 역할
36+ */
37+ private fun toProtoUserRole (userRole : UserRole ): UserServiceProto .UserRole {
38+ return when (userRole){
39+ UserRole .ROOT -> UserServiceProto .UserRole .ROOT
40+ UserRole .USER -> UserServiceProto .UserRole .USER
41+ UserRole .ADMIN -> UserServiceProto .UserRole .ADMIN
42+ }
43+ }
44+ }
Original file line number Diff line number Diff line change 1+ package hs.kr.entrydsm.user.infrastructure.kafka.producer
2+
3+ /* *
4+ * 모든 테이블 삭제 이벤트를 Kafka로 발행하는 Producer 인터페이스입니다.
5+ * 관리자가 전체 데이터를 초기화할 때 다른 마이크로서비스에 알림을 전송하는 역할을 합니다.
6+ */
7+ interface DeleteAllTableProducer {
8+ /* *
9+ * 모든 테이블 삭제 이벤트를 전송합니다.
10+ * 전체 데이터 초기화 이벤트를 Kafka 토픽으로 발행합니다.
11+ */
12+ fun send ()
13+ }
Original file line number Diff line number Diff line change 1+ package hs.kr.entrydsm.user.infrastructure.kafka.producer
2+
3+ /* *
4+ * 사용자 삭제 이벤트를 Kafka로 발행하는 Producer 인터페이스입니다.
5+ * 사용자 탈퇴 시 다른 마이크로서비스에 알림을 전송하는 역할을 합니다.
6+ */
7+ interface DeleteUserProducer {
8+ /* *
9+ * 사용자 삭제 이벤트를 전송합니다.
10+ * 사용자의 접수번호를 포함한 삭제 이벤트를 Kafka 토픽으로 발행합니다.
11+ *
12+ * @param receiptCode 삭제된 사용자의 접수번호
13+ */
14+ fun send (receiptCode : Long )
15+ }
You can’t perform that action at this time.
0 commit comments