Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
3a3e0f2
feat:create refreshToken and accessToken
YewonParkk Oct 17, 2024
cc97b7a
feat: JWT login/logout/refresh/authentication/authorization
YewonParkk Oct 19, 2024
4d09ad2
feat: JWT login/logout/refresh/authentication/authorization
YewonParkk Oct 19, 2024
6b2c132
feat:add user register
YewonParkk Oct 19, 2024
20cb9e5
feat : add signup / login / logout / password change / password initi…
YewonParkk Oct 26, 2024
e64387e
fix : bookmark branch conflict repair_application.yml(merge)/RedisCon…
YewonParkk Oct 31, 2024
31a0a09
feat: generate Bookmark
YewonParkk Nov 13, 2024
86ea1ab
fix: Merge develop to bookmark branch
YewonParkk Nov 13, 2024
1dd3e3f
fix: Merge badge branch to bookmark branch
YewonParkk Nov 11, 2024
f0b76dc
fix: Correct typos in bookmark branches
YewonParkk Nov 13, 2024
4cfbb82
Change DEFACT_TOKEN value in config.js file and change X-QQ-AUTH-TOKE…
YewonParkk Nov 13, 2024
06648a2
fix: Modify conflict and Run Error(Requires creation of My.html for c…
YewonParkk Nov 13, 2024
df75761
feat: complete Security & add bookmark & badge
YewonParkk Nov 29, 2024
2b31fd7
feat: merge develop
YewonParkk Nov 29, 2024
beb8217
feat: merge develop
YewonParkk Nov 29, 2024
3ce163f
feat: add reset password
YewonParkk Nov 29, 2024
a23dd1b
feat: add change password logic & modify css detail
YewonParkk Nov 30, 2024
a980068
feat: add change nickname logic
YewonParkk Nov 30, 2024
4788171
feat: (이전 커밋 실수로 인해 재커밋)add change nickname logic
YewonParkk Nov 30, 2024
2a66291
feat: add profile Image management logic & Add logic to the page when…
YewonParkk Nov 30, 2024
e5944ad
feat: Modify logic when clicking the answer list in My Page
YewonParkk Nov 30, 2024
e5e3edf
Merge branch 'develop' into feature/profileImage-74
YewonParkk Dec 1, 2024
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
23 changes: 19 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,20 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
implementation 'org.springframework.boot:spring-boot-starter-aop'

// spring
// implementation 'org.springframework.boot:spring-boot-starter-mail'

// Jwt
implementation 'io.jsonwebtoken:jjwt-api:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.6'

// Spring Security
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'

// jwt
implementation("io.jsonwebtoken:jjwt-api:0.11.2")
implementation("io.jsonwebtoken:jjwt-jackson:0.11.2")
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.2")

// lombok
compileOnly 'org.projectlombok:lombok'
Expand All @@ -49,6 +58,10 @@ dependencies {
// redis
implementation("org.springframework.boot:spring-boot-starter-data-redis:2.7.7")

//embedded-redis
// implementation group: 'it.ozimov', name: 'embedded-redis', version: '0.7.1'
implementation 'com.github.codemonstur:embedded-redis:1.4.3'

// s3
implementation("io.awspring.cloud:spring-cloud-aws-s3:3.0.2")
implementation platform('software.amazon.awssdk:bom:2.21.0')
Expand All @@ -71,6 +84,8 @@ dependencies {

// test
testImplementation 'org.springframework.boot:spring-boot-starter-test'


}

compileJava {
Expand Down
Binary file added dump.rdb
Binary file not shown.
20 changes: 19 additions & 1 deletion src/main/java/com/hanshin/supernova/SupernovaApplication.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.hanshin.supernova;

import com.hanshin.supernova.util.TimeUtil;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
Expand All @@ -10,6 +13,21 @@ public class SupernovaApplication {

public static void main(String[] args) {
SpringApplication.run(SupernovaApplication.class, args);
}

// HikariCP 데이터소스 설정
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/supernova");
hikariConfig.setUsername("root");
hikariConfig.setPassword("1234");

HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);

// TimeUtil 객체 생성 및 시간 출력
TimeUtil timeUtil = new TimeUtil(hikariDataSource);
timeUtil.printTime();

// HikariCP 데이터소스 닫기
hikariDataSource.close();

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.hanshin.supernova.exception.dto.ErrorType;
import com.hanshin.supernova.exception.gpt.GptInvalidException;
import com.hanshin.supernova.rate_limiter.annotation.RateLimit;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.json.simple.parser.ParseException;
import org.springframework.stereotype.Service;
Expand All @@ -20,6 +21,7 @@ public class AiAnswerService {

@RateLimit(key = "'createAIAnswerTest2:user' + #user.id", limit = 5, period = 24 * 60 * 60)
public AiAnswerResponse generateAiAnswer(AuthUser user, String title, String content) {

try {
return chatGptAPIManager.generateAiAnswer(title, content);
} catch (ParseException | JsonProcessingException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ public AnswerResponse createAnswer(AuthUser user, Long qId, AnswerRequest reques

return getAnswerResponse(savedAnswer, findUser);
}

/**
* 답변 조회
*/
Expand Down Expand Up @@ -187,6 +186,7 @@ public AnswerResponse updateAnswerRecommendation(AuthUser user, Long aId) {
return AnswerResponse.toResponse(
findAnswer.getId(),
findUser.getNickname(),
findUser.getProfileImageUrl(),
findAnswer.getAnswer(),
findAnswer.getCreatedAt(),
findAnswer.getRecommendationCnt(),
Expand Down Expand Up @@ -217,6 +217,7 @@ private static AnswerResponse getAnswerResponse(Answer answer, User user) {
return AnswerResponse.toResponse(
answer.getId(),
user.getNickname(),
user.getProfileImageUrl(),
answer.getAnswer(),
answer.getCreatedAt(),
answer.getRecommendationCnt(),
Expand Down Expand Up @@ -260,4 +261,4 @@ private static void validateSameAnswerer(Answer findAnswer, Long userId) {
throw new AuthInvalidException(ErrorType.NON_IDENTICAL_USER_ERROR);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.hanshin.supernova.answer.dto.response;

import com.hanshin.supernova.answer.domain.Tag;

import java.time.LocalDateTime;

import lombok.AllArgsConstructor;
import lombok.Data;

Expand All @@ -11,6 +13,7 @@ public class AnswerResponse {

private Long id;
private String nickname;
private String profileImageUrl;
private String answer;
private LocalDateTime createdAt;
private int recCnt;
Expand All @@ -19,10 +22,9 @@ public class AnswerResponse {
private boolean isAi;
private boolean isAccepted;

public static AnswerResponse toResponse(Long id, String nickname, String answer,
LocalDateTime createdAt, int recCnt,
Tag tag, String source, boolean isAi, boolean isAccepted) {
return new AnswerResponse(id, nickname, answer, createdAt, recCnt, tag, source, isAi,
isAccepted);
public static AnswerResponse toResponse(Long id, String nickname, String profileImageUrl, String answer,
LocalDateTime createdAt, int recCnt, Tag tag, String source,
boolean isAi, boolean isAccepted) {
return new AnswerResponse(id, nickname, profileImageUrl, answer, createdAt, recCnt, tag, source, isAi, isAccepted);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package com.hanshin.supernova.answer.infrastructure;

import com.hanshin.supernova.answer.domain.Answer;

import java.util.List;

import io.lettuce.core.dynamic.annotation.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -11,4 +15,31 @@
public interface AnswerRepository extends JpaRepository<Answer, Long> {

List<Answer> findAllByQuestionId(Long qId);

/**
* 특정 사용자가 작성한 답변 중 소스가 있고 채택된 답변을 가져오는 메서드
*
* @param userId 답변 작성자 ID
* @return 소스가 있고 채택된 답변 목록
*/
@Query("SELECT a FROM Answer a WHERE a.answererId = :userId AND a.isAccepted = true AND a.source IS NOT NULL")
List<Answer> findAcceptedAnswersWithSourceByUserId(@Param("userId") Long userId);

/**
* 사용자가 작성한 답변 중 소스를 제공하고 추천 수가 10회 이상인 답변 목록을 조회합니다.
*
* @param userId 사용자의 ID
* @param recommendationThreshold 추천 수 기준
* @return 추천 수가 기준을 넘는 답변 목록
*/
@Query("SELECT a FROM Answer a " +
"WHERE a.answererId = :userId AND a.source IS NOT NULL " +
"AND a.recommendationCnt >= :recommendationThreshold")
List<Answer> findPopularAnswersWithSourceByUserId(@Param("userId") Long userId,
@Param("recommendationThreshold") int recommendationThreshold);


// 특정 사용자가 작성한 답변 목록을 최신순으로 조회
@Query("SELECT a FROM Answer a WHERE a.answererId = :userId ORDER BY a.createdAt DESC")
List<Answer> findAllByAnswererId(@Param("userId") Long userId);
}
6 changes: 6 additions & 0 deletions src/main/java/com/hanshin/supernova/auth/AuthConstants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.hanshin.supernova.auth;

public class AuthConstants {
public static final String ACCESS_TOKEN_HEADER_KEY = "X-QQ-ACCESS-TOKEN"; // 기존 X-QQ-AUTH-TOKEN을 변경 // AccessToken 헤더
public static final String REFRESH_TOKEN_HEADER_KEY = "X-QQ-REFRESH-TOKEN"; // RefreshToken 헤더
}
5 changes: 0 additions & 5 deletions src/main/java/com/hanshin/supernova/auth/AuthCostants.java

This file was deleted.

This file was deleted.

113 changes: 0 additions & 113 deletions src/main/java/com/hanshin/supernova/auth/application/TokenService.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package com.hanshin.supernova.auth.dto.request;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;

@Data
public class AuthLoginRequest {

@NotBlank
@Email
private String email;

@NotBlank
private String password;
}
Loading