Skip to content

Commit

Permalink
Feat/mypage (#19)
Browse files Browse the repository at this point in the history
* Feat: 닉네임으로 멤버 객체 가져오기

* Feat: 닉네임으로 포인트 객체 가져오기

* Feat: 닉네임으로 거래 객체 가져오기

* Feat: 닉네임으로 찜하기 객체 가져오기

* Feat: 닉네임으로 구독 객체 가져오기
  • Loading branch information
flowerdonk authored Jul 30, 2023
1 parent 4a384b0 commit e8d3805
Show file tree
Hide file tree
Showing 22 changed files with 230 additions and 39 deletions.
26 changes: 24 additions & 2 deletions src/main/java/com/anywayclear/controller/DealController.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,31 @@
package com.anywayclear.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.anywayclear.dto.request.DealCreateRequest;
import com.anywayclear.dto.response.DealResponseList;
import com.anywayclear.service.DealService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.net.URI;

@RestController
@RequestMapping("/api/deals")
public class DealController {
private final DealService dealService;

public DealController(DealService dealService) {
this.dealService = dealService;
}

@PostMapping
public ResponseEntity<Void> createDeal(@Valid @RequestBody DealCreateRequest request) {
final Long id = dealService.createDeal(request);
return ResponseEntity.created(URI.create("/api/deals/" + id)).build();
}

@GetMapping
public ResponseEntity<DealResponseList> getDealList(@RequestParam(name = "nickname") String nickname) {
return ResponseEntity.ok(dealService.getDealList(nickname));
}
}
13 changes: 9 additions & 4 deletions src/main/java/com/anywayclear/controller/DibController.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
package com.anywayclear.controller;

import com.anywayclear.dto.response.DibResponseList;
import com.anywayclear.service.DibService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("")
@RequestMapping("/api/dibs")
public class DibController {
private final DibService dibService;

public DibController(DibService dibService) {
this.dibService = dibService;
}

@GetMapping
public ResponseEntity<DibResponseList> getDibList(@RequestParam(name = "nickname") String nickname) {
return ResponseEntity.ok(dibService.getDibList(nickname));
}

}
12 changes: 8 additions & 4 deletions src/main/java/com/anywayclear/controller/MemberController.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package com.anywayclear.controller;

import com.anywayclear.dto.request.MemberCreateRequest;
import com.anywayclear.dto.response.MemberResponse;
import com.anywayclear.service.MemberService;
import org.springframework.http.ResponseEntity;
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 org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.net.URI;
import java.util.List;

@RestController
@RequestMapping("/api/members")
Expand All @@ -26,4 +25,9 @@ public ResponseEntity<Void> getMember(@Valid @RequestBody MemberCreateRequest re
final String id = memberService.createMember(request);
return ResponseEntity.created(URI.create("api/members/" + id)).build();
}

@GetMapping
public ResponseEntity<MemberResponse> getMemberDetail(@RequestParam(name = "nickname") String nickname) {
return ResponseEntity.ok(memberService.getMemberByNickname(nickname));
}
}
25 changes: 25 additions & 0 deletions src/main/java/com/anywayclear/controller/PointController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.anywayclear.controller;

import com.anywayclear.dto.request.PointCreateRequest;
import com.anywayclear.dto.response.PointResponse;
import com.anywayclear.service.PointService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.net.URI;

