Skip to content

Commit ba08182

Browse files
authored
Merge pull request #13 from UMC-9th-Spring-Boot/feat/12-Chapter8
Feat/12 chapter8
2 parents 733c130 + 5e5d5ef commit ba08182

File tree

15 files changed

+276
-9
lines changed

15 files changed

+276
-9
lines changed

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ dependencies {
4343

4444
// aop
4545
implementation 'org.springframework.boot:spring-boot-starter-aop'
46+
47+
// Validation
48+
implementation 'org.springframework.boot:spring-boot-starter-validation'
4649
}
4750

4851
tasks.named('test') {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.example.umc9th.domain.category.repository;
2+
3+
import com.example.umc9th.domain.category.entity.Category;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface CategoryRepository extends JpaRepository<Category, Long> {
7+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.example.umc9th.domain.mission.controller;
2+
3+
import com.example.umc9th.domain.mission.dto.MissionRequestDto;
4+
import com.example.umc9th.domain.mission.dto.MissionResponseDto;
5+
import com.example.umc9th.domain.mission.service.MissionService;
6+
import com.example.umc9th.domain.review.dto.ReviewRequestDto;
7+
import com.example.umc9th.domain.review.dto.ReviewResponseDto;
8+
import com.example.umc9th.global.apiPayload.ApiResponse;
9+
import com.example.umc9th.global.apiPayload.code.status.GeneralSuccessCode;
10+
import io.swagger.v3.oas.annotations.Operation;
11+
import io.swagger.v3.oas.annotations.tags.Tag;
12+
import lombok.RequiredArgsConstructor;
13+
import org.springframework.web.bind.annotation.*;
14+
15+
@RestController
16+
@RequiredArgsConstructor
17+
@RequestMapping("/api/missions")
18+
@Tag(name = "미션")
19+
public class MissionController {
20+
private final MissionService missionService;
21+
22+
@Operation(
23+
summary = "미션 추가",
24+
description = "관리자용")
25+
@PostMapping("/admin")
26+
public ApiResponse<String> addMission(@RequestBody MissionRequestDto.CreateMission req) {
27+
return ApiResponse.onSuccess(GeneralSuccessCode._CREATED, missionService.createMission(req));
28+
}
29+
30+
@Operation(
31+
summary = "사용자 미션 추가",
32+
description = "사용자가 가게 미션을 본인의 도전 미션에 추가합니다.")
33+
@PostMapping("/{mission-id}")
34+
public ApiResponse<MissionResponseDto.AddUserMission> addMission(@RequestParam @PathVariable("mission-id")Long missionId) {
35+
return ApiResponse.onSuccess(GeneralSuccessCode._CREATED, missionService.addUserMission(missionId));
36+
}
37+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.example.umc9th.domain.mission.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
8+
public class MissionRequestDto {
9+
private MissionRequestDto() {}
10+
11+
@Getter
12+
@Builder
13+
@NoArgsConstructor
14+
@AllArgsConstructor
15+
public static class CreateMission{
16+
private Integer point;
17+
private String content;
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.example.umc9th.domain.mission.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
7+
public class MissionResponseDto {
8+
private MissionResponseDto() {}
9+
10+
@Builder
11+
@Getter
12+
@AllArgsConstructor
13+
public static class AddUserMission{
14+
private Long missionId;
15+
private String content;
16+
private String createdAt;
17+
}
18+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.example.umc9th.domain.mission.service;
2+
3+
import com.example.umc9th.domain.mission.dto.MissionRequestDto;
4+
import com.example.umc9th.domain.mission.dto.MissionResponseDto;
5+
6+
public interface MissionService {
7+
String createMission(MissionRequestDto.CreateMission req);
8+
MissionResponseDto.AddUserMission addUserMission(Long missionId);
9+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.example.umc9th.domain.mission.service;
2+
3+
import com.example.umc9th.domain.mission.dto.MissionRequestDto;
4+
import com.example.umc9th.domain.mission.dto.MissionResponseDto;
5+
import com.example.umc9th.domain.mission.entity.Mission;
6+
import com.example.umc9th.domain.mission.entity.UserMission;
7+
import com.example.umc9th.domain.mission.repository.MissionRepository;
8+
import com.example.umc9th.domain.mission.repository.UserMissionRepository;
9+
import com.example.umc9th.domain.store.repository.StoreRepository;
10+
import com.example.umc9th.domain.user.repository.UserRepository;
11+
import lombok.RequiredArgsConstructor;
12+
import org.springframework.stereotype.Service;
13+
14+
@Service
15+
@RequiredArgsConstructor
16+
public class MissionServiceImpl implements MissionService{
17+
private final MissionRepository missionRepository;
18+
private final StoreRepository storeRepository;
19+
private final UserRepository userRepository;
20+
private final UserMissionRepository userMissionRepository;
21+
22+
@Override
23+
public String createMission(MissionRequestDto.CreateMission req) {
24+
Mission mission = Mission.builder()
25+
.store(storeRepository.getReferenceById(1L))
26+
.content(req.getContent())
27+
.point(req.getPoint())
28+
.build();
29+
30+
missionRepository.save(mission);
31+
32+
return mission.getId().toString();
33+
}
34+
35+
@Override
36+
public MissionResponseDto.AddUserMission addUserMission(Long missionId) {
37+
UserMission um = UserMission.builder()
38+
.user(userRepository.getReferenceById(1L))
39+
.mission(missionRepository.getReferenceById(missionId))
40+
.build();
41+
42+
userMissionRepository.save(um);
43+
44+
return MissionResponseDto.AddUserMission.builder()
45+
.missionId(missionId)
46+
.content(um.getMission().getContent())
47+
.createdAt(um.getMission().getCreatedAt().toString())
48+
.build();
49+
}
50+
}

src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.example.umc9th.domain.review.controller;
22

3+
import com.example.umc9th.domain.review.dto.ReviewRequestDto;
34
import com.example.umc9th.domain.review.dto.ReviewResponseDto;
45
import com.example.umc9th.domain.review.service.ReviewService;
56
import com.example.umc9th.global.apiPayload.ApiResponse;
@@ -8,10 +9,7 @@
89
import io.swagger.v3.oas.annotations.Operation;
910
import io.swagger.v3.oas.annotations.tags.Tag;
1011
import lombok.RequiredArgsConstructor;
11-
import org.springframework.web.bind.annotation.GetMapping;
12-
import org.springframework.web.bind.annotation.RequestMapping;
13-
import org.springframework.web.bind.annotation.RequestParam;
14-
import org.springframework.web.bind.annotation.RestController;
12+
import org.springframework.web.bind.annotation.*;
1513

1614
@RestController
1715
@RequiredArgsConstructor
@@ -39,4 +37,14 @@ public ApiResponse<CursorResponseDto<ReviewResponseDto.Review>> getReviews(
3937
size));
4038
}
4139

40+
@Operation(
41+
summary = "리뷰 작성",
42+
description = "해당 가게에 리뷰를 추가합니다.")
43+
@PostMapping
44+
public ApiResponse<ReviewResponseDto.Created> addReview(@RequestBody ReviewRequestDto.Create req) {
45+
return ApiResponse.onSuccess(GeneralSuccessCode._CREATED,reviewService.createReview(req));
46+
}
47+
48+
49+
4250
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.example.umc9th.domain.review.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
8+
import java.util.List;
9+
10+
public class ReviewRequestDto {
11+
private ReviewRequestDto() {}
12+
13+
@Getter
14+
@Builder
15+
@NoArgsConstructor
16+
@AllArgsConstructor
17+
public static class Create{
18+
private Long storeId;
19+
private String content;
20+
private Float star;
21+
private List<String> reviewImages;
22+
}
23+
}

src/main/java/com/example/umc9th/domain/review/dto/ReviewResponseDto.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,14 @@ public static class Review{
2626
private String reviewReplyContent;
2727
private String reviewReplyCreatedAt;
2828
}
29+
30+
@Getter
31+
@Builder
32+
@NoArgsConstructor
33+
@AllArgsConstructor
34+
public static class Created{
35+
private Long id;
36+
private Long storeId;
37+
private String createdAt;
38+
}
2939
}

0 commit comments

Comments
 (0)