Skip to content

Commit

Permalink
[FU-121] 사진작가측 신청서 리스트보기 API 구현 (#20)
Browse files Browse the repository at this point in the history
* FU-121 feat: component scan 경로 지정

* FU-121 refactor: 고객측 신청서 등록 로직 리팩토링

* FU-121 feat: 고객측 신청서 등록 요청 DTO 유효성 검증 추가 및 필수파라미터 강제화

* FU-121 feat: customer의 요청권한 확인 경로 추가

* FU-121 refactor: member 엔티티 필드 위치 수정

* FU-121 fix: 고객측 신청서 등록 시 사진작가 메모 제외

* FU-121 feat: 사진작가측 신청서 리스트뷰 조회 API 구현

* FU-121 refactor: 변수명 수정 및 �profile 엔티티 유효성 검증 타입 변경
  • Loading branch information
rheeri authored Aug 11, 2024
1 parent 4fe8c1f commit f33022f
Show file tree
Hide file tree
Showing 16 changed files with 255 additions and 85 deletions.
2 changes: 0 additions & 2 deletions src/main/java/com/foru/freebe/FreebeApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@

@SpringBootApplication(scanBasePackages = "com.foru.freebe")
public class FreebeApplication {

public static void main(String[] args) {
SpringApplication.run(FreebeApplication.class, args);
}

}
4 changes: 4 additions & 0 deletions src/main/java/com/foru/freebe/auth/model/KakaoUser.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,8 @@ public String getPhoneNumber() {
public Integer getBirthYear() {
return (Integer)kakaoAccount.get("birth_year");
}

public String getGender() {
return (String)kakaoAccount.get("gender");
}
}
1 change: 1 addition & 0 deletions src/main/java/com/foru/freebe/config/SecurityConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti

.authorizeHttpRequests((request) -> request
.requestMatchers("/photographer").hasAnyRole("PHOTOGRAPHER")
.requestMatchers("/customer").hasAnyRole("CUSTOMER")
.requestMatchers("/admin").hasAnyRole("ADMIN")
.anyRequest().permitAll())

Expand Down
14 changes: 7 additions & 7 deletions src/main/java/com/foru/freebe/member/entity/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ public class Member {
@NotNull
private Long kakaoId;

private String instagramId;

@Enumerated(EnumType.STRING)
@NotNull
private Role role;
Expand All @@ -46,10 +44,12 @@ public class Member {
@NotNull
private String phoneNumber;

private Integer birthyear;
private Integer birthYear;

private String gender;

private String instagramId;

@CreationTimestamp
private LocalDateTime createdAt;

Expand All @@ -62,16 +62,16 @@ public void assignRole(Role role) {
}

@Builder
public Member(Long kakaoId, String instagramId, String name, String email, String phoneNumber, Integer birthyear,
Role role, String gender) {
public Member(Long kakaoId, Role role, String name, String email, String phoneNumber, Integer birthyear,
String gender, String instagramId) {
this.kakaoId = kakaoId;
this.instagramId = instagramId;
this.role = role;
this.name = name;
this.email = email;
this.phoneNumber = phoneNumber;
this.birthyear = birthyear;
this.birthYear = birthyear;
this.gender = gender;
this.instagramId = instagramId;
}

public static MemberBuilder builder(Long kakaoId, Role role, String name, String email, String phoneNumber) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,10 @@ public void assignMemberRole(Long id, Role role) {

private Member registerNewMember(KakaoUser kakaoUser) {
Member newMember = Member.builder(kakaoUser.getKakaoId(), Role.PENDING, kakaoUser.getUserName(),
kakaoUser.getEmail(), kakaoUser.getPhoneNumber()).build();

kakaoUser.getEmail(), kakaoUser.getPhoneNumber())
.birthyear(kakaoUser.getBirthYear())
.gender(kakaoUser.getGender())
.build();
return memberRepository.save(newMember);
}
}
4 changes: 2 additions & 2 deletions src/main/java/com/foru/freebe/profile/entity/Profile.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.NotBlank;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -29,7 +29,7 @@ public class Profile {
@JoinColumn(name = "member_id")
private Member member;

@NotNull
@NotBlank(message = "Unique url must not be blank")
private String uniqueUrl;

private String introductionContent;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.foru.freebe.reservation.controller;

import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.foru.freebe.auth.model.MemberAdapter;
import com.foru.freebe.common.dto.ApiResponse;
import com.foru.freebe.member.entity.Member;
import com.foru.freebe.reservation.dto.ReservationFormRequest;
import com.foru.freebe.reservation.service.CustomerReservationService;

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
@RequestMapping("/customer")
public class CustomerReservationController {
private final CustomerReservationService customerReservationService;

@PostMapping("/reservation")
public ApiResponse<Void> registerReservationForm(@Valid @RequestBody ReservationFormRequest request,
@AuthenticationPrincipal MemberAdapter memberAdapter) {
Member customer = memberAdapter.getMember();
return customerReservationService.registerReservationForm(customer.getId(), request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.foru.freebe.reservation.controller;

import java.util.List;

import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.foru.freebe.auth.model.MemberAdapter;
import com.foru.freebe.common.dto.ApiResponse;
import com.foru.freebe.member.entity.Member;
import com.foru.freebe.reservation.dto.FormListViewResponse;
import com.foru.freebe.reservation.service.PhotographerReservationService;

import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
@RequestMapping("/photographer")
public class PhotographerReservationController {
private final PhotographerReservationService photographerReservationService;

@GetMapping("/reservation")
public ApiResponse<List<FormListViewResponse>> getReservationList(
@AuthenticationPrincipal MemberAdapter memberAdapter) {
Member member = memberAdapter.getMember();
return photographerReservationService.getReservationList(member.getId());
}
}

This file was deleted.

17 changes: 17 additions & 0 deletions src/main/java/com/foru/freebe/reservation/dto/FormComponent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.foru.freebe.reservation.dto;

import java.time.LocalDateTime;

import com.foru.freebe.reservation.entity.ReservationStatus;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public class FormComponent {
private ReservationStatus reservationStatus;
private String customerName;
private String productTitle;
private LocalDateTime shootingDate;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.foru.freebe.reservation.dto;

import java.util.List;

import com.foru.freebe.reservation.entity.ReservationStatus;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class FormListViewResponse {
private ReservationStatus status;
private List<FormComponent> formComponent;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,25 @@
@NoArgsConstructor
public class ReservationFormRequest {
private Long photographerId;
private Long customerId; // TODO 추후 토큰 로직으로 대체

@NotNull
private String instagramId;

@NotNull
private String productTitle;

private Map<String, String> photoInfo;

private Map<Integer, LocalDateTime> photoSchedule;

private String requestMemo;

@NotNull
private Long totalPrice;

@NotNull
private Boolean serviceTermAgreement;

@NotNull
private Boolean photographerTermAgreement;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,17 @@
import io.hypersistence.utils.hibernate.type.json.JsonType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
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 jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -34,18 +38,34 @@ public class ReservationForm {

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "photographer_id")
@NotNull(message = "Photographer must not be null")
private Member photographer;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "customer_id")
@NotNull(message = "Customer must not be null")
private Member customer;

@NotNull
@NotBlank(message = "Instagram ID must not be blank")
private String instagramId;

@NotNull
@NotBlank(message = "Product title must not be blank")
private String productTitle;

@NotNull(message = "Total price must not be null")
@Positive
private Long totalPrice;

@NotNull(message = "Service term agreement must not be null")
private Boolean serviceTermAgreement;

@NotNull(message = "Photographer term agreement must not be null")
private Boolean photographerTermAgreement;

@Enumerated(EnumType.STRING)
@NotNull(message = "Reservation status must not be null")
private ReservationStatus reservationStatus;

@Type(JsonType.class)
@Column(name = "photo_info", columnDefinition = "longtext")
private Map<String, String> photoInfo = new HashMap<>();
Expand All @@ -58,34 +78,36 @@ public class ReservationForm {

private String photographerMemo;

@NotNull
private Long totalPrice;

@NotNull
private Boolean serviceTermAgreement;

@NotNull
private Boolean photographerTermAgreement;

@NotNull
private ReservationStatus reservationStatus;

@Builder
public ReservationForm(Member photographer, Member customer, String instagramId, String productTitle,
Map<String, String> photoInfo, Map<Integer, LocalDateTime> photoSchedule, String requestMemo,
String photographerMemo, Long totalPrice, Boolean serviceTermAgreement, Boolean photographerTermAgreement,
ReservationStatus reservationStatus) {
Long totalPrice, Boolean serviceTermAgreement, Boolean photographerTermAgreement,
ReservationStatus reservationStatus, Map<String, String> photoInfo, Map<Integer, LocalDateTime> photoSchedule,
String requestMemo, String photographerMemo) {
this.photographer = photographer;
this.customer = customer;
this.instagramId = instagramId;
this.productTitle = productTitle;
this.photoInfo = photoInfo;
this.photoSchedule = photoSchedule;
this.requestMemo = requestMemo;
this.photographerMemo = photographerMemo;
this.totalPrice = totalPrice;
this.serviceTermAgreement = serviceTermAgreement;
this.photographerTermAgreement = photographerTermAgreement;
this.reservationStatus = reservationStatus;
this.photoInfo = photoInfo;
this.photoSchedule = photoSchedule;
this.requestMemo = requestMemo;
this.photographerMemo = photographerMemo;
}

public static ReservationFormBuilder builder(Member photographer, Member customer, String instagramId,
String productTitle, Long totalPrice, Boolean serviceTermAgreement, Boolean photographerTermAgreement,
ReservationStatus reservationStatus) {
return new ReservationFormBuilder()
.photographer(photographer)
.customer(customer)
.instagramId(instagramId)
.productTitle(productTitle)
.totalPrice(totalPrice)
.serviceTermAgreement(serviceTermAgreement)
.photographerTermAgreement(photographerTermAgreement)
.reservationStatus(reservationStatus);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package com.foru.freebe.reservation.repository;

import java.util.List;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;

import com.foru.freebe.reservation.entity.ReservationForm;

public interface ReservationFormRepository extends JpaRepository<ReservationForm, Long> {
Optional<List<ReservationForm>> findAllByPhotographerId(Long photographerId);
}
Loading

0 comments on commit f33022f

Please sign in to comment.