Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat] dev to main merge #18

Merged
merged 51 commits into from
Jul 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
9757593
#1 [FEAT] user, goal, recommend entity ์ž‘์„ฑ ์™„๋ฃŒ
funnysunny08 Jul 3, 2023
2a70080
Merge remote-tracking branch 'origin/main' into feat/#1
funnysunny08 Jul 3, 2023
21b5f42
Merge remote-tracking branch 'origin/main' into feat/#1
funnysunny08 Jul 3, 2023
c3c777d
Merge pull request #4 from team-winey/feat/#1
funnysunny08 Jul 3, 2023
6370d37
[Refactor] ์ด์Šˆ ํ…œํ”Œ๋ฆฟ ์ˆ˜์ •
funnysunny08 Jul 3, 2023
b938e52
#2 Feed,FeedLike domain ์ž‘์„ฑ
sss4920 Jul 3, 2023
9eda01e
Merge pull request #5 from team-winey/feat/#2
sss4920 Jul 3, 2023
8ec5ee6
#7 [Feat] dto ์ž‘์„ฑ
funnysunny08 Jul 4, 2023
30a7809
#7 [Fix] Recommend entity ์ˆ˜์ •
funnysunny08 Jul 4, 2023
b12f7c1
#7 [Feat] getRecommend dto ์ˆ˜์ • ๋ฐ ์ž‘์„ฑ ์™„๋ฃŒ
funnysunny08 Jul 4, 2023
61d7e95
#6 [Feat] FeedController ๊ตฌํ˜„
sss4920 Jul 4, 2023
de94b32
#6 [Fix] Feed dto ์ˆ˜์ •
sss4920 Jul 4, 2023
c238055
#7 [Feat] getRecommend Service ์ž‘์„ฑ
funnysunny08 Jul 4, 2023
7b63833
#7 [Feat] getRecommend Controller ์ž‘์„ฑ
funnysunny08 Jul 4, 2023
aa5c661
#7 [Feat] ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€
funnysunny08 Jul 4, 2023
c3912c2
#7 [Refactor] ๋ถˆํ•„์š”ํ•œ ์• ๋„ˆํ…Œ์ด์…˜ ์‚ญ์ œ
funnysunny08 Jul 4, 2023
724a5ae
Merge pull request #8 from team-winey/feat/#7
funnysunny08 Jul 5, 2023
6b7fb2b
[Feat] dev์™€ ๋จธ์ง€
sss4920 Jul 5, 2023
2671e50
Merge branch 'dev' of https://github.com/Money-IT/Winey-Server into fโ€ฆ
sss4920 Jul 5, 2023
ba436d4
[Fix] 404 ์›์ธ์ฐพ๊ธฐ
sss4920 Jul 5, 2023
8c88b7d
[chore] repush
sss4920 Jul 5, 2023
fdee12e
[Chore] repush2
sss4920 Jul 5, 2023
e076200
[feat] createFeed ์ˆ˜์ • but 500 ํ•ด๊ฒฐ๋ชปํ•จ
sss4920 Jul 6, 2023
a201928
#9 [Chore] ํŒŒ์ผ ์ƒ์„ฑ
funnysunny08 Jul 6, 2023
5384ee6
#9 [Feat] requestDto, responseDto
funnysunny08 Jul 6, 2023
177c3bc
#9 [Feat] Goal Service
funnysunny08 Jul 6, 2023
9938f2d
#9 [Feat] Goal Controller
funnysunny08 Jul 6, 2023
e02fd7f
#9 [Feat] targetDay, targetMoney validation ์ถ”๊ฐ€
funnysunny08 Jul 6, 2023
82ff208
#9 [Fix] createdAt null ๋ฌธ์ œ ํ•ด๊ฒฐ
funnysunny08 Jul 6, 2023
e5a3fcf
#9 [Fix] Goal defulat ํ•„๋“œ ๋ฌธ์ œ
funnysunny08 Jul 6, 2023
46046fa
[Feat] createFeed api ์ž‘์„ฑ
sss4920 Jul 6, 2023
35d9f05
#6 [Fix] @DynamicInsert
funnysunny08 Jul 8, 2023
0ce36e5
#6 [Fix] JpaRepository -> Repository๋กœ ๋ณ€๊ฒฝ
funnysunny08 Jul 8, 2023
9ac94fc
Merge pull request #10 from team-winey/feat/#9
funnysunny08 Jul 8, 2023
e0911bf
[Feat] merge dev
sss4920 Jul 8, 2023
bcfd78f
#14 [Fix] goal entity ์ˆ˜์ •
funnysunny08 Jul 9, 2023
8a88db4
[Refactor] updateUserGoalAmountAndCountํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ, checkUserLevel๋กœ์ง ์ˆ˜์ •, uโ€ฆ
sss4920 Jul 9, 2023
e66dbb7
#14 [Feat] UserResponseDto ์ž‘์„ฑ
funnysunny08 Jul 10, 2023
52ef69a
#14 [Feat] repository
funnysunny08 Jul 10, 2023
046e432
#14 [Refactor] dto ์ˆ˜์ •
funnysunny08 Jul 10, 2023
4fa0239
#13 [Refactor] createFeed ๋ฆฌ๋ฆฌํŒฉํ† ๋ง
sss4920 Jul 10, 2023
17efe0b
createFeed merge ๋งˆ์ด๋ธŒ๋žœ์น˜
sss4920 Jul 10, 2023
4355b47
#14 [Feat] User Service
funnysunny08 Jul 10, 2023
ee98781
#14 [Fix] targetDays ๊ณ„์‚ฐ ๋ฐฉ๋ฒ• ๋ณ€๊ฒฝ
funnysunny08 Jul 10, 2023
897687a
[Fix] response ๊ฐ’์ค‘์— isXX ๋ฌธ์ œ ํ•ด๊ฒฐ
funnysunny08 Jul 10, 2023
888d96a
#12 [Refactor] createFeed ๋ฆฌํŒฉํ† ๋ง ์™„๋ฃŒ
sss4920 Jul 10, 2023
698b620
#12 [Refactor] ํ”ผ๋“œ ์‚ญ์ œ ๋ฆฌํŒฉํ„ฐ๋ง
funnysunny08 Jul 10, 2023
602b0b3
#12 [Fix] ํ”ผ๋“œ ์‚ญ์ œ url ๋ณ€๊ฒฝ
funnysunny08 Jul 10, 2023
bbe09d9
Merge pull request #16 from team-winey/feat/#12
sss4920 Jul 10, 2023
821fa58
Merge branch 'dev' into feat/#14
funnysunny08 Jul 10, 2023
b55feef
Merge pull request #17 from team-winey/feat/#14
funnysunny08 Jul 10, 2023
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
26 changes: 26 additions & 0 deletions .github/ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: feat
assignees: sss4920

