Skip to content

Commit 9eaa1bb

Browse files
authored
Merge pull request #56 from Nexters/dev
#49 디스코드 웹훅 연결
2 parents 6c9e38c + 1b3a6e1 commit 9eaa1bb

File tree

16 files changed

+335
-38
lines changed

16 files changed

+335
-38
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies {
2828
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
2929
implementation 'org.springframework.boot:spring-boot-starter-web'
3030
implementation 'org.springframework.boot:spring-boot-starter-actuator'
31+
implementation 'org.springframework.boot:spring-boot-starter-webflux'
3132
compileOnly 'org.projectlombok:lombok'
3233
developmentOnly 'org.springframework.boot:spring-boot-devtools'
3334
runtimeOnly 'com.mysql:mysql-connector-j'
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package donmani.donmani_server;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.web.reactive.function.client.WebClient;
6+
7+
@Configuration
8+
public class AppConfig {
9+
@Bean
10+
public WebClient webClient(WebClient.Builder builder) {
11+
return builder.build();
12+
}
13+
}

src/main/java/donmani/donmani_server/expense/controller/ExpenseController.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,20 @@
77
import org.springframework.web.bind.annotation.PathVariable;
88
import org.springframework.web.bind.annotation.PostMapping;
99
import org.springframework.web.bind.annotation.RequestBody;
10-
import org.springframework.web.bind.annotation.RequestMapping;
1110
import org.springframework.web.bind.annotation.RequestParam;
1211
import org.springframework.web.bind.annotation.RestController;
1312

1413
import donmani.donmani_server.common.httpStatus.HttpStatusDTO;
1514
import donmani.donmani_server.expense.service.ExpenseService;
16-
import jakarta.persistence.EntityNotFoundException;
1715
import lombok.RequiredArgsConstructor;
1816

19-
import java.util.Map;
20-
2117
@RestController
2218
@RequiredArgsConstructor
2319
public class ExpenseController {
2420
private final ExpenseService expenseService;
2521

2622
@GetMapping("expenses/calendar/{userKey}")
27-
public ResponseEntity<ExpenseResponseDTO> getExpensesCalendarV1(
23+
public ResponseEntity<ExpenseResponseDTO> getExpensesCalendar(
2824
@PathVariable String userKey,
2925
@RequestParam int year,
3026
@RequestParam int month) {
@@ -33,7 +29,7 @@ public ResponseEntity<ExpenseResponseDTO> getExpensesCalendarV1(
3329
}
3430

3531
@GetMapping("api/v1/expenses/calendar/{userKey}")
36-
public ResponseEntity<HttpStatusDTO<ExpenseResponseDTO>> getExpensesCalendarV2(
32+
public ResponseEntity<HttpStatusDTO<ExpenseResponseDTO>> getExpensesCalendarV1(
3733
@PathVariable String userKey,
3834
@RequestParam int year,
3935
@RequestParam int month) {
@@ -47,7 +43,7 @@ public ResponseEntity<HttpStatusDTO<ExpenseResponseDTO>> getExpensesCalendarV2(
4743
}
4844

4945
@GetMapping("api/v1/expenses/list/{userKey}")
50-
public ResponseEntity<HttpStatusDTO<ExpenseResponseDTO>> getExpensesListV2(
46+
public ResponseEntity<HttpStatusDTO<ExpenseResponseDTO>> getExpensesListV1(
5147
@PathVariable String userKey,
5248
@RequestParam int year,
5349
@RequestParam int month) {
@@ -61,7 +57,7 @@ public ResponseEntity<HttpStatusDTO<ExpenseResponseDTO>> getExpensesListV2(
6157
}
6258

6359
@GetMapping("expenses/list/{userKey}")
64-
public ResponseEntity<ExpenseResponseDTO> getExpensesListV1(
60+
public ResponseEntity<ExpenseResponseDTO> getExpensesList(
6561
@PathVariable String userKey,
6662
@RequestParam int year,
6763
@RequestParam int month) {
@@ -70,17 +66,22 @@ public ResponseEntity<ExpenseResponseDTO> getExpensesListV1(
7066
}
7167

7268
@PostMapping("expenses")
73-
public ResponseEntity<Void> addExpenseV1(@RequestBody ExpenseRequestDTO request) {
69+
public ResponseEntity<Void> addExpense(@RequestBody ExpenseRequestDTO request) {
7470
expenseService.addExpense(request);
7571
return ResponseEntity.ok().build();
7672
}
7773

7874
@PostMapping("api/v1/expenses")
79-
public ResponseEntity<HttpStatusDTO<Void>> addExpenseV2(@RequestBody ExpenseRequestDTO request) {
80-
expenseService.addExpense(request);
75+
public ResponseEntity<HttpStatusDTO<Void>> addExpenseV1(@RequestBody ExpenseRequestDTO request) {
76+
try {
77+
expenseService.addExpense(request);
8178

82-
return ResponseEntity.ok(
83-
HttpStatusDTO.response(HttpStatus.CREATED.value(), "성공", null));
79+
// 1. 소비 기록 성공 -> 201
80+
return ResponseEntity.ok(HttpStatusDTO.response(HttpStatus.CREATED.value(), "성공", null));
81+
} catch (Exception e) {
82+
// 2. 소비 기록 실패 -> 500
83+
return ResponseEntity.ok(HttpStatusDTO.response(HttpStatus.INTERNAL_SERVER_ERROR.value(), "유저 정보 없음", null));
84+
}
8485
}
8586

8687
// 연도별 소비 기록 요약 조회

src/main/java/donmani/donmani_server/expense/entity/Expense.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class Expense {
1818

1919
private Long userId;
2020

21-
private LocalDateTime createdAt;
21+
private LocalDateTime createdAt; // 사용자가 기록하려는 일자 -> 어제 기록을 오늘 등록한 경우 어제일자로 들어감
2222

2323
@Enumerated(EnumType.STRING)
2424
private CategoryType category;
@@ -27,4 +27,11 @@ public class Expense {
2727
private FlagType flag;
2828

2929
private String memo;
30+
31+
/*
32+
- 2025.04.16
33+
- 생성일자, 최종변경일자 칼럼 추가
34+
*/
35+
private LocalDateTime createdDate; // 서버에 기록된 일자
36+
private LocalDateTime updateDate;
3037
}

src/main/java/donmani/donmani_server/expense/service/ExpenseService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class ExpenseService {
3333
@Transactional
3434
public void addExpense(ExpenseRequestDTO request) {
3535
Long userId = userService.getUserIdByUserKey(request.getUserKey());
36+
LocalDateTime localDateTime = LocalDateTime.now();
3637

3738
List<Expense> expenses = request.getRecords().stream()
3839
.flatMap(record -> {
@@ -45,13 +46,15 @@ public void addExpense(ExpenseRequestDTO request) {
4546
return Stream.of(Expense.builder()
4647
.userId(userId)
4748
.createdAt(record.getDate().atStartOfDay())
49+
.createdDate(localDateTime)
4850
.build());
4951
}
5052

5153
// 기록이 있을 때
5254
return contents.stream().map(content -> Expense.builder()
5355
.userId(userId)
5456
.createdAt(record.getDate().atStartOfDay())
57+
.createdDate(localDateTime)
5558
.flag(content.getFlag())
5659
.category(content.getCategory())
5760
.memo(content.getMemo())

src/main/java/donmani/donmani_server/user/controller/UserController.java

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
import donmani.donmani_server.common.httpStatus.HttpStatusDTO;
44
import donmani.donmani_server.expense.dto.NoticeReadDTO;
5+
import donmani.donmani_server.user.dto.UpdateUserNoticeEnableRequestDTO;
56
import donmani.donmani_server.user.dto.UpdateUsernameRequestDTO;
67
import donmani.donmani_server.user.dto.UpdateUsernameResponseDTO;
78
import donmani.donmani_server.user.dto.UserRegisterRequestDTO;
89
import donmani.donmani_server.user.dto.UserRegisterResponseDTO;
9-
import donmani.donmani_server.user.dto.UserRegisterResponseDTOV2;
10+
import donmani.donmani_server.user.dto.UserRegisterResponseDTOV1;
1011
import donmani.donmani_server.user.service.UserService;
1112

1213
import org.springframework.http.HttpStatus;
@@ -22,7 +23,7 @@ public class UserController {
2223
private final UserService userService;
2324

2425
@PostMapping("users/register")
25-
public ResponseEntity<UserRegisterResponseDTO> registerUserV1(
26+
public ResponseEntity<UserRegisterResponseDTO> registerUser(
2627
@Valid @RequestBody UserRegisterRequestDTO request) {
2728

2829
UserRegisterResponseDTO response = userService.registerUser(request.getUserKey());
@@ -31,31 +32,31 @@ public ResponseEntity<UserRegisterResponseDTO> registerUserV1(
3132
}
3233

3334
@PostMapping("api/v1/user/register")
34-
public ResponseEntity<HttpStatusDTO<UserRegisterResponseDTOV2>> registerUserV2(
35+
public ResponseEntity<HttpStatusDTO<UserRegisterResponseDTOV1>> registerUserV1(
3536
@Valid @RequestBody UserRegisterRequestDTO request) {
3637

37-
ResponseEntity<HttpStatusDTO<UserRegisterResponseDTOV2>> response;
38+
ResponseEntity<HttpStatusDTO<UserRegisterResponseDTOV1>> response;
3839

3940
// 1. userId
40-
long userId = userService.getUserIdByUserKeyV2(request.getUserKey());
41+
long userId = userService.getUserIdByUserKeyV1(request.getUserKey());
4142

4243
// 2.1 신규 유저 -> 201
4344
if (userId == -1L) {
44-
UserRegisterResponseDTOV2 user = userService.registerUserV2(request.getUserKey());
45+
UserRegisterResponseDTOV1 user = userService.registerUserV1(request.getUserKey());
4546
response = ResponseEntity.ok(HttpStatusDTO.response(HttpStatus.CREATED.value(), "신규 유저", user));
4647
}
4748

4849
// 2,2 기존 유저 -> 200
4950
else {
50-
UserRegisterResponseDTOV2 user = userService.registerUserV2(request.getUserKey());
51+
UserRegisterResponseDTOV1 user = userService.registerUserV1(request.getUserKey());
5152
response = ResponseEntity.ok(HttpStatusDTO.response(HttpStatus.OK.value(), "기존 유저", user));
5253
}
5354

5455
return response;
5556
}
5657

5758
@PutMapping("users/update")
58-
public ResponseEntity<UpdateUsernameResponseDTO> updateNicknameV1(
59+
public ResponseEntity<UpdateUsernameResponseDTO> updateNickname(
5960
@Valid @RequestBody UpdateUsernameRequestDTO request) {
6061

6162
UpdateUsernameResponseDTO response = userService.updateUsername(request.getUserKey(), request.getNewUserName());
@@ -64,7 +65,7 @@ public ResponseEntity<UpdateUsernameResponseDTO> updateNicknameV1(
6465
}
6566

6667
@PostMapping("api/v1/user/update")
67-
public ResponseEntity<HttpStatusDTO<UpdateUsernameResponseDTO>> updateNicknameV2(
68+
public ResponseEntity<HttpStatusDTO<UpdateUsernameResponseDTO>> updateNicknameV1(
6869
@Valid @RequestBody UpdateUsernameRequestDTO request) {
6970
try {
7071
UpdateUsernameResponseDTO user = userService.updateUsername(request.getUserKey(), request.getNewUserName());
@@ -89,4 +90,34 @@ public ResponseEntity<Void> markNoticeAsRead(@PathVariable String userKey) {
8990
userService.markNoticeAsRead(userKey);
9091
return ResponseEntity.ok().build();
9192
}
93+
94+
@PutMapping("api/v1/notice/enable/{userKey}")
95+
public ResponseEntity<HttpStatusDTO<UpdateUserNoticeEnableRequestDTO>> updateUserNoticeEnableV1(
96+
@Valid @RequestBody UpdateUserNoticeEnableRequestDTO request) {
97+
try {
98+
userService.updateUserNoticeEnable(request.getUserKey(), request.isNoticeEnable());
99+
100+
// 1. 알림수신동의여부 변경 성공 -> 201
101+
return ResponseEntity.ok(HttpStatusDTO.response(HttpStatus.CREATED.value(), "성공", null));
102+
} catch (IllegalArgumentException e) {
103+
// 2. 알림수신동의여부 변경 실패 -> 500
104+
return ResponseEntity.ok(
105+
HttpStatusDTO.response(HttpStatus.INTERNAL_SERVER_ERROR.value(), "유저 정보 없음", null));
106+
}
107+
}
108+
109+
@PutMapping("api/v1/user/last-login/{userKey}")
110+
public ResponseEntity<HttpStatusDTO<Void>> updateUserLastLoginDateV1(
111+
@PathVariable String userKey) {
112+
try {
113+
userService.updateUserLastLoginDate(userKey);
114+
115+
// 1. 최종접속일자 변경 성공 -> 201
116+
return ResponseEntity.ok(HttpStatusDTO.response(HttpStatus.CREATED.value(), "성공", null));
117+
} catch (IllegalArgumentException e) {
118+
// 2. 최종접속일자 변경 실패 -> 500
119+
return ResponseEntity.ok(
120+
HttpStatusDTO.response(HttpStatus.INTERNAL_SERVER_ERROR.value(), "유저 정보 없음", null));
121+
}
122+
}
92123
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package donmani.donmani_server.user.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
7+
@Getter
8+
@NoArgsConstructor
9+
@AllArgsConstructor
10+
public class UpdateUserNoticeEnableRequestDTO {
11+
private String userKey;
12+
private boolean noticeEnable;
13+
}

src/main/java/donmani/donmani_server/user/dto/UserRegisterRequestDTO.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package donmani.donmani_server.user.dto;
22

33
import jakarta.validation.constraints.NotBlank;
4+
import lombok.AllArgsConstructor;
45
import lombok.Getter;
5-
import lombok.Setter;
6+
import lombok.NoArgsConstructor;
67

78
@Getter
8-
@Setter
9+
@NoArgsConstructor
10+
@AllArgsConstructor
911
public class UserRegisterRequestDTO {
1012
@NotBlank(message = "Device ID가 존재하지 않습니다.")
1113
private String userKey;

src/main/java/donmani/donmani_server/user/dto/UserRegisterResponseDTO.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
import lombok.AllArgsConstructor;
44
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
56

67
@Getter
8+
@NoArgsConstructor
79
@AllArgsConstructor
810
public class UserRegisterResponseDTO {
9-
// private boolean isNew;
1011
private String userKey;
1112
private String userName;
1213
}

src/main/java/donmani/donmani_server/user/dto/UserRegisterResponseDTOV2.java renamed to src/main/java/donmani/donmani_server/user/dto/UserRegisterResponseDTOV1.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import lombok.AllArgsConstructor;
44
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
56

67
@Getter
8+
@NoArgsConstructor
79
@AllArgsConstructor
8-
public class UserRegisterResponseDTOV2{
10+
public class UserRegisterResponseDTOV1 {
911
private boolean isNew;
1012
private String userKey;
1113
private String userName;

0 commit comments

Comments
 (0)