@RestController
@RequestMapping("/api/points")
public class PointController {
private final PointService pointService;

public PointController(PointService pointService) {
this.pointService = pointService;
}

@GetMapping
public ResponseEntity<PointResponse> getPoint(@RequestParam(name = "nickname") String nickname) {
return ResponseEntity.ok(pointService.getPoint(nickname));
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,24 @@
package com.anywayclear.controller;

import com.anywayclear.dto.response.SubscribeResponseList;
import com.anywayclear.service.SubscribeService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("")
@RequestMapping("/api/subscribes")
public class SubscribeController {
private final SubscribeService subscribeService;

public SubscribeController(SubscribeService subscribeService) {
this.subscribeService = subscribeService;
}

@GetMapping
public ResponseEntity<SubscribeResponseList> getSubscribeList(@RequestParam(name = "nickname") String nickname) {
return ResponseEntity.ok(subscribeService.getSubscribeList(nickname));
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/anywayclear/dto/response/DealResponseList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.anywayclear.dto.response;

import com.anywayclear.entity.Deal;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.stream.Collectors;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class DealResponseList {
private List<DealResponse> dealResponsesList;

public DealResponseList(final List<Deal> dealList) {
this.dealResponsesList = dealList.stream()
.map(DealResponse::toResponse)
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@

import com.anywayclear.entity.Member;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class MemberResponse {
private String userId;
private String nickname;
Expand Down
8 changes: 3 additions & 5 deletions src/main/java/com/anywayclear/entity/Deal.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,15 @@ public class Deal {
private boolean isPaid = false;

@ManyToOne
@JoinColumn(name = "id")
@JoinColumn(name = "consumer_id", referencedColumnName = "id")
private Member consumer;

@ManyToOne
@JoinColumn(name = "id")
@Column(nullable = false)
@JoinColumn(name = "seller_id", referencedColumnName = "id")
private Member seller;

@ManyToOne
@JoinColumn(name = "id")
@Column(nullable = false)
@JoinColumn(name = "produce_id", referencedColumnName = "id")
private Produce produce;

@Builder
Expand Down
6 changes: 2 additions & 4 deletions src/main/java/com/anywayclear/entity/Dib.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,11 @@ public class Dib {
private Long id;

@ManyToOne
@JoinColumn(name = "id")
@Column(nullable = false)
@JoinColumn(name = "consumer_id", referencedColumnName = "id")
private Member consumer;

@ManyToOne
@JoinColumn(name = "id")
@Column(nullable = false)
@JoinColumn(name = "produce_id", referencedColumnName = "id")
private Produce produce;

@Builder
Expand Down
9 changes: 6 additions & 3 deletions src/main/java/com/anywayclear/entity/Member.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package com.anywayclear.entity;

import com.anywayclear.dto.request.MemberCreateRequest;
import com.fasterxml.jackson.annotation.JsonBackReference;
import lombok.*;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.*;

@Entity
@Getter
Expand Down Expand Up @@ -40,6 +39,10 @@ public class Member {

private String companyAddress;

@OneToOne(mappedBy = "member", cascade = CascadeType.ALL) // 영속성 전이가 발생해 부모객체를 저장할 때 자식객체도 함께 저장
@JsonBackReference // 순환참조 방지
private Point point = new Point(this); // 멤버 생성 시 포인트 객체 자동 생성



@Builder
Expand Down
12 changes: 10 additions & 2 deletions src/main/java/com/anywayclear/entity/Point.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.anywayclear.entity;

import com.anywayclear.dto.request.PointCreateRequest;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import net.minidev.json.annotate.JsonIgnore;

import javax.persistence.*;
import java.time.LocalDateTime;
Expand All @@ -27,8 +29,8 @@ public class Point {
private LocalDateTime updatedAt;

@OneToOne
@JoinColumn(name = "id")
@Column(nullable = false)
@JsonManagedReference // 순환참조 방지
@JoinColumn(name = "member_id", referencedColumnName = "id")
private Member member;

@Builder
Expand All @@ -39,6 +41,12 @@ public Point(Long id, int balance, LocalDateTime updatedAt, Member member) {
this.member = member;
}

@Builder
public Point(Member member) {
this.member = member;
this.updatedAt = LocalDateTime.now();
}

public static Point toEntity(PointCreateRequest request) {
return Point.builder()
.balance(request.getBalance())
Expand Down
6 changes: 2 additions & 4 deletions src/main/java/com/anywayclear/entity/Subscribe.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,11 @@ public class Subscribe {
private Long id;

@ManyToOne
@JoinColumn(name = "id")
@Column(nullable = false)
@JoinColumn(name = "consumer_id", referencedColumnName = "id")
private Member consumer;

@ManyToOne
@JoinColumn(name = "id")
@Column(nullable = false)
@JoinColumn(name = "seller_id", referencedColumnName = "id")
private Member seller;

@Builder
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/com/anywayclear/repository/DealRepository.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package com.anywayclear.repository;

import com.anywayclear.entity.Deal;
import com.anywayclear.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;

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

public interface DealRepository extends JpaRepository<Deal, Long> {

List<Deal> findAllByConsumer(Member member);

List<Deal> findAllBySeller(Member member);
}
8 changes: 8 additions & 0 deletions src/main/java/com/anywayclear/repository/DibRepository.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package com.anywayclear.repository;

import com.anywayclear.entity.Dib;
import com.anywayclear.entity.Member;
import com.anywayclear.entity.Produce;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface DibRepository extends JpaRepository<Dib, Long> {

List<Dib> findAllByConsumer(Member member); // 찜 중인 농산물 찾기

List<Dib> findAllByProduce(Produce produce); // 해당 농산물을 찜한 소비자 찾기
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,7 @@

public interface MemberRepository extends JpaRepository<Member, String> {
Optional<Member> findByEmailAddress(String emailAddress); // NullPointerException과 같은 예외를 방지하기 위해 Optional 사용

Optional<Member> findByNickname(String nickname); // 닉네임으로 멤버 객체 불러오기

}
4 changes: 4 additions & 0 deletions src/main/java/com/anywayclear/repository/PointRepository.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.anywayclear.repository;

import com.anywayclear.entity.Member;
import com.anywayclear.entity.Point;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface PointRepository extends JpaRepository<Point, Long> {

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package com.anywayclear.repository;

import com.anywayclear.entity.Member;
import com.anywayclear.entity.Subscribe;
import org.springframework.data.jpa.repository.JpaRepository;

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

public interface SubscribeRepository extends JpaRepository<Subscribe, Long> {

List<Subscribe> findAllByConsumer(Member member);
List<Subscribe> findAllBySeller(Member member);

}
20 changes: 19 additions & 1 deletion src/main/java/com/anywayclear/service/DealService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,23 @@

import com.anywayclear.dto.request.DealCreateRequest;
import com.anywayclear.dto.response.DealResponse;
import com.anywayclear.dto.response.DealResponseList;
import com.anywayclear.entity.Deal;
import com.anywayclear.entity.Member;
import com.anywayclear.repository.DealRepository;
import com.anywayclear.repository.MemberRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class DealService {
private final DealRepository dealRepository;
private final MemberRepository memberRepository;

public DealService(DealRepository dealRepository) {
public DealService(DealRepository dealRepository, MemberRepository memberRepository) {
this.dealRepository = dealRepository;
this.memberRepository = memberRepository;
}

public Long createDeal(DealCreateRequest request) {
Expand All @@ -22,4 +29,15 @@ public DealResponse getDeal(Long id) {
Deal deal = dealRepository.findById(id).orElseThrow(() -> new RuntimeException());
return DealResponse.toResponse(deal);
}

public DealResponseList getDealList(String nickname) {
Member member = memberRepository.findByNickname(nickname).orElseThrow(() -> new RuntimeException("해당 닉네임의 유저가 없습니다."));
List<Deal> dealList;
if (member.getRole() == "ROLE_SELLER") { // 판매자 일 경우
dealList = dealRepository.findAllBySeller(member);
} else { // 소비자 일 경우
dealList = dealRepository.findAllByConsumer(member);
}
return new DealResponseList(dealList);
}
}
Loading

0 comments on commit e8d3805

Please sign in to comment.