---

---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---

## โœจ Description

๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ์ž‘์„ฑ

## โœ… To Do List

- [ ] ์ž‘์—… 1
- [ ] ์ž‘์—… 2
- [ ] ์ž‘์—… 3
25 changes: 25 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
## ๐Ÿšฉ ๊ด€๋ จ ์ด์Šˆ
- close #1

## ๐Ÿ“‹ ๊ตฌํ˜„ ๊ธฐ๋Šฅ ๋ช…์„ธ
- [x]

## ๐Ÿ“Œ PR Point
- ๋ฌด์Šจ ์ด์œ ๋กœ ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋Š”์ง€


- ์–ด๋–ค ๋ถ€๋ถ„์— ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ง‘์ค‘ํ•ด์•ผ ํ•˜๋Š”์ง€


- ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์–ด๋–ค ์ ์ด ๊ถ๊ธˆํ–ˆ๋Š”์ง€

## ๐Ÿ“ธ ๊ฒฐ๊ณผ๋ฌผ ์Šคํฌ๋ฆฐ์ƒท
```java
@Pattern(regexp = "^[\\S][๊ฐ€-ํžฃa-zA-Z0-9\\s]{0,20}$", message = "์œ„๋‹ˆ ํ”ผ๋“œ ์ œ๋ชฉ ํ˜•์‹์— ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค.")
```

## ๐Ÿ› ๏ธ ํ…Œ์ŠคํŠธ
- [x] ํ…Œ์ŠคํŠธ

