Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.asyncgate.chat_server.controller

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@RequestMapping("/health")
class HealthCheckController {

@GetMapping
fun healthCheck(): Map<String, String> {
return mapOf("status" to "UP")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.asyncgate.chat_server.exception

import com.asyncgate.chat_server.support.response.FailResponse
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.ControllerAdvice
import org.springframework.web.bind.annotation.ExceptionHandler

@ControllerAdvice
class ChatServerErrorHandler {
private val log: Logger = LoggerFactory.getLogger(ChatServerErrorHandler::class.java)

@ExceptionHandler(ChatServerException::class)
fun handleApiException(e: ChatServerException): ResponseEntity<FailResponse> {
val errorType: FailType = e.failType
val response: FailResponse = FailResponse.of(
errorType.errorCode,
errorType.message,
errorType.status.value()
)
return ResponseEntity.status(errorType.status).body(response)
}

@ExceptionHandler(Exception::class)
fun handleException(exception: Exception) {
log.error("🚨 [Global Error] ${exception.message}", exception)
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.asyncgate.guild_server.client;

import com.asyncgate.guild_server.support.response.SuccessResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@FeignClient(name = "user-server")
public interface UserClient {

@GetMapping("/users")
SuccessResponse<UserClientInfoResponses> getUsersInfo(@RequestParam(required = false) List<String> memberIds);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.asyncgate.guild_server.client;

import java.util.List;

public record UserClientInfoResponses(List<UserClientInfoResponse> responses) {
public record UserClientInfoResponse(String userId, String name, String nickname, String profileImageUrl) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableFeignClients
@EnableFeignClients(basePackages = "com.asyncgate.guild_server.client")
public class FeignClientConfig {

@Bean
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.asyncgate.guild_server.controller;

import com.asyncgate.guild_server.dto.request.DirectChannelCreateRequest;
import com.asyncgate.guild_server.dto.response.DirectResponse;
import com.asyncgate.guild_server.service.DirectService;
import com.asyncgate.guild_server.support.response.SuccessResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/direct")
public class DirectController {

private final DirectService directService;

@PostMapping
public SuccessResponse<DirectResponse> create(
final @AuthenticationPrincipal String currentUserId,
final @RequestBody DirectChannelCreateRequest request
) {
return SuccessResponse.created(
directService.create(currentUserId, request)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.asyncgate.guild_server.domain;

import lombok.Builder;
import lombok.Getter;

import java.util.List;
import java.util.UUID;

@Getter
public class Direct {

private final String id;

@Builder
private Direct(String id, String name) {
this.id = id;
}

public static Direct create() {
return Direct.builder()
.id(UUID.randomUUID().toString())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.asyncgate.guild_server.domain;

import lombok.Builder;
import lombok.Getter;

import java.util.UUID;

@Getter
public class DirectMember {
private final String id;
private final String directId;
private final String memberId;
private final String memberName;

@Builder
private DirectMember(String id, String directId, String memberId, String memberName) {
this.id = id;
this.directId = directId;
this.memberId = memberId;
this.memberName = memberName;
}

public static DirectMember create(final String directId, final String memberId, final String memberName) {
return new DirectMember(UUID.randomUUID().toString(), directId, memberId, memberName);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.asyncgate.guild_server.dto.request;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.List;

@Getter
@AllArgsConstructor
public class DirectChannelCreateRequest {
private List<String> memberIds;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.asyncgate.guild_server.dto.response;

import com.asyncgate.guild_server.client.UserClientInfoResponses;

public record DirectResponse(String directId,UserClientInfoResponses members) {
public static DirectResponse of(final String directId, final UserClientInfoResponses members) {
return new DirectResponse(directId, members);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.asyncgate.guild_server.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Entity
@Table(name = "direct")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DirectEntity {

@Id
private String id;

@Builder
private DirectEntity(String id) {
this.id = id;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.asyncgate.guild_server.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Entity
@Table(name = "direct_member")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DirectMemberEntity {

@Id
private String id;
private String memberId;
private String memberName;

@Builder
private DirectMemberEntity(String id, String memberId, String memberName) {
this.id = id;
this.memberId = memberId;
this.memberName = memberName;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.asyncgate.guild_server.repository;

import com.asyncgate.guild_server.entity.DirectEntity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface DirectJpaRepository extends JpaRepository<DirectEntity, String> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.asyncgate.guild_server.repository;

import com.asyncgate.guild_server.entity.DirectMemberEntity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface DirectMemberJpaRepository extends JpaRepository<DirectMemberEntity, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.asyncgate.guild_server.repository;

import com.asyncgate.guild_server.domain.DirectMember;

import java.util.List;

public interface DirectMemberRepository {
void saveAll(List<DirectMember> directMembers);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.asyncgate.guild_server.repository;

import com.asyncgate.guild_server.domain.DirectMember;
import com.asyncgate.guild_server.support.utility.DomainUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@RequiredArgsConstructor
public class DirectMemberRepositoryImpl implements DirectMemberRepository {

private final DirectMemberJpaRepository jpaRepository;

@Override
public void saveAll(List<DirectMember> directMembers) {
jpaRepository.saveAll(
directMembers.stream()
.map(DomainUtil.DirectMemberMapper::toEntity)
.toList()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.asyncgate.guild_server.repository;

import com.asyncgate.guild_server.domain.Direct;

public interface DirectRepository {
void save(Direct direct);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.asyncgate.guild_server.repository;

import com.asyncgate.guild_server.domain.Direct;
import com.asyncgate.guild_server.support.utility.DomainUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

@Repository
@RequiredArgsConstructor
public class DirectRepositoryImpl implements DirectRepository {
private final DirectJpaRepository jpaRepository;

@Override
public void save(Direct direct) {
jpaRepository.save(
DomainUtil.DirectMapper.toEntity(direct)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public class SecurityConstants {
"/swagger-ui/index.css",
"/v3/api-docs/swagger-config",
"/error",
"/health"
"/health",
"/actuator/info"
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ protected void doFilterInternal(
}

String jwtToken = request.getHeader(HttpHeaders.AUTHORIZATION);

System.out.println("jwtToken = " + jwtToken);

jwtService.authenticate(jwtToken);
filterChain.doFilter(request, response);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.asyncgate.guild_server.service;

import com.asyncgate.guild_server.dto.request.DirectChannelCreateRequest;
import com.asyncgate.guild_server.dto.response.DirectResponse;

public interface DirectService {
DirectResponse create(String currentUserId, DirectChannelCreateRequest request);
}
Loading
Loading