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
70 changes: 70 additions & 0 deletions src/main/generated/kw/zeropick/correction/domain/QCorrection.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package kw.zeropick.correction.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;


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

private static final long serialVersionUID = 1655451227L;

private static final PathInits INITS = PathInits.DIRECT2;

public static final QCorrection correction = new QCorrection("correction");

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

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

public final EnumPath<CorrectionStatus> correctionStatus = createEnum("correctionStatus", CorrectionStatus.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 kw.zeropick.member.domain.QMember member;

public final kw.zeropick.product.domain.QProduct product;

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

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

public QCorrection(String variable) {
this(Correction.class, forVariable(variable), INITS);
}

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

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

public QCorrection(PathMetadata metadata, PathInits inits) {
this(Correction.class, metadata, inits);
}

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

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package kw.zeropick.correction.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.List;
import kw.zeropick.common.LoginUser;
import kw.zeropick.correction.dto.request.CorrectionRequest;
import kw.zeropick.correction.dto.response.CorrectionResponse;
import kw.zeropick.correction.service.CorrectionService;
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 lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@Tag(name = "correction", description = "상품 수정 요청 API")
@RestController
@RequestMapping("/correction")
@RequiredArgsConstructor
public class CorrectionController {
private final CorrectionService correctionService;
private final MemberService memberService;

@PostMapping
@Operation(summary = "제품 수정 요청 생성")
public ResponseEntity<ApiResponse> correctionProduct(
@RequestPart(value = "correction") CorrectionRequest request,
@RequestPart(value = "files", required = false) List<MultipartFile> files) {

Long memberId = 1L;

CorrectionResponse response = correctionService.correctionProduct(memberId, request.getProductId(), request, files);

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

@GetMapping
@Operation(summary = "제품 수정 요청 조회")
public ResponseEntity<ApiResponse> getAllCorrections() {
Long memberId = 1L;
Member requestMember = memberService.getById(memberId);
List<CorrectionResponse> correctionResponses = correctionService.getAllCorrections(requestMember);

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

@DeleteMapping("/{correctionId}")
@Operation(summary = "제품 수정 요청 철회")
public ResponseEntity<ApiResponse> productBookmarkUndo(@PathVariable Long correctionId) {
Long memberId = LoginUser.get().getId();
try {
correctionService.deleteCorrection(correctionId, memberId);
return ResponseEntity.ok(
ApiResponse.builder()
.check(true)
.information("Product correction deleted successfully")
.build()
);
} catch (Exception e) {
return ResponseEntity.internalServerError().body(
ApiResponse.builder()
.check(false)
.information(e.getMessage())
.build()
);
}
}

}
50 changes: 50 additions & 0 deletions src/main/java/kw/zeropick/correction/domain/Correction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package kw.zeropick.correction.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import java.util.ArrayList;
import java.util.List;
import kw.zeropick.common.converter.StringListToStringConverter;
import kw.zeropick.common.domain.BaseEntity;
import kw.zeropick.member.domain.Member;
import kw.zeropick.product.domain.Product;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Correction extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "correction_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id", nullable = false)
private Member member;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id", nullable = false)
private Product product;

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

private String additional;

private CorrectionStatus correctionStatus; // 등록 요청 처리 상태

private String rejectionReason; // 반려 사유
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package kw.zeropick.correction.domain;

public enum CorrectionStatus {
PENDING, // 대기중
REJECTED, // 반려
COMPLETED // 수정 완료
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package kw.zeropick.correction.dto.request;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class CorrectionRequest {
private Long productId;
private String additional;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package kw.zeropick.correction.dto.response;


import jakarta.persistence.Convert;
import jakarta.persistence.FetchType;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import kw.zeropick.common.converter.StringListToStringConverter;
import kw.zeropick.correction.domain.CorrectionStatus;
import kw.zeropick.member.domain.Member;
import kw.zeropick.product.domain.Product;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class CorrectionResponse {
private Long id;

private Long memberId;

private Long productId;

private String productName;

private String brand;

private String productImageUrl;

private List<String> imageUrls;

private String additional;

private CorrectionStatus correctionStatus; // 등록 요청 처리 상태

private String rejectionReason; // 반려 사유

private LocalDateTime createdAt;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package kw.zeropick.correction.repository;

import java.util.List;
import kw.zeropick.correction.domain.Correction;
import kw.zeropick.correction.dto.response.CorrectionResponse;
import kw.zeropick.member.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

public interface CorrectionRepository extends JpaRepository<Correction, Long> {
List<Correction> findByMember(Member member);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package kw.zeropick.correction.service;

import java.util.List;
import kw.zeropick.correction.dto.request.CorrectionRequest;
import kw.zeropick.correction.dto.response.CorrectionResponse;
import kw.zeropick.member.domain.Member;
import kw.zeropick.product.domain.Product;
import org.springframework.web.multipart.MultipartFile;

public interface CorrectionService {
public CorrectionResponse correctionProduct(Long memberId, Long productId, CorrectionRequest request, List<MultipartFile> files);
public List<CorrectionResponse> getAllCorrections(Member member);
public void deleteCorrection(Long correctionId, Long memberId);
}
Loading