## ๐Ÿš€ API Endpoint
- /
2 changes: 2 additions & 0 deletions src/main/java/org/winey/server/ServerApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
@SpringBootApplication
public class ServerApplication {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingRequestHeaderException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
Expand All @@ -23,7 +25,19 @@ public class ControllerExceptionAdvice {
@ExceptionHandler(MethodArgumentNotValidException.class)
protected ApiResponse handleMethodArgumentNotValidException(final MethodArgumentNotValidException e) {
FieldError fieldError = Objects.requireNonNull(e.getFieldError());
return ApiResponse.error(Error.REQUEST_VALIDATION_EXCEPTION, String.format("%s. (%s)", fieldError.getDefaultMessage(), fieldError.getField()));
return ApiResponse.error(Error.VALIDATION_REQUEST_MISSING_EXCEPTION, String.format("%s. (%s)", fieldError.getDefaultMessage(), fieldError.getField()));
}

@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingRequestHeaderException.class)
protected ApiResponse handleMissingRequestHeaderException(final MissingRequestHeaderException e) {
return ApiResponse.error(Error.VALIDATION_REQUEST_HEADER_MISSING_EXCEPTION, String.format("%s. (%s)", Error.VALIDATION_REQUEST_HEADER_MISSING_EXCEPTION.getMessage(), e.getHeaderName()));
}

@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingServletRequestParameterException.class)
protected ApiResponse handleMissingRequestParameterException(final MissingServletRequestParameterException e) {
return ApiResponse.error(Error.VALIDATION_REQUEST_PARAMETER_MISSING_EXCEPTION, String.format("%s. (%s)", Error.VALIDATION_REQUEST_PARAMETER_MISSING_EXCEPTION.getMessage(), e.getParameterName()));
}

