Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package kw.zeropick.registration.domain;

import static com.querydsl.core.types.PathMetadataFactory.*;

import com.querydsl.core.types.dsl.*;

import com.querydsl.core.types.PathMetadata;
import javax.annotation.processing.Generated;
import com.querydsl.core.types.Path;
import com.querydsl.core.types.dsl.PathInits;


/**
* QRegistration is a Querydsl query type for Registration
*/
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QRegistration extends EntityPathBase<Registration> {

private static final long serialVersionUID = -1263438447L;

private static final PathInits INITS = PathInits.DIRECT2;

public static final QRegistration registration = new QRegistration("registration");

public final kw.zeropick.common.domain.QBaseEntity _super = new kw.zeropick.common.domain.QBaseEntity(this);

public final StringPath additional = createString("additional");

public final StringPath brand = createString("brand");

public final EnumPath<kw.zeropick.product.domain.Category> category = createEnum("category", kw.zeropick.product.domain.Category.class);

//inherited
public final DateTimePath<java.time.LocalDateTime> createdAt = _super.createdAt;

public final NumberPath<Long> id = createNumber("id", Long.class);

public final ListPath<String, StringPath> imageUrls = this.<String, StringPath>createList("imageUrls", String.class, StringPath.class, PathInits.DIRECT2);

public final StringPath ingredient = createString("ingredient");

public final kw.zeropick.member.domain.QMember member;

public final StringPath productName = createString("productName");

public final EnumPath<RegistrationStatus> registrationStatus = createEnum("registrationStatus", RegistrationStatus.class);

public final StringPath rejectionReason = createString("rejectionReason");

//inherited
public final DateTimePath<java.time.LocalDateTime> updatedAt = _super.updatedAt;

public QRegistration(String variable) {
this(Registration.class, forVariable(variable), INITS);
}

public QRegistration(Path<? extends Registration> path) {
this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
}

public QRegistration(PathMetadata metadata) {
this(metadata, PathInits.getFor(metadata, INITS));
}

public QRegistration(PathMetadata metadata, PathInits inits) {
this(Registration.class, metadata, inits);
}

public QRegistration(Class<? extends Registration> type, PathMetadata metadata, PathInits inits) {
super(type, metadata, inits);
this.member = inits.isInitialized("member") ? new kw.zeropick.member.domain.QMember(forProperty("member")) : null;
}

}

