Skip to content

Commit c8b0599

Browse files
authored
1차 MVP 피드백 기능 수정 및 구현
#31 mvp feedback1
2 parents 724fe7b + c14cf06 commit c8b0599

40 files changed

+690
-46
lines changed

.github/workflows/deploy-gcp.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ jobs:
5858
name: Deploy to GCP VM
5959
needs: build-and-push
6060
runs-on: ubuntu-latest
61-
steps:
6261

62+
steps:
6363
- name: Authenticate to GCP for Deploy
6464
uses: google-github-actions/auth@v2
6565
with:
@@ -86,3 +86,11 @@ jobs:
8686
-p 8080:8080 \
8787
-e JASYPT_ENCRYPTOR_PASSWORD="${{ secrets.JASYPT_PASSWORD }}" \
8888
"$IMAGE_URI"
89+
90+
- name: Notify Discord
91+
if: ${{ success() }}
92+
run: |
93+
curl -H "Content-Type: application/json" \
94+
-X POST \
95+
-d '{"content":"서버 정상배포되었습니다 🎉"}' \
96+
${{ secrets.DISCORD_SERVER_NOTIFY_WEBHOOK}}

build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ dependencies {
7878
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
7979

8080
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
81+
82+
//mapper
83+
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
84+
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
8185
}
8286

8387
def querydslSrcDir = 'build/generated/querydsl'

src/main/java/be/ddd/api/cafe/CafeBeverageAPI.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@
99
import be.ddd.domain.entity.crawling.CafeBrand;
1010
import be.ddd.domain.entity.crawling.SugarLevel;
1111
import jakarta.validation.constraints.Positive;
12+
import java.util.List;
1213
import java.util.Optional;
1314
import java.util.UUID;
1415
import lombok.RequiredArgsConstructor;
16+
import lombok.extern.slf4j.Slf4j;
17+
import org.springframework.util.StringUtils;
1518
import org.springframework.web.bind.annotation.*;
1619

20+
@Slf4j
1721
@RestController
1822
@RequestMapping("/api/cafe-beverages")
1923
@RequiredArgsConstructor
@@ -75,9 +79,18 @@ public ApiResponse<BeverageLikeDto> unlikeBeverage(@PathVariable UUID productId)
7579
}
7680