/**
Expand Down
43 changes: 43 additions & 0 deletions src/main/java/org/winey/server/controller/FeedController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package org.winey.server.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.winey.server.common.dto.ApiResponse;
import org.winey.server.controller.request.CreateFeedRequestDto;
import org.winey.server.controller.response.feed.CreateFeedResponseDto;
import org.winey.server.exception.Success;
import org.winey.server.external.client.aws.S3Service;
import org.winey.server.service.FeedService;

import javax.validation.Valid;

@RestController
@RequiredArgsConstructor
@RequestMapping("/feed")
public class FeedController {
private final S3Service s3Service;
private final FeedService feedService;

@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public ApiResponse<CreateFeedResponseDto> createFeed(
@RequestHeader("userId") Long userId,
@ModelAttribute CreateFeedRequestDto request) {
String feedImageUrl = s3Service.uploadImage(request.getFeedImage(), "feed");
return ApiResponse.success(Success.CREATE_BOARD_SUCCESS, feedService.createFeed(request,userId,feedImageUrl));
}

@DeleteMapping(value = "/{feedId}")
@ResponseStatus(HttpStatus.OK)
public ApiResponse deleteFeed(
@RequestHeader("userId")Long userId,
@PathVariable Long feedId
){
String imageUrl = feedService.deleteFeed(userId,feedId);
s3Service.deleteFile(imageUrl);
return ApiResponse.success(Success.DELETE_FEED_SUCCESS);
}

}
26 changes: 26 additions & 0 deletions src/main/java/org/winey/server/controller/GoalController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.winey.server.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.winey.server.common.dto.ApiResponse;
import org.winey.server.controller.request.goal.GoalRequestCreateDto;
import org.winey.server.controller.response.goal.GoalResponseCreateDto;
import org.winey.server.exception.Success;
import org.winey.server.service.GoalService;

import javax.validation.Valid;

@RestController
@RequiredArgsConstructor
@RequestMapping("/goal")
public class GoalController {

private final GoalService goalService;

@PostMapping("")
@ResponseStatus(HttpStatus.CREATED)
public ApiResponse<GoalResponseCreateDto> create(@RequestBody @Valid final GoalRequestCreateDto requestDto, @RequestHeader Long userId) {
return ApiResponse.success(Success.CREATE_GOAL_SUCCESS, goalService.createGoal(requestDto, userId));
}
}
25 changes: 25 additions & 0 deletions src/main/java/org/winey/server/controller/RecommendController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.winey.server.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.winey.server.common.dto.ApiResponse;
import org.winey.server.controller.response.recommend.RecommendListResponseDto;
import org.winey.server.exception.Success;
import org.winey.server.service.RecommendService;

@RestController
@RequiredArgsConstructor
@RequestMapping("/recommend")
public class RecommendController {

private final RecommendService recommendService;

@GetMapping("")
@ResponseStatus(HttpStatus.OK)
public ApiResponse<RecommendListResponseDto> getRecommend(@RequestParam int page, @RequestHeader Long userId) {
return ApiResponse.success(Success.GET_RECOMMEND_LIST_SUCCESS, recommendService.getRecommend(page, userId));
}


}
23 changes: 23 additions & 0 deletions src/main/java/org/winey/server/controller/UserController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.winey.server.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.winey.server.common.dto.ApiResponse;
import org.winey.server.controller.response.user.UserResponseDto;
import org.winey.server.exception.Success;
import org.winey.server.service.UserService;

@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
public class UserController {

private final UserService userService;

@GetMapping("")
@ResponseStatus(HttpStatus.OK)
public ApiResponse<UserResponseDto> getUser(@RequestHeader Long userId) {
return ApiResponse.success(Success.GET_USER_SUCCESS, userService.getUser(userId));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.winey.server.controller.request;

import lombok.*;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.constraints.NotNull;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor
public class CreateFeedRequestDto {
@NotNull
private String feedTitle;
@NotNull
private MultipartFile feedImage;
@NotNull
private Long feedMoney;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.winey.server.controller.request.goal;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.validation.constraints.DecimalMin;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class GoalRequestCreateDto {
@DecimalMin(value = "30000")
private Long targetMoney;
@DecimalMin(value = "5")
private int targetDay;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.winey.server.controller.response;

import lombok.*;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class PageResponseDto {
private int totalPageSize;
private int currentPageIndex;
private Boolean isEnd;

public static PageResponseDto of(int totalPageSize, int currentPageIndex, boolean isEnd) {
return new PageResponseDto(totalPageSize, currentPageIndex, isEnd);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.winey.server.controller.response.feed;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class CreateFeedResponseDto {
private Long feedId;
private LocalDateTime createdAt;

public static CreateFeedResponseDto of(Long feedId, LocalDateTime createdAt){
return new CreateFeedResponseDto(feedId, createdAt);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.winey.server.controller.response.goal;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class GoalResponseCreateDto {
private Long userId;
private Long targetMoney;
private LocalDate targetDate;
private LocalDateTime createdAt;

public static GoalResponseCreateDto of(Long userId, Long targetMoney, LocalDate targetDate, LocalDateTime createdAt) {
return new GoalResponseCreateDto(userId, targetMoney, targetDate, createdAt);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.winey.server.controller.response.recommend;

import lombok.*;
import org.winey.server.controller.response.PageResponseDto;

import java.util.List;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class RecommendListResponseDto {
private RecommendResponseUserDto recommendResponseUserDto;
private PageResponseDto pageResponseDto;
private List<RecommendResponseDto> recommendsResponseDto;

public static RecommendListResponseDto of(RecommendResponseUserDto recommendResponseUserDto, PageResponseDto pageResponseDto, List<RecommendResponseDto> recommendsResponseDto) {
return new RecommendListResponseDto(recommendResponseUserDto, pageResponseDto, recommendsResponseDto);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.winey.server.controller.response.recommend;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.*;

import java.time.LocalDateTime;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RecommendResponseDto {
private Long recommendId;
private String recommendLink;
private String recommendTitle;
private Long recommendWon;
private Long recommendPercent;
private String recommendImage;
private LocalDateTime createdAt;

public static RecommendResponseDto of(Long recommendId, String recommendLink, String recommendTitle, Long recommendWon, Long recommendPercent, String recommendImage, LocalDateTime createdAt) {
return new RecommendResponseDto(recommendId, recommendLink, recommendTitle, recommendWon, recommendPercent, recommendImage, createdAt);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.winey.server.controller.response.recommend;

import lombok.*;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class RecommendResponseUserDto {
private Long userId;
private String nickname;

public static RecommendResponseUserDto of(Long userId, String nickname) {
return new RecommendResponseUserDto(userId, nickname);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.winey.server.controller.response.user;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;


@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class UserResponseDto {
private UserResponseUserDto userResponseUserDto;
private UserResponseGoalDto userResponseGoalDto;

public static UserResponseDto of(UserResponseUserDto userResponseUserDto, UserResponseGoalDto userResponseGoalDto) {
return new UserResponseDto(userResponseUserDto, userResponseGoalDto);
}
}

Loading