2 changes: 2 additions & 0 deletions src/main/java/kw/zeropick/ZeropickApplication.java
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 ZeropickApplication {

public static void main(String[] args) {
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/kw/zeropick/member/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import kw.zeropick.common.converter.StringListToStringConverter;
import kw.zeropick.registration.domain.Registration;
import lombok.*;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

@Entity
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package kw.zeropick.registration.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import kw.zeropick.common.LoginUser;
import kw.zeropick.member.domain.Member;
import kw.zeropick.member.service.MemberService;
import kw.zeropick.payload.ApiResponse;
import kw.zeropick.registration.controller.response.RegistrationResponse;
import kw.zeropick.registration.dto.RegistrationRequestDto;
import kw.zeropick.registration.service.RegistrationService;
import kw.zeropick.review.dto.request.ReviewRequestDto;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@Tag(name = "registration", description = "상품 등록 요청 API")
@RestController
@RequestMapping("/registration")
@RequiredArgsConstructor
public class RegistrationController {

private final RegistrationService registrationService;
private final MemberService memberService;

@PostMapping
@Operation(summary = "제품 등록 요청 생성")
public ResponseEntity<ApiResponse> registerProduct(
@RequestPart(value = "registration") RegistrationRequestDto requestDto,
@RequestPart(value = "files", required = false) List<MultipartFile> files) {

Long memberId = 1L;
Member requestMember = memberService.getById(memberId);
RegistrationResponse response = registrationService.registerProduct(requestMember, requestDto, files);

return ResponseEntity.ok(
ApiResponse.builder()
.check(true)
.information(response)
.build()
);
}

@GetMapping
@Operation(summary = "제품 등록 요청 조회")
public ResponseEntity<ApiResponse> getAllRegistrations() {
Long memberId = 1L;
Member requestMember = memberService.getById(memberId);
List<RegistrationResponse> responseList = registrationService.getAllRegistrations(requestMember);

return ResponseEntity.ok(
ApiResponse.builder()
.check(true)
.information(responseList)
.build()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package kw.zeropick.registration.controller.response;

import kw.zeropick.registration.domain.Registration;
import kw.zeropick.registration.domain.RegistrationStatus;
import lombok.Getter;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Getter
public class RegistrationResponse {
private final Long id;
private final String brand;
private final String productName;
private final String category;
private final String ingredient;
private final String additional;
private final RegistrationStatus registrationStatus;
private final String rejectionReason;
private List<String> imageUrls = new ArrayList<>();
private LocalDateTime createdAt;

public RegistrationResponse(Registration registration) {
this.id = registration.getId();
this.brand = registration.getBrand();
this.productName = registration.getProductName();
this.category = registration.getCategory().name();
this.ingredient = registration.getIngredient();
this.additional = registration.getAdditional();
this.registrationStatus = registration.getRegistrationStatus();
this.rejectionReason = registration.getRejectionReason();
this.imageUrls = registration.getImageUrls();
this.createdAt = registration.getCreatedAt();
}
}
87 changes: 87 additions & 0 deletions src/main/java/kw/zeropick/registration/domain/Registration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package kw.zeropick.registration.domain;

import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import kw.zeropick.common.converter.StringListToStringConverter;
import kw.zeropick.common.domain.BaseEntity;
import kw.zeropick.member.domain.Member;
import kw.zeropick.product.domain.Category;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Registration extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "registration_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)//단방향 연결
@JoinColumn(name = "member_id", nullable = false)
private Member member;

@NotNull
private String brand;

@NotNull
private String productName;

@NotNull
private Category category;

private String ingredient;

@Convert(converter = StringListToStringConverter.class)
private List<String> imageUrls = new ArrayList<>();

private String additional;

private RegistrationStatus registrationStatus; // 등록 요청 처리 상태

private String rejectionReason; // 반려 사유

public void setId(Long id) {
this.id = id;
}

public void setBrand(String brand) {
this.brand = brand;
}

public void setProductName(String productName) {
this.productName = productName;
}

public void setCategory(Category category) {
this.category = category;
}

public void setIngredient(String ingredient) {
this.ingredient = ingredient;
}

public void setImageUrls(List<String> imageUrls) {
this.imageUrls = imageUrls;
}
public void setAdditional(String additional) {
this.additional = additional;
}

public void setRegistrationStatus(RegistrationStatus registrationStatus) {
this.registrationStatus = registrationStatus;
}

public void setRejectionReason(String rejectionReason) {
this.rejectionReason = rejectionReason;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package kw.zeropick.registration.domain;

public enum RegistrationStatus {
PENDING, // 대기중
REJECTED, // 반려
COMPLETED // 등록 완료
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package kw.zeropick.registration.dto;

import jakarta.validation.constraints.NotNull;
import kw.zeropick.product.domain.Category;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Builder
@NoArgsConstructor
public class RegistrationRequestDto {
@NotNull
private String brand;
@NotNull
private String productName;
@NotNull
private Category category;
private String ingredient;
private String additional;

public RegistrationRequestDto(String brand, String productName, Category category, String ingredient, String additional) {
this.brand = brand;
this.productName = productName;
this.category = category;
this.ingredient = ingredient;
this.additional = additional;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package kw.zeropick.registration.repository;

import kw.zeropick.member.domain.Member;
import kw.zeropick.registration.domain.Registration;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface RegistrationRepository extends JpaRepository<Registration, Long> {
List<Registration> findByMember(Member member);
}
Loading