Skip to content

Commit 77dc301

Browse files
committed
#10 feat: 나눔글 등록 API
1 parent 442b2ef commit 77dc301

File tree

4 files changed

+60
-4
lines changed

4 files changed

+60
-4
lines changed

src/main/java/com/kkobugi/puremarket/giveaway/application/GiveawayService.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package com.kkobugi.puremarket.giveaway.application;
22

33
import com.kkobugi.puremarket.common.BaseException;
4+
import com.kkobugi.puremarket.common.gcs.GCSService;
45
import com.kkobugi.puremarket.giveaway.domain.dto.GiveawayListResponse;
56
import com.kkobugi.puremarket.giveaway.domain.dto.GiveawayResponse;
67
import com.kkobugi.puremarket.giveaway.domain.entity.Giveaway;
78
import com.kkobugi.puremarket.giveaway.repository.GiveawayRepository;
9+
import com.kkobugi.puremarket.produce.domain.dto.GiveawayPostRequest;
810
import com.kkobugi.puremarket.user.application.AuthService;
11+
import com.kkobugi.puremarket.user.domain.entity.User;
12+
import com.kkobugi.puremarket.user.repository.UserRepository;
913
import lombok.RequiredArgsConstructor;
14+
import org.springframework.beans.factory.annotation.Value;
1015
import org.springframework.stereotype.Service;
1116

1217
import java.util.List;
@@ -20,6 +25,11 @@
2025
public class GiveawayService {
2126
private final GiveawayRepository giveawayRepository;
2227
private final AuthService authService;
28+
private final UserRepository userRepository;
29+
private final GCSService gcsService;
30+
31+
@Value("${spring.cloud.gcp.storage.bucket}")
32+
private String bucketName;
2333

2434
// 나눔글 목록 조회
2535
public GiveawayListResponse getGiveawayList() throws BaseException { // TODO: 나눔완료 글도 목록 조회 시 포함하도록 수정 팔요
@@ -60,4 +70,24 @@ public GiveawayResponse getGiveawayPost(Long giveawayIdx) throws BaseException {
6070
throw new BaseException(DATABASE_ERROR);
6171
}
6272
}
73+
74+
// 나눔글 등록
75+
public void postGiveaway(GiveawayPostRequest giveawayPostRequest) throws BaseException {
76+
try {
77+
User writer = userRepository.findByUserIdx(authService.getUserIdxFromToken()).orElseThrow(() -> new BaseException(INVALID_USER_IDX));
78+
79+
// upload image
80+
String fullPath = gcsService.uploadImage("giveaway", giveawayPostRequest.giveawayImage());
81+
String giveawayImageUrl = "https://storage.googleapis.com/"+bucketName+"/"+fullPath;
82+
83+
Giveaway giveaway = new Giveaway(writer, giveawayPostRequest.title(), giveawayPostRequest.content(), giveawayImageUrl);
84+
giveaway.setStatus(GIVEAWAY);
85+
86+
giveawayRepository.save(giveaway);
87+
} catch (BaseException e) {
88+
throw e;
89+
} catch (Exception e) {
90+
throw new BaseException(DATABASE_ERROR);
91+
}
92+
}
6393
}

src/main/java/com/kkobugi/puremarket/giveaway/domain/entity/Giveaway.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.kkobugi.puremarket.user.domain.entity.User;
55
import jakarta.persistence.*;
66
import lombok.AccessLevel;
7+
import lombok.Builder;
78
import lombok.Getter;
89
import lombok.NoArgsConstructor;
910
import org.hibernate.annotations.DynamicInsert;
@@ -29,4 +30,12 @@ public class Giveaway extends BaseEntity {
2930

3031
@Column(nullable = false)
3132
private String giveawayImage;
33+
34+
@Builder
35+
public Giveaway(User user, String title, String content, String giveawayImage) {
36+
this.user = user;
37+
this.title = title;
38+
this.content = content;
39+
this.giveawayImage = giveawayImage;
40+
}
3241
}

src/main/java/com/kkobugi/puremarket/giveaway/presentation/GiveawayController.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@
33
import com.kkobugi.puremarket.common.BaseException;
44
import com.kkobugi.puremarket.common.BaseResponse;
55
import com.kkobugi.puremarket.giveaway.application.GiveawayService;
6+
import com.kkobugi.puremarket.produce.domain.dto.GiveawayPostRequest;
67
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
78
import io.swagger.v3.oas.annotations.tags.Tag;
89
import lombok.RequiredArgsConstructor;
9-
import org.springframework.web.bind.annotation.GetMapping;
10-
import org.springframework.web.bind.annotation.PathVariable;
11-
import org.springframework.web.bind.annotation.RequestMapping;
12-
import org.springframework.web.bind.annotation.RestController;
10+
import org.springframework.web.bind.annotation.*;
1311

1412
import static com.kkobugi.puremarket.common.constants.RequestURI.giveaway;
13+
import static com.kkobugi.puremarket.common.enums.BaseResponseStatus.SUCCESS;
1514

1615
@RestController
1716
@RequiredArgsConstructor
@@ -41,4 +40,15 @@ public BaseResponse<?> getGiveawayList(@PathVariable Long giveawayIdx) {
4140
return new BaseResponse<>(e.getStatus());
4241
}
4342
}
43+
44+
// 나눔글 등록
45+
@PostMapping("")
46+
public BaseResponse<?> postGiveaway(GiveawayPostRequest giveawayPostRequest) {
47+
try {
48+
giveawayService.postGiveaway(giveawayPostRequest);
49+
return new BaseResponse<>(SUCCESS);
50+
} catch (BaseException e) {
51+
return new BaseResponse<>(e.getStatus());
52+
}
53+
}
4454
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.kkobugi.puremarket.produce.domain.dto;
2+
3+
import org.springframework.web.multipart.MultipartFile;
4+
5+
public record GiveawayPostRequest(String title,
6+
String content,
7+
MultipartFile giveawayImage) {}

0 commit comments

Comments
 (0)