Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 9 additions & 10 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,8 @@ dependencies {
implementation("org.modelmapper:modelmapper:3.1.1")

// (1) hospital-interface 모듈
implementation "com.doubleo.grpc:hospital-interface:0.2.3"
implementation "com.doubleo.grpc:patient-interface:0.2.3"
implementation "com.doubleo.grpc:member-interface:0.2.3"
implementation "com.doubleo.grpc:hospital-interface:0.2.7"
implementation "com.doubleo.grpc:log-interface:0.2.7"

// (2) gRPC 런타임
implementation "io.grpc:grpc-netty:1.63.0"
Expand Down Expand Up @@ -135,10 +134,10 @@ tasks.register('updateGitHooks', Copy) {
}


//tasks.register('makeGitHooksExecutable', Exec) {
// commandLine 'chmod', '+x', './.git/hooks/pre-commit', './.git/hooks/prepare-commit-msg'
// dependsOn updateGitHooks
//}
//
//compileJava.dependsOn makeGitHooksExecutable
//
tasks.register('makeGitHooksExecutable', Exec) {
commandLine 'chmod', '+x', './.git/hooks/pre-commit', './.git/hooks/prepare-commit-msg'
dependsOn updateGitHooks
}

compileJava.dependsOn makeGitHooksExecutable

Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.doubleo.logservice.global.util;

import com.google.protobuf.Timestamp;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;

public class TimestampUtils {

private static final ZoneId DEFAULT_ZONE_ID = ZoneId.systemDefault();

private TimestampUtils() {}

public static LocalDateTime toLocalDateTime(Timestamp timestamp) {
if (timestamp == null) {
return null;
}
return LocalDateTime.ofInstant(
Instant.ofEpochSecond(timestamp.getSeconds(), timestamp.getNanos()),
DEFAULT_ZONE_ID);
}

public static Timestamp fromLocalDateTime(LocalDateTime localDateTime) {
if (localDateTime == null) {
return null;
}
Instant instant = localDateTime.atZone(DEFAULT_ZONE_ID).toInstant();
return Timestamp.newBuilder()
.setSeconds(instant.getEpochSecond())
.setNanos(instant.getNano())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package com.doubleo.logservice.grpc.server;

import com.doubleo.logservice.domain.log.domain.*;
import com.doubleo.logservice.domain.log.repository.BuildingEnterLogRepository;
import com.doubleo.logservice.domain.log.repository.EnterLogRepository;
import com.doubleo.logservice.domain.log.repository.IssuedLogAreaRepository;
import com.doubleo.logservice.domain.log.repository.IssuedLogRepository;
import com.doubleo.logservice.global.enums.VisitCategory;
import com.doubleo.logservice.global.util.TimestampUtils;
import io.grpc.stub.StreamObserver;
import java.util.List;
import net.devh.boot.grpc.server.service.GrpcService;

@GrpcService
public class LogGrpcServiceImpl extends LogServiceGrpc.LogServiceImplBase {

private final IssuedLogRepository issuedLogRepository;
private final IssuedLogAreaRepository issuedLogAreaRepository;
private final EnterLogRepository enterLogRepository;
private final BuildingEnterLogRepository buildingEnterLogRepository;

public LogGrpcServiceImpl(
IssuedLogRepository issuedLogRepository,
IssuedLogAreaRepository issuedLogAreaRepository,
EnterLogRepository enterLogRepository,
BuildingEnterLogRepository buildingEnterLogRepository) {
this.issuedLogRepository = issuedLogRepository;
this.issuedLogAreaRepository = issuedLogAreaRepository;
this.enterLogRepository = enterLogRepository;
this.buildingEnterLogRepository = buildingEnterLogRepository;
}

@Override
public void createIssuedLog(
CreateIssuedLogRequest request,
StreamObserver<CreateIssuedLogResponse> responseObserver) {
IssuedLog issuedLog =
issuedLogRepository.save(
IssuedLog.createIssuedLog(
request.getTenantId(),
request.getMemberId(),
request.getMemberName(),
request.getMemberContact(),
request.getPassId(),
TimestampUtils.toLocalDateTime(request.getStartAt()),
TimestampUtils.toLocalDateTime(request.getExpiredAt()),
VisitCategory.valueOf(request.getVisitCategory())));
List<IssuedLogArea> logAreas =
request.getAreaCodesList().stream()
.map(
code ->
IssuedLogArea.createIssuedLogArea(
request.getTenantId(), issuedLog, code))
.toList();
issuedLogAreaRepository.saveAll(logAreas);
responseObserver.onNext(
CreateIssuedLogResponse.newBuilder().setIssuedLogId(issuedLog.getId()).build());
responseObserver.onCompleted();
}

@Override
public void createEnterLog(
CreateEnterLogRequest request,
StreamObserver<CreateEnterLogResponse> responseObserver) {
EnterLog enterLog =
enterLogRepository.save(
EnterLog.createEnterLog(
request.getTenantId(),
request.getAreaId(),
request.getMemberId(),
request.getMemberName(),
request.getPassId(),
VisitCategory.valueOf(request.getVisitCategory())));
responseObserver.onNext(
CreateEnterLogResponse.newBuilder().setEnterLogId(enterLog.getId()).build());
responseObserver.onCompleted();
}

@Override
public void createBuildingEnterLog(
CreateBuildingEnterLogRequest request,
StreamObserver<CreateBuildingEnterLogResponse> responseObserver) {
BuildingEnterLog buildingEnterLog =
buildingEnterLogRepository.save(
BuildingEnterLog.createBuildingEnterLog(
request.getTenantId(),
request.getBuildingId(),
request.getMemberId(),
request.getMemberName(),
request.getPassId(),
Direction.valueOf(request.getDirection()),
VisitCategory.valueOf(request.getVisitCategory())));
responseObserver.onNext(
CreateBuildingEnterLogResponse.newBuilder()
.setBuildingEnterLogId(buildingEnterLog.getId())
.build());
responseObserver.onCompleted();
}
}