Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
58d472a
refactor: image 다운로드 메서드 분리
rong5026 Feb 25, 2025
9440fee
style: sns-client모듈에서도 swagger 사용할 수 있도록 전역으로 적용
rong5026 Feb 25, 2025
db5f247
refactor: TwitterResponse Swagger설명
rong5026 Feb 25, 2025
1f81349
refactor: Twitter 요청URL Constants생성
rong5026 Feb 25, 2025
3c3a327
docs: 필요없는 파일 제거
rong5026 Feb 25, 2025
9377347
refactor: media upload 메서드 분리
rong5026 Feb 25, 2025
f09bd27
docs: 게시물 세부 주제 생성 프롬프트 변경
y-ngm-n Feb 26, 2025
72b2274
Merge pull request #284 from YAPP-Github/docs/#283
y-ngm-n Feb 27, 2025
63730c0
fix: updated_at이 자동으로 생성안되는 오류 수정
rong5026 Feb 27, 2025
4ef13f7
refactor: 트위터 로그인 API 직접 구현
rong5026 Feb 27, 2025
b8ea3b0
Merge pull request #285 from YAPP-Github/refactor/#282
rong5026 Mar 4, 2025
df8f13d
Merge pull request #286 from YAPP-Github/refactor/#280
rong5026 Mar 4, 2025
5ae2792
refactor: 트위터 ClientKey & ClientSecret으로 토큰 발급받로고 설정
rong5026 Mar 4, 2025
9469d8d
refactor: TwitterOauthUtil Sns 모듈에서 관리하도록 변경
rong5026 Mar 5, 2025
ace34da
Merge pull request #288 from YAPP-Github/refactor/#287
rong5026 Mar 5, 2025
ee87c89
style: PostStatusType String value 추가
rong5026 Mar 7, 2025
e0f4976
feature: 업로드 시간대 ENUM설정
rong5026 Mar 7, 2025
3204acc
feature: 빠른 업로드 시간 설정 api 구현
rong5026 Mar 7, 2025
4c96233
refactor: 업로드 시작 날짜 LocalDate형식으로 변경
rong5026 Mar 13, 2025
40d2c60
fix: LocalDate로 변환 로직 제거
rong5026 Mar 13, 2025
8afeeea
refactor: Post엔티티만 조회하도록 Fetch Join 제거
rong5026 Mar 13, 2025
d2de816
refactor: PostStatus상태값 변경에 따른 수정
rong5026 Mar 13, 2025
3b266bd
refactor: Confirmed + Reserved 상태값인 Post 호출하도록 수정
rong5026 Mar 13, 2025
e7aae6a
Merge pull request #291 from YAPP-Github/feature/#290
rong5026 Mar 18, 2025
3c103f0
chore: AgentController 버전 분리
y-ngm-n Mar 25, 2025
48b2a38
chore: AgentController 버전 분리
y-ngm-n Mar 25, 2025
ee280d3
chore: NewsCategoryController 버전 분리
y-ngm-n Mar 25, 2025
6729ab2
chore: NewsCategoryController 버전 분리
y-ngm-n Mar 25, 2025
a662fbb
chore: PostController 버전 분리
y-ngm-n Mar 25, 2025
bd64444
chore: TwitterController 버전 분리
y-ngm-n Mar 25, 2025
a72a6f1
chore: UserController 버전 분리
y-ngm-n Mar 25, 2025
75b57d7
chore: S3Controller 버전 분리
y-ngm-n Mar 25, 2025
764e081
chore: AuthController 버전 분리
y-ngm-n Mar 25, 2025
4fe6db9
chore: TwitterController 버전 분리 원복
y-ngm-n Mar 25, 2025
2c749ef
chore: domain 패키지 버저닝
y-ngm-n Apr 2, 2025
7ea0c18
Merge pull request #296 from YAPP-Github/chore/#295
y-ngm-n Apr 2, 2025
ab50d1b
chore: twitter api 버저닝
y-ngm-n Apr 10, 2025
1d7b271
Merge pull request #299 from YAPP-Github/chore/#298
y-ngm-n Apr 10, 2025
3ed78a9
chore: 프롬프트 줄바꿈 개선
y-ngm-n Apr 10, 2025
6cdd7a1
chore: 프롬프트 글자수 문제 해결
y-ngm-n Apr 10, 2025
229f6c5
chore: 프롬프트 말투 누락 문제 해결
y-ngm-n Apr 10, 2025
ba3273b
chore: 이모지 사용 관련 프롬프트 보완
y-ngm-n Apr 10, 2025
14f6e1e
chore: 글자수 제한 변경
y-ngm-n Apr 10, 2025
71af391
Merge pull request #304 from YAPP-Github/chore/#300
y-ngm-n Apr 10, 2025
05664de
chore: Twitter기존 client key값으로 로그인
rong5026 Apr 14, 2025
acbd9e5
chore: TwitterController에도 변경사항 적용
y-ngm-n Apr 17, 2025
5bc7019
Merge pull request #307 from YAPP-Github/chore/#306
y-ngm-n Apr 17, 2025
948a94d
merge: main-develop 충돌 resolve
y-ngm-n Apr 17, 2025
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
3 changes: 0 additions & 3 deletions application/main-app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ dependencies {
// Security
implementation "org.springframework.boot:spring-boot-starter-security"

// swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.3'

// aws
implementation 'io.awspring.cloud:spring-cloud-aws-starter-s3:3.0.0'

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package org.mainapp.aws.s3.controller;

import org.mainapp.aws.s3.controller.response.CreatePutUrlResponse;
import org.mainapp.aws.s3.service.S3Service;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;

@Deprecated
@RestController
@RequiredArgsConstructor
@RequestMapping("/presigned-url")
@Tag(name = "Pre-signed URL API", description = "pre-signed URL 발급 관련 API입니다.")
public class LegacyS3Controller {

private final S3Service s3Service;

@Operation(
summary = "게시물 그룹 이미지 pre-signed URL 발급 API",
description = "게시물 그룹에 포함되어 게시물 생성에 사용되는 이미지에 대한 pre-signed URL을 발급합니다.\n\n"
+ "해당 URL로 업로드하면 서버에서 설정한 파일명으로 업로드되므로, 응답에 포함된 imageUrl 값을 사용하시면 됩니다."
)
@GetMapping("/post-group")
public ResponseEntity<CreatePutUrlResponse> getPreSignedPutUrlForPostGroup() {
return ResponseEntity.ok(s3Service.createPreSignedPutUrl("post-group/"));
}

@Operation(
summary = "게시물 이미지 pre-signed URL 발급 API",
description = "게시물에 실제로 포함되는 이미지에 대한 pre-signed URL을 발급합니다.\n\n"
+ "해당 URL로 업로드하면 서버에서 설정한 파일명으로 업로드되므로, 응답에 포함된 imageUrl 값을 사용하시면 됩니다."
)
@GetMapping("/post")
public ResponseEntity<CreatePutUrlResponse> getPreSignedPutUrlForPost() {
return ResponseEntity.ok(s3Service.createPreSignedPutUrl("post/"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

@RestController
@RequiredArgsConstructor
@RequestMapping("/presigned-url")
@RequestMapping("/v1/presigned-url")
@Tag(name = "Pre-signed URL API", description = "pre-signed URL 발급 관련 API입니다.")
public class S3Controller {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package org.mainapp.domain.agent.controller;
package org.mainapp.domain.v1.agent.controller;

import org.mainapp.domain.agent.controller.request.UpdateAgentPersonalSettingRequest;
import org.mainapp.domain.agent.controller.response.GetAgentPlanResponse;
import org.mainapp.domain.agent.controller.response.GetAgentsResponse;
import org.mainapp.domain.agent.controller.response.GetDetailAgentResponse;
import org.mainapp.domain.agent.service.AgentService;
import org.mainapp.domain.v1.agent.controller.request.UpdateAgentPersonalSettingRequest;
import org.mainapp.domain.v1.agent.controller.response.GetAgentPlanResponse;
import org.mainapp.domain.v1.agent.controller.response.GetAgentsResponse;
import org.mainapp.domain.v1.agent.controller.response.GetDetailAgentResponse;
import org.mainapp.domain.v1.agent.service.AgentService;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -19,7 +19,7 @@
import lombok.RequiredArgsConstructor;

@RestController
@RequestMapping("/agents")
@RequestMapping("/v1/agents")
@RequiredArgsConstructor
@Tag(name = "Agent API", description = "사용자가 연동한 SNS 계정(에이전트)에 대한 요청을 처리하는 API입니다.")
public class AgentController {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package org.mainapp.domain.v1.agent.controller;

import org.mainapp.domain.v1.agent.controller.request.UpdateAgentPersonalSettingRequest;
import org.mainapp.domain.v1.agent.controller.response.GetAgentPlanResponse;
import org.mainapp.domain.v1.agent.controller.response.GetAgentsResponse;
import org.mainapp.domain.v1.agent.controller.response.GetDetailAgentResponse;
import org.mainapp.domain.v1.agent.service.AgentService;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;

@Deprecated
@RestController
@RequestMapping("/agents")
@RequiredArgsConstructor
@Tag(name = "Agent API", description = "사용자가 연동한 SNS 계정(에이전트)에 대한 요청을 처리하는 API입니다.")
public class LegacyAgentController {

private final AgentService agentService;

@Operation(summary = "계정 목록 조회 API", description = "사용자가 연동한 SNS 계정 목록을 조회합니다.")
@GetMapping
public ResponseEntity<GetAgentsResponse> getAgents() {
return ResponseEntity.ok(agentService.getAgents());
}

@Operation(summary = "계정 상세 조회 API", description = "사용자가 연동한 SNS 계정의 상세 정보를 조회합니다.")
@GetMapping("/{agentId}")
public ResponseEntity<GetDetailAgentResponse> getDetailAgent(@PathVariable Long agentId) {
return ResponseEntity.ok(agentService.getDetailAgent(agentId));
}

@Operation(
summary = "계정 개인화 설정 수정 API",
description = """
사용자가 연동한 SNS 계정의 개인화 설정을 변경합니다.

**변경되는 필드만 채워주시면 됩니다!**

빈 문자열로는 변경할 수 없습니다."""
)
@PutMapping("/{agentId}/personal-setting")
public ResponseEntity<Void> updateAgentPersonalSetting(
@PathVariable Long agentId,
@Validated @RequestBody UpdateAgentPersonalSettingRequest request
) {
agentService.updateAgentPersonalSetting(agentId, request);
return ResponseEntity.ok().build();
}

@Operation(summary = "계정 요금제 플랜 조회", description = "사용자가 연동한 SNS 계정의 요금제를 조회합니다.")
@GetMapping("/{agentId}/agent-plan")
public ResponseEntity<GetAgentPlanResponse> getAgentPlan(@PathVariable Long agentId) {
return ResponseEntity.ok(agentService.getAgentPlan(agentId));
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.mainapp.domain.agent.controller.request;
package org.mainapp.domain.v1.agent.controller.request;

import org.domainmodule.agent.entity.AgentPersonalSetting;
import org.domainmodule.agent.entity.type.AgentToneType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.mainapp.domain.agent.controller.response;
package org.mainapp.domain.v1.agent.controller.response;

import org.domainmodule.agent.entity.Agent;
import org.domainmodule.agent.entity.type.AgentPlanType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package org.mainapp.domain.agent.controller.response;
package org.mainapp.domain.v1.agent.controller.response;

import java.util.List;

import org.domainmodule.agent.entity.Agent;
import org.mainapp.domain.agent.controller.response.type.AgentResponse;
import org.mainapp.domain.v1.agent.controller.response.type.AgentResponse;

import io.swagger.v3.oas.annotations.media.Schema;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package org.mainapp.domain.agent.controller.response;
package org.mainapp.domain.v1.agent.controller.response;

import org.domainmodule.agent.entity.Agent;
import org.domainmodule.agent.entity.AgentPersonalSetting;
import org.mainapp.domain.agent.controller.response.type.AgentPersonalSettingResponse;
import org.mainapp.domain.agent.controller.response.type.AgentResponse;
import org.mainapp.domain.v1.agent.controller.response.type.AgentPersonalSettingResponse;
import org.mainapp.domain.v1.agent.controller.response.type.AgentResponse;

import io.swagger.v3.oas.annotations.media.Schema;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.mainapp.domain.agent.controller.response.type;
package org.mainapp.domain.v1.agent.controller.response.type;

import org.domainmodule.agent.entity.AgentPersonalSetting;
import org.domainmodule.agent.entity.type.AgentToneType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.mainapp.domain.agent.controller.response.type;
package org.mainapp.domain.v1.agent.controller.response.type;

import java.time.LocalDateTime;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.mainapp.domain.agent.exception;
package org.mainapp.domain.v1.agent.exception;

import org.mainapp.global.error.ErrorCodeStatus;
import org.springframework.http.HttpStatus;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.mainapp.domain.agent.service;
package org.mainapp.domain.v1.agent.service;

import java.util.List;

Expand All @@ -9,12 +9,12 @@
import org.domainmodule.agent.repository.AgentPersonalSettingRepository;
import org.domainmodule.agent.repository.AgentRepository;
import org.domainmodule.user.entity.User;
import org.mainapp.domain.agent.controller.request.UpdateAgentPersonalSettingRequest;
import org.mainapp.domain.agent.controller.response.GetAgentPlanResponse;
import org.mainapp.domain.agent.controller.response.GetAgentsResponse;
import org.mainapp.domain.agent.controller.response.GetDetailAgentResponse;
import org.mainapp.domain.agent.exception.AgentErrorCode;
import org.mainapp.domain.user.service.UserService;
import org.mainapp.domain.v1.agent.controller.request.UpdateAgentPersonalSettingRequest;
import org.mainapp.domain.v1.agent.controller.response.GetAgentPlanResponse;
import org.mainapp.domain.v1.agent.controller.response.GetAgentsResponse;
import org.mainapp.domain.v1.agent.controller.response.GetDetailAgentResponse;
import org.mainapp.domain.v1.agent.exception.AgentErrorCode;
import org.mainapp.domain.v1.user.service.UserService;
import org.mainapp.global.error.CustomException;
import org.mainapp.global.util.SecurityUtil;
import org.snsclient.twitter.dto.response.TwitterUserInfoDto;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.mainapp.domain.agent.service;
package org.mainapp.domain.v1.agent.service;

import org.domainmodule.agent.entity.Agent;
import org.domainmodule.agent.entity.AgentPersonalSetting;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.mainapp.domain.auth.controller;
package org.mainapp.domain.v1.auth.controller;

import org.mainapp.domain.auth.service.AuthServiceImpl;
import org.mainapp.domain.v1.auth.service.AuthServiceImpl;
import org.mainapp.global.constants.HeaderConstants;
import org.mainapp.global.util.ResponseUtil;
import org.springframework.http.ResponseEntity;
Expand All @@ -14,15 +14,16 @@
import lombok.RequiredArgsConstructor;

@RestController
@RequestMapping("/auth")
@RequestMapping("/v1/auth")
@RequiredArgsConstructor
@Tag(name = "Auth API", description = "로그인/회원가입에 대한 요청을 처리하는 API입니다.")
public class AuthController {
private final AuthServiceImpl authService;
private final ResponseUtil responseUtil;

@DeleteMapping("/logout")
public ResponseEntity<Void> logout(@RequestHeader("Authorization") String accessToken, HttpServletResponse response) {
public ResponseEntity<Void> logout(@RequestHeader("Authorization") String accessToken,
HttpServletResponse response) {
authService.logout(accessToken);
responseUtil.expireHttpOnlyCookie(response, HeaderConstants.REFRESH_TOKEN_HEADER);
return ResponseEntity.noContent().build();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package org.mainapp.domain.v1.auth.controller;

import org.mainapp.domain.v1.auth.service.AuthServiceImpl;
import org.mainapp.global.constants.HeaderConstants;
import org.mainapp.global.util.ResponseUtil;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;

@Deprecated
@RestController
@RequestMapping("/auth")
@RequiredArgsConstructor
@Tag(name = "Auth API", description = "로그인/회원가입에 대한 요청을 처리하는 API입니다.")
public class LegacyAuthController {
private final AuthServiceImpl authService;
private final ResponseUtil responseUtil;

@DeleteMapping("/logout")
public ResponseEntity<Void> logout(@RequestHeader("Authorization") String accessToken,
HttpServletResponse response) {
authService.logout(accessToken);
responseUtil.expireHttpOnlyCookie(response, HeaderConstants.REFRESH_TOKEN_HEADER);
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.mainapp.domain.auth.exception;
package org.mainapp.domain.v1.auth.exception;

import org.mainapp.global.error.ErrorCodeStatus;
import org.springframework.http.HttpStatus;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package org.mainapp.domain.auth.service;
package org.mainapp.domain.v1.auth.service;

import org.domainmodule.user.entity.User;
import org.mainapp.global.oauth2.userinfo.OAuth2UserInfo;

public interface AuthService {
void createAndSaveOauth(OAuth2UserInfo oAuth2Response, User user);

User loginOrRegisterUser(OAuth2UserInfo oAuth2Response);

void logout(String accessToken);
}

Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package org.mainapp.domain.auth.service;
package org.mainapp.domain.v1.auth.service;

import java.util.Optional;

import org.domainmodule.user.entity.Oauth;
import org.domainmodule.user.entity.User;
import org.domainmodule.user.entity.type.ProviderType;
import org.domainmodule.user.repository.OauthRepository;
import org.mainapp.domain.token.service.TokenServiceImpl;
import org.mainapp.domain.user.service.UserServiceImpl;
import org.mainapp.domain.v1.token.service.TokenServiceImpl;
import org.mainapp.domain.v1.user.service.UserServiceImpl;
import org.mainapp.global.oauth2.userinfo.OAuth2UserInfo;
import org.mainapp.global.util.JwtUtil;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -48,7 +48,6 @@ private Optional<User> findUserByOAuthInfo(OAuth2UserInfo oAuth2Response) {
});
}


// 회원가입
private User registerUser(OAuth2UserInfo oAuth2Response) {
// 유저 생성
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package org.mainapp.domain.v1.newscategory.controller;

import java.util.List;

import org.mainapp.domain.v1.newscategory.controller.response.NewsCategoryResponse;
import org.mainapp.domain.v1.newscategory.service.NewsCategoryService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;

@Deprecated
@RestController
@RequestMapping("/news-categories")
@RequiredArgsConstructor
@Tag(name = "NewsCategory API", description = "뉴스 카테고리에 대한 요청을 처리하는 API입니다.")
public class LegacyNewsCategoryController {

private final NewsCategoryService newsCategoryService;

@Operation(summary = "뉴스 카테고리 목록 조회 API", description = "서비스의 전체 뉴스 카테고리 목록을 조회합니다.")
@GetMapping
public ResponseEntity<List<NewsCategoryResponse>> getNewsCategories() {
return ResponseEntity.ok().body(newsCategoryService.getNewsCategories());
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package org.mainapp.domain.newscategory.controller;
package org.mainapp.domain.v1.newscategory.controller;

import java.util.List;

import org.mainapp.domain.newscategory.controller.response.NewsCategoryResponse;
import org.mainapp.domain.newscategory.service.NewsCategoryService;
import org.mainapp.domain.v1.newscategory.controller.response.NewsCategoryResponse;
import org.mainapp.domain.v1.newscategory.service.NewsCategoryService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
Expand All @@ -14,7 +14,7 @@
import lombok.RequiredArgsConstructor;

@RestController
@RequestMapping("/news-categories")
@RequestMapping("/v1/news-categories")
@RequiredArgsConstructor
@Tag(name = "NewsCategory API", description = "뉴스 카테고리에 대한 요청을 처리하는 API입니다.")
public class NewsCategoryController {
Expand Down
Loading
Loading