Skip to content

Commit

Permalink
[Feat] 게시글 작성 API(사진 첨부 제외)
Browse files Browse the repository at this point in the history
  • Loading branch information
isExample committed Sep 19, 2023
1 parent 795adde commit 25f1fd2
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 2 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ dependencies {
implementation 'mysql:mysql-connector-java:8.0.25'
implementation 'org.springdoc:springdoc-openapi-ui:1.7.0'
implementation 'org.springframework.boot:spring-boot-starter-webflux' // WebClient
implementation 'org.springframework.boot:spring-boot-starter-validation'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

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

@SpringBootApplication
@EnableJpaAuditing
public class TransactionApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@
public enum BaseResponseStatus {
/* 요청 성공 */
SUCCESS(true, 1000, "요청에 성공하였습니다."),

/* 요청 실패 */
USER_INVALID_RESPONSE(false, 1050, "User 서비스로부터 올바른 응답을 받지 못하였습니다."),
INVALID_JWT(false, 1051, "잘못된 JWT 토큰입니다.")
INVALID_JWT(false, 1051, "잘못된 JWT 토큰입니다."),
INVALID_CATEGORY(false, 3001, "유효하지 않은 카테고리입니다.")

;

private final boolean isSuccess;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import HeyPorori.transaction.config.BaseException;
import HeyPorori.transaction.config.BaseResponse;
import HeyPorori.transaction.config.BaseResponseStatus;
import HeyPorori.transaction.dto.PostReq;
import HeyPorori.transaction.service.TransactionService;
import HeyPorori.transaction.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -13,6 +15,8 @@
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RequiredArgsConstructor
@Tag(name = "중고거래", description = "중고거래 관련 API 입니다.")
@RestController
Expand All @@ -21,6 +25,7 @@ public class TransactionController {
private final TransactionService transactionService;
private final UserService userService;

// 테스트용 APIs
@Operation(summary = "Swagger UI 테스트용 메서드", description = "프로젝트 초기 Swagger UI 정상작동을 확인하기 위한 메서드입니다.")
@ApiResponse(responseCode = "200", description = "요청 성공", content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class)))
@GetMapping("/test")
Expand All @@ -33,4 +38,13 @@ public BaseResponse<Long> testUserService(@RequestHeader("Authorization") String
userService.sendTestJwtRequest(token);
return new BaseResponse<>(userService.getUserId(token));
}

// 실사용 APIs
@Operation(summary = "중고거래 게시글 작성 API", description = "중고거래 서비스의 거래 게시글을 작성하기 위한 API입니다.")
@ApiResponse(responseCode = "200", description = "요청 성공", content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class)))
@PostMapping("/post")
public BaseResponse<BaseResponseStatus> createPost(@RequestHeader("Authorization") String token, @RequestBody @Valid PostReq postReq) {
transactionService.createPost(token, postReq);
return new BaseResponse<>(BaseResponseStatus.SUCCESS);
}
}
12 changes: 12 additions & 0 deletions src/main/java/HeyPorori/transaction/domain/Category.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package HeyPorori.transaction.domain;

import HeyPorori.transaction.config.BaseException;
import HeyPorori.transaction.config.BaseResponseStatus;
import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Getter;

import java.util.Arrays;
import java.util.stream.Stream;

@Getter
public enum Category {
ELECTRONICS("전자제품", "스마트폰, 컴퓨터, 태블릿, TV, 오디오 기기 등"),
Expand All @@ -20,4 +26,10 @@ public enum Category {
this.name = name;
this.description = description;
}

public static Category parsing(String inputValue) {
return Arrays.stream(Category.values())
.filter(r -> r.name.equals(inputValue))
.findAny().orElse(null);
}
}
16 changes: 15 additions & 1 deletion src/main/java/HeyPorori/transaction/domain/Transaction.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package HeyPorori.transaction.domain;

import HeyPorori.transaction.config.BaseTimeEntity;
import HeyPorori.transaction.dto.PostReq;
import lombok.*;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;
Expand Down Expand Up @@ -44,7 +45,7 @@ public class Transaction extends BaseTimeEntity {
@Column(nullable = false)
private Double longitude;

@Column(nullable = false)
@Column(nullable = true)
private Category category;

@ColumnDefault("'ACTIVE'")
Expand All @@ -69,6 +70,19 @@ public Transaction(Long userId, String title, String content, int recommend, Str
this.status = status;
}

public static Transaction toEntity(PostReq postReq, Long userId){
return Transaction.builder()
.userId(userId)
.title(postReq.getTitle())
.content(postReq.getContent())
.recommend(0)
.address("필동")
.latitude(0.0)
.longitude(0.0)
.category(Category.parsing(postReq.getCategory()))
.build();
}

public void changeStatus(String status) {
this.status = status;
}
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/HeyPorori/transaction/dto/PostReq.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package HeyPorori.transaction.dto;

import HeyPorori.transaction.domain.Category;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class PostReq {
@Size(min = 1, max = 20, message = "거래 게시글 제목의 길이는 1 이상 20 이하입니다.")
private String title;
@Size(min = 1, max = 200, message = "거래 게시글 내용의 길이는 1 이상 200 이하입니다.")
private String content;
@Pattern(regexp = "^(전자제품|의류 및 액세서리|가구 및 가정용품|스포츠 및 레저|자동차 및 오토바이|도서 및 음악|아기 및 어린이 용품|기타)$", message = "유효하지 않은 카테고리입니다.")
private String category;
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
package HeyPorori.transaction.service;

import HeyPorori.transaction.domain.Transaction;
import HeyPorori.transaction.dto.PostReq;
import HeyPorori.transaction.repository.TransactionRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;

@Service
@Transactional
@RequiredArgsConstructor
public class TransactionService {
private final TransactionRepository transactionRepository;
private final UserService userService;

public void createPost(String token, PostReq postReq) {
userService.sendTestJwtRequest(token);
transactionRepository.save(Transaction.toEntity(postReq, userService.getUserId(token)));
}
}

0 comments on commit 25f1fd2

Please sign in to comment.