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
13 changes: 6 additions & 7 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
docker pull ${{ env.DOCKER_IMAGE_NAME }}:latest || true

- name: Run tests (Testcontainers, Spring REST Docs)
run: ./gradlew test --no-daemon
run: ./gradlew test asciidoctor --no-daemon

- name: Build JAR
run: ./gradlew bootJar --no-daemon
Expand Down Expand Up @@ -69,9 +69,8 @@ jobs:
port: 22
envs: GITHUB_SHA
script: |
cd dnd-12th-7-backend
sudo docker compose stop app
sudo docker compose rm -f app
sudo docker rmi ${{env.DOCKER_IMAGE_NAME}}:latest
sudo docker compose pull app
sudo docker compose up -d app
docker compose stop app
docker compose rm -f app
docker rmi ${{env.DOCKER_IMAGE_NAME}}:latest
docker compose pull app
docker compose up -d app
4 changes: 3 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# 실행 환경 (최종 실행 이미지만 남김)
FROM openjdk:17-jdk-slim
FROM eclipse-temurin:17-jdk

WORKDIR /app
COPY build/libs/*.jar /app/moddo.jar
# REST Docs (HTML 결과물)
COPY build/docs/asciidoc /app/docs
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "moddo.jar"]
85 changes: 0 additions & 85 deletions src/docs/asciidoc/appointmentMember.adoc

This file was deleted.

85 changes: 85 additions & 0 deletions src/docs/asciidoc/member.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
= 모임원 (AppointmentMember)
:toc: left
:toclevels: 2

== 모임원 추가

기존 모임 참여자에 새로운 모임 참여자를 추가할 수 있습니다.

Enum

- MANAGER: 총무

- PARTICIPANT: 참여자

=== Example

include::{snippets}/member-controller-test/save-appointment-member/curl-request.adoc[]

=== HTTP

==== 요청

include::{snippets}/member-controller-test/save-appointment-member/http-request.adoc[]

==== 응답

include::{snippets}/member-controller-test/save-appointment-member/http-response.adoc[]

=== Body

==== 요청

include::{snippets}/member-controller-test/save-appointment-member/request-body.adoc[]

==== 응답

include::{snippets}/member-controller-test/save-appointment-member/response-body.adoc[]

== 결제 상태 변경

모임원의 결제 상태를 변경할 수 있습니다.

=== Example

include::{snippets}/member-controller-test/update-payment-status/curl-request.adoc[]

=== HTTP

==== 요청

include::{snippets}/member-controller-test/update-payment-status/http-request.adoc[]

==== 응답

include::{snippets}/member-controller-test/update-payment-status/http-response.adoc[]

=== Body

==== 요청

include::{snippets}/member-controller-test/update-payment-status/request-body.adoc[]

==== 응답

include::{snippets}/member-controller-test/update-payment-status/response-body.adoc[]

== 모임원 삭제

참여자Id를 통해 참여자를 삭제할 수 있습니다.

- 단, 총무 참여자의 경우 삭제할 수 없습니다.

=== Example

include::{snippets}/member-controller-test/delete-appointment-member/curl-request.adoc[]

=== HTTP

==== 요청

include::{snippets}/member-controller-test/delete-appointment-member/http-request.adoc[]

==== 응답

include::{snippets}/member-controller-test/delete-appointment-member/http-response.adoc[]
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.dnd.moddo.auth.application;

import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.dnd.moddo.auth.model.AuthDetails;
import com.dnd.moddo.user.infrastructure.UserRepository;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Transactional(readOnly = true)
@Service
public class AuthDetailsService implements UserDetailsService {

private final UserRepository userRepository;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

Long userId = parseUserId(username);

var user = userRepository.findById(userId)
.orElseThrow(() ->
new UsernameNotFoundException("User not found: " + username)
);

return new AuthDetails(
user.getId(),
user.getEmail(),
user.getAuthority().name()
);
}

private Long parseUserId(String username) {
try {
return Long.parseLong(username);
} catch (NumberFormatException e) {
throw new UsernameNotFoundException("Invalid user id: " + username);
}
}

}
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package com.dnd.moddo.domain.auth.service;
package com.dnd.moddo.auth.application;

import java.util.UUID;

import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.dnd.moddo.auth.infrastructure.security.JwtProvider;
import com.dnd.moddo.auth.presentation.response.KakaoLogoutResponse;
import com.dnd.moddo.auth.presentation.response.KakaoProfile;
import com.dnd.moddo.auth.presentation.response.KakaoTokenResponse;
import com.dnd.moddo.auth.presentation.response.TokenResponse;
import com.dnd.moddo.common.exception.ModdoException;
import com.dnd.moddo.domain.auth.dto.KakaoLogoutResponse;
import com.dnd.moddo.domain.auth.dto.KakaoProfile;
import com.dnd.moddo.domain.auth.dto.KakaoTokenResponse;
import com.dnd.moddo.domain.user.dto.request.GuestUserSaveRequest;
import com.dnd.moddo.domain.user.dto.request.UserSaveRequest;
import com.dnd.moddo.domain.user.entity.User;
import com.dnd.moddo.domain.user.service.CommandUserService;
import com.dnd.moddo.domain.user.service.QueryUserService;
import com.dnd.moddo.global.jwt.dto.TokenResponse;
import com.dnd.moddo.global.jwt.utill.JwtProvider;
import com.dnd.moddo.user.application.CommandUserService;
import com.dnd.moddo.user.application.QueryUserService;
import com.dnd.moddo.user.domain.User;
import com.dnd.moddo.user.presentation.request.GuestUserSaveRequest;
import com.dnd.moddo.user.presentation.request.UserSaveRequest;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.dnd.moddo.domain.auth.service;
package com.dnd.moddo.auth.application;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
Expand All @@ -9,11 +9,11 @@
import org.springframework.web.client.RestClient;
import org.springframework.web.client.RestClientResponseException;

import com.dnd.moddo.auth.presentation.response.KakaoLogoutResponse;
import com.dnd.moddo.auth.presentation.response.KakaoProfile;
import com.dnd.moddo.auth.presentation.response.KakaoTokenResponse;
import com.dnd.moddo.common.config.KakaoProperties;
import com.dnd.moddo.common.exception.ModdoException;
import com.dnd.moddo.domain.auth.dto.KakaoLogoutResponse;
import com.dnd.moddo.domain.auth.dto.KakaoProfile;
import com.dnd.moddo.domain.auth.dto.KakaoTokenResponse;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.dnd.moddo.domain.auth.service;
package com.dnd.moddo.auth.application;

import org.springframework.stereotype.Service;

import com.dnd.moddo.domain.auth.exception.TokenInvalidException;
import com.dnd.moddo.domain.user.entity.User;
import com.dnd.moddo.domain.user.repository.UserRepository;
import com.dnd.moddo.global.jwt.dto.RefreshResponse;
import com.dnd.moddo.global.jwt.properties.JwtConstants;
import com.dnd.moddo.global.jwt.utill.JwtProvider;
import com.dnd.moddo.global.jwt.utill.JwtUtil;
import com.dnd.moddo.auth.infrastructure.security.JwtConstants;
import com.dnd.moddo.auth.infrastructure.security.JwtProvider;
import com.dnd.moddo.auth.infrastructure.security.JwtUtil;
import com.dnd.moddo.auth.model.exception.TokenInvalidException;
import com.dnd.moddo.auth.presentation.response.RefreshResponse;
import com.dnd.moddo.user.domain.User;
import com.dnd.moddo.user.infrastructure.UserRepository;

import lombok.RequiredArgsConstructor;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.dnd.moddo.global.jwt.auth;
package com.dnd.moddo.auth.infrastructure.security;

import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;

import com.dnd.moddo.global.jwt.exception.MissingTokenException;
import com.dnd.moddo.global.jwt.exception.TokenInvalidException;
import com.dnd.moddo.global.jwt.properties.JwtConstants;
import com.dnd.moddo.global.jwt.utill.JwtUtil;
import com.dnd.moddo.global.security.auth.AuthDetailsService;
import com.dnd.moddo.auth.application.AuthDetailsService;
import com.dnd.moddo.auth.infrastructure.security.exception.MissingTokenException;
import com.dnd.moddo.auth.infrastructure.security.exception.TokenInvalidException;

import io.jsonwebtoken.Claims;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.dnd.moddo.auth.infrastructure.security;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public enum JwtConstants {

AUTH_ID("userId"),
GROUP_ID("groupId"),
EMAIL("email"),
TYPE("type"),
EMPTY(" "),
PREFIX("prefix"),
ROLE("role"),
ACCESS_KEY("access_token"),
REFRESH_KEY("refresh_token"),
GROUP_KEY("group_token"),
;

public final String message;

}
Loading
Loading