7781
@GetMapping("/search")
78-
public ApiResponse<BeverageSearchResultDto> searchBeverages(@RequestParam String keyword) {
82+
public ApiResponse<BeverageSearchResultDto> searchBeverages(
83+
@RequestParam(required = false) String keyword) {
84+
85+
String targetKeyword = (keyword == null ? "" : keyword).trim();
86+
87+
if (!StringUtils.hasText(targetKeyword)) {
88+
log.info("Empty keyword");
89+
return ApiResponse.success(new BeverageSearchResultDto(List.of(), 0));
90+
}
91+
7992
BeverageSearchResultDto beverageSearchResultDto =
80-
cafeBeverageQueryService.searchBeverages(keyword, MEMBER_ID);
93+
cafeBeverageQueryService.searchBeverages(targetKeyword, MEMBER_ID);
8194
return ApiResponse.success(beverageSearchResultDto);
8295
}
8396
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package be.ddd.api.dto.req;
2+
3+
import java.time.LocalDateTime;
4+
5+
public record IntakeHistoryDeleteReqDto(LocalDateTime intakeTime) {}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package be.ddd.api.dto.req;
2+
3+
import be.ddd.domain.entity.member.ActivityRange;
4+
import be.ddd.domain.entity.member.Gender;
5+
import be.ddd.domain.entity.member.SugarIntakeLevel;
6+
import com.fasterxml.jackson.annotation.JsonFormat;
7+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
8+
import jakarta.validation.constraints.NotNull;
9+
import java.math.BigDecimal;
10+
import java.time.LocalDate;
11+
import java.util.UUID;
12+
13+
@JsonIgnoreProperties(ignoreUnknown = true)
14+
public record MemberProfileModifyDto(
15+
@NotNull UUID fakeId,
16+
String nickname,
17+
@JsonFormat(pattern = "yyyy-MM-dd") LocalDate birthDay,
18+
Gender gender,
19+
Integer heightCm,
20+
BigDecimal weightKg,
21+
ActivityRange activityRange,
22+
SugarIntakeLevel sugarIntakeLevel) {}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package be.ddd.api.dto.req;
2+
3+
import be.ddd.domain.entity.member.ActivityRange;
4+
import be.ddd.domain.entity.member.Gender;
5+
import be.ddd.domain.entity.member.SugarIntakeLevel;
6+
import io.micrometer.common.lang.NonNullApi;
7+
import io.micrometer.common.lang.NonNullFields;
8+
import java.math.BigDecimal;
9+
import java.time.LocalDate;
10+
import java.util.UUID;
11+
12+
@NonNullApi
13+
@NonNullFields
14+
public record MemberProfileRegistrationDto(
15+
UUID fakeId,
16+
String nickname,
17+
LocalDate birthDay,
18+
Gender gender,
19+
Integer heightCm,
20+
BigDecimal weightKg,
21+
ActivityRange activityRange,
22+
SugarIntakeLevel sugarIntakeLevel) {}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package be.ddd.api.dto.res;
2+
3+
import be.ddd.domain.entity.crawling.BeverageNutrition;
4+
import be.ddd.domain.entity.crawling.BeverageSize;
5+
6+
public record BeverageSizeDetailDto(BeverageSize sizeType, BeverageNutrition nutrition) {}

src/main/java/be/ddd/api/dto/res/CafeBeverageDetailsDto.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,27 @@
33
import be.ddd.application.beverage.dto.CafeStoreDto;
44
import be.ddd.domain.entity.crawling.BeverageNutrition;
55
import be.ddd.domain.entity.crawling.BeverageType;
6+
import java.util.List;
67
import java.util.UUID;
78

89
public record CafeBeverageDetailsDto(
910
String name,
1011
UUID productId,
1112
String imgUrl,
1213
BeverageType beverageType,
13-
BeverageNutrition beverageNutrition,
14+
BeverageNutrition defaultNutrition,
15+
List<BeverageSizeDetailDto> sizes,
1416
CafeStoreDto cafeStoreDto) {
1517

1618
public static CafeBeverageDetailsDto from(
1719
String name,
1820
UUID productId,
1921
String imgUrl,
2022
BeverageType beverageType,
21-
BeverageNutrition beverageNutrition,
23+
BeverageNutrition defaultNutrition,
24+
List<BeverageSizeDetailDto> sizes,
2225
CafeStoreDto cafeStoreDto) {
2326
return new CafeBeverageDetailsDto(
24-
name, productId, imgUrl, beverageType, beverageNutrition, cafeStoreDto);
27+
name, productId, imgUrl, beverageType, defaultNutrition, sizes, cafeStoreDto);
2528
}
2629
}

src/main/java/be/ddd/api/dto/res/IntakeRecordDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public record IntakeRecordDto(
1313
CafeBrand cafeBrand,
1414
LocalDateTime intakeTime,
1515
BeverageNutrition nutrition,
16+
String imgUrl,
1617
SugarLevel sugarLevel) {
1718

1819
@QueryProjection
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package be.ddd.api.dto.res;
2+
3+
import be.ddd.domain.entity.member.ActivityRange;
4+
import be.ddd.domain.entity.member.Gender;
5+
import be.ddd.domain.entity.member.Member;
6+
import be.ddd.domain.entity.member.SugarIntakeLevel;
7+
import com.fasterxml.jackson.annotation.JsonFormat;
8+
import java.math.BigDecimal;
9+
import java.time.LocalDate;
10+
11+
public record MemberModifyDetailsDto(
12+
String nickname,
13+
@JsonFormat(pattern = "yyyy-MM-dd") LocalDate birthDay,
14+
Gender gender,
15+
Integer heightCm,
16+
BigDecimal weightKg,
17+
ActivityRange activityRange,
18+
SugarIntakeLevel sugarIntakeLevel) {
19+
public static MemberModifyDetailsDto from(Member member) {
20+
return new MemberModifyDetailsDto(
21+
member.getNickname(),
22+
member.getBirthDay(),
23+
member.getMemberHealthMetric().getGender(),
24+
member.getMemberHealthMetric().getHeightCm(),
25+
member.getMemberHealthMetric().getWeightKg(),
26+
member.getMemberHealthMetric().getActivityRange(),
27+
member.getMemberHealthMetric().getSugarIntakeLevel());
28+
}
29+
}

0 commit comments

Comments
 (0)