diff --git a/out/production/classes/com/sbb/flexrate/controller/LoanController.class b/out/production/classes/com/sbb/flexrate/controller/LoanController.class index 548dc2f..1426df1 100644 Binary files a/out/production/classes/com/sbb/flexrate/controller/LoanController.class and b/out/production/classes/com/sbb/flexrate/controller/LoanController.class differ diff --git a/out/production/classes/com/sbb/flexrate/domain/Change$ChangeBuilder.class b/out/production/classes/com/sbb/flexrate/domain/Change$ChangeBuilder.class new file mode 100644 index 0000000..02edc84 Binary files /dev/null and b/out/production/classes/com/sbb/flexrate/domain/Change$ChangeBuilder.class differ diff --git a/out/production/classes/com/sbb/flexrate/domain/Change.class b/out/production/classes/com/sbb/flexrate/domain/Change.class new file mode 100644 index 0000000..46d6790 Binary files /dev/null and b/out/production/classes/com/sbb/flexrate/domain/Change.class differ diff --git a/out/production/classes/com/sbb/flexrate/member/Member$MemberBuilder.class b/out/production/classes/com/sbb/flexrate/member/Member$MemberBuilder.class index 19d9c50..63f37af 100644 Binary files a/out/production/classes/com/sbb/flexrate/member/Member$MemberBuilder.class and b/out/production/classes/com/sbb/flexrate/member/Member$MemberBuilder.class differ diff --git a/out/production/classes/com/sbb/flexrate/member/Member.class b/out/production/classes/com/sbb/flexrate/member/Member.class index d6cef74..ab620d6 100644 Binary files a/out/production/classes/com/sbb/flexrate/member/Member.class and b/out/production/classes/com/sbb/flexrate/member/Member.class differ diff --git a/out/production/classes/com/sbb/flexrate/member/SignService.class b/out/production/classes/com/sbb/flexrate/member/SignService.class index 903f491..cee3739 100644 Binary files a/out/production/classes/com/sbb/flexrate/member/SignService.class and b/out/production/classes/com/sbb/flexrate/member/SignService.class differ diff --git a/out/production/classes/com/sbb/flexrate/repository/ChangeRepository.class b/out/production/classes/com/sbb/flexrate/repository/ChangeRepository.class new file mode 100644 index 0000000..810061c Binary files /dev/null and b/out/production/classes/com/sbb/flexrate/repository/ChangeRepository.class differ diff --git a/out/production/classes/com/sbb/flexrate/service/LoanService.class b/out/production/classes/com/sbb/flexrate/service/LoanService.class index 21ae297..d1d341a 100644 Binary files a/out/production/classes/com/sbb/flexrate/service/LoanService.class and b/out/production/classes/com/sbb/flexrate/service/LoanService.class differ diff --git a/src/main/java/com/sbb/flexrate/controller/CreditController.java b/src/main/java/com/sbb/flexrate/controller/CreditController.java index 483060d..54772c2 100644 --- a/src/main/java/com/sbb/flexrate/controller/CreditController.java +++ b/src/main/java/com/sbb/flexrate/controller/CreditController.java @@ -54,7 +54,7 @@ public ResponseEntity postCredit(){ */ - @GetMapping("/{memberId}") + @GetMapping("/get/{memberId}") public ResponseEntity getCreditInfo(@PathVariable("memberId") Long memberId){ try { CreditInfoDto creditInfoDto=creditService.getCreditInfo(memberId); @@ -64,7 +64,7 @@ public ResponseEntity getCreditInfo(@PathVariable("memberId") Lon } } - @PutMapping("/{memberId}") + @PutMapping("/put/{memberId}") public ResponseEntity updateCredit(@PathVariable Long memberId, @RequestBody CreditCreateRequestDto creditDto){ try { creditService.updateCredit(memberId,creditDto); diff --git a/src/main/java/com/sbb/flexrate/controller/LoanController.java b/src/main/java/com/sbb/flexrate/controller/LoanController.java index 2740429..0953308 100644 --- a/src/main/java/com/sbb/flexrate/controller/LoanController.java +++ b/src/main/java/com/sbb/flexrate/controller/LoanController.java @@ -15,15 +15,25 @@ public class LoanController { private final LoanService loanService; - //post method - @PostMapping("/result/{memberId}") - public ResponseEntity updateLoan(@PathVariable Long memberId, @RequestBody LoanCreateRequestDto loanDto) { + //put method +// @PutMapping("/result/{memberId}") +// public ResponseEntity updateLoan(@PathVariable Long memberId, @RequestBody LoanCreateRequestDto loanDto) { +// try { +// loanService.updateLoan(memberId, loanDto); +// LoanResponseDto responseDto = mapToResponseDto(loanDto); // Map LoanCreateRequestDto to LoanResponseDto +// return ResponseEntity.ok(responseDto); +// } catch (DataNotFoundException e) { +// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage()); +// } +// } + @PutMapping("/result/{memberId}") + public ResponseEntity updateLoan(@PathVariable Long memberId, @RequestBody LoanCreateRequestDto loanDto) { try { loanService.updateLoan(memberId, loanDto); LoanResponseDto responseDto = mapToResponseDto(loanDto); // Map LoanCreateRequestDto to LoanResponseDto return ResponseEntity.ok(responseDto); } catch (DataNotFoundException e) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage()); + return ResponseEntity.notFound().build(); } } diff --git a/src/main/java/com/sbb/flexrate/domain/Change.java b/src/main/java/com/sbb/flexrate/domain/Change.java new file mode 100644 index 0000000..3deb21e --- /dev/null +++ b/src/main/java/com/sbb/flexrate/domain/Change.java @@ -0,0 +1,43 @@ +package com.sbb.flexrate.domain; + +import com.sbb.flexrate.dto.LoanCreateRequestDto; +import com.sbb.flexrate.member.Member; +import com.sbb.flexrate.repository.ChangeRepository; +import lombok.*; + +import javax.persistence.*; + +@Getter +@Setter +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name="change_log") +public class Change { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="change_id") + private Long id; + + @ManyToOne + @JoinColumn(name = "member_id") + private Member member; + + @Column + private String change_insert_time; + + @Column + private Double change_loan_initial; + + public void updateFromLoan(Loan loan,ChangeRepository changeRepository) { + Change newChange=Change.builder() + .member(loan.getMember()) + .change_insert_time(loan.getInsert_time()) + .change_loan_initial(loan.getLoan_initial()) + .build(); + + changeRepository.save(newChange); + } +} diff --git a/src/main/java/com/sbb/flexrate/member/Member.java b/src/main/java/com/sbb/flexrate/member/Member.java index 12233ab..6c702e4 100644 --- a/src/main/java/com/sbb/flexrate/member/Member.java +++ b/src/main/java/com/sbb/flexrate/member/Member.java @@ -1,73 +1,75 @@ -package com.sbb.flexrate.member; + package com.sbb.flexrate.member; -import java.util.Date; -import java.util.List; + import java.util.List; -import com.sbb.flexrate.domain.Credit; -import com.sbb.flexrate.domain.Loan; -import lombok.*; -import org.springframework.web.bind.annotation.RequestParam; + import com.sbb.flexrate.domain.Change; + import com.sbb.flexrate.domain.Credit; + import com.sbb.flexrate.domain.Loan; + import lombok.*; -import javax.persistence.*; -import java.util.ArrayList; + import javax.persistence.*; + import java.util.ArrayList; -@Entity -@Setter -@Getter -@Builder -@AllArgsConstructor -@NoArgsConstructor -@Table(name = "member") -public class Member { + @Entity + @Setter + @Getter + @Builder + @AllArgsConstructor + @NoArgsConstructor + @Table(name = "member") + public class Member { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; - @OneToOne(mappedBy ="member",cascade = CascadeType.ALL) //변경사항 모두 반영 - private Credit credit; + @OneToOne(mappedBy ="member",cascade = CascadeType.ALL) //변경사항 모두 반영 + private Credit credit; - @OneToOne(mappedBy = "member",cascade = CascadeType.ALL) - private Loan loan; + @OneToOne(mappedBy = "member",cascade = CascadeType.ALL) + private Loan loan; - @NonNull - @Column(unique = true) - private String account; //토큰 Service 통해 자동 발급 + @OneToMany(mappedBy = "member",cascade = CascadeType.ALL, orphanRemoval = true) + private List change; - @NonNull - private String password; + @NonNull + @Column(unique = true) + private String account; //토큰 Service 통해 자동 발급 - @NonNull - private String name; + @NonNull + private String password; - @NonNull - private String birth; + @NonNull + private String name; - @NonNull - private Boolean gender; + @NonNull + private String birth; - @NonNull - private Boolean nationality; + @NonNull + private Boolean gender; - @NonNull - private String phonenumber; + @NonNull + private Boolean nationality; - @NonNull - private String email; + @NonNull + private String phonenumber; - //fetch_속성 데이터 어떻게 로드 할 지_즉시 로드 - //Lazy: 실제로 데이터에 접근할 때까지 로드하지 않음 - @OneToMany(mappedBy = "member",fetch = FetchType.EAGER,cascade = CascadeType.ALL) - @Builder.Default//빌더 패턴 생성 - private List roles=new ArrayList<>(); + @NonNull + private String email; - public void setRoles(List role){ - this.roles=role; - role.forEach(o -> o.setMember(this)); - //Authority 엔터티 순회하며 setMember 메서드 호출 + //fetch_속성 데이터 어떻게 로드 할 지_즉시 로드 + //Lazy: 실제로 데이터에 접근할 때까지 로드하지 않음 + @OneToMany(mappedBy = "member",fetch = FetchType.EAGER,cascade = CascadeType.ALL) + @Builder.Default//빌더 패턴 생성 + private List roles=new ArrayList<>(); + + public void setRoles(List role){ + this.roles=role; + role.forEach(o -> o.setMember(this)); + //Authority 엔터티 순회하며 setMember 메서드 호출 + } } -} -/* -사용자: 아이디, account, 비밀번호, 국적, 성별, 생일, 이름, 이메일, 번호, 권한(목록) - */ \ No newline at end of file + /* + 사용자: 아이디, account, 비밀번호, 국적, 성별, 생일, 이름, 이메일, 번호, 권한(목록) + */ \ No newline at end of file diff --git a/src/main/java/com/sbb/flexrate/member/SignService.java b/src/main/java/com/sbb/flexrate/member/SignService.java index 4e76c60..ffbb4f3 100644 --- a/src/main/java/com/sbb/flexrate/member/SignService.java +++ b/src/main/java/com/sbb/flexrate/member/SignService.java @@ -1,20 +1,17 @@ package com.sbb.flexrate.member; +import com.sbb.flexrate.domain.Change; import com.sbb.flexrate.domain.Credit; import com.sbb.flexrate.domain.Loan; -import com.sbb.flexrate.exception.CommonErrorResponse; import com.sbb.flexrate.exception.DuplicatedMemberNameException; import com.sbb.flexrate.exception.MissingRequestParameterException; import com.sbb.flexrate.security.JwtProvider; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; -import org.springframework.web.server.ResponseStatusException; -import javax.servlet.http.HttpServletResponse; import javax.transaction.Transactional; import java.util.Collections; import java.util.Optional; diff --git a/src/main/java/com/sbb/flexrate/repository/ChangeRepository.java b/src/main/java/com/sbb/flexrate/repository/ChangeRepository.java new file mode 100644 index 0000000..c9eddcf --- /dev/null +++ b/src/main/java/com/sbb/flexrate/repository/ChangeRepository.java @@ -0,0 +1,11 @@ +package com.sbb.flexrate.repository; + +import com.sbb.flexrate.domain.Change; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface ChangeRepository extends JpaRepository { + // 멤버 ID를 기반으로 Change 엔터티를 찾는 메서드 추가 + Optional findByMemberId(Long memberId); +} diff --git a/src/main/java/com/sbb/flexrate/service/LoanService.java b/src/main/java/com/sbb/flexrate/service/LoanService.java index a393690..d3a369e 100644 --- a/src/main/java/com/sbb/flexrate/service/LoanService.java +++ b/src/main/java/com/sbb/flexrate/service/LoanService.java @@ -1,5 +1,6 @@ package com.sbb.flexrate.service; +import com.sbb.flexrate.domain.Change; import com.sbb.flexrate.domain.Loan; import com.sbb.flexrate.dto.LoanCreateRequestDto; import com.sbb.flexrate.dto.LoanInfoDto; @@ -7,6 +8,7 @@ import com.sbb.flexrate.exception.DataNotFoundException; import com.sbb.flexrate.member.Member; import com.sbb.flexrate.member.MemberRepository; +import com.sbb.flexrate.repository.ChangeRepository; import com.sbb.flexrate.repository.LoanRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -14,41 +16,48 @@ import java.util.Optional; -@Service -@RequiredArgsConstructor -@Transactional -public class LoanService { - private final LoanRepository loanRepository; - private final MemberRepository memberRepository; + @Service + @RequiredArgsConstructor + @Transactional + public class LoanService { + private final LoanRepository loanRepository; + private final MemberRepository memberRepository; + private final ChangeRepository changeRepository; - public void updateLoan(Long memberId, LoanCreateRequestDto loanDto) { - Optional member = memberRepository.findById(memberId); - if (member.isPresent()) { - Optional optionalLoan = loanRepository.findByMemberId(memberId); - if (optionalLoan.isPresent()) { - Loan loan = optionalLoan.get(); + public void updateLoan(Long memberId, LoanCreateRequestDto loanDto) { + Optional member = memberRepository.findById(memberId); + if (member.isPresent()) { + Optional optionalLoan = loanRepository.findByMemberId(memberId); + if (optionalLoan.isPresent()) { + Loan loan = optionalLoan.get(); + loan.setInsert_time(loanDto.getInsert_time()); + loan.setLoan_limit(loanDto.getLoan_limit()); + loan.setLoan_initial(loanDto.getLoan_initial()); + loan.setLoan_range_min(loanDto.getLoan_range_min()); + loan.setLoan_range_max(loanDto.getLoan_range_max()); - // Check if loanDto and its member are not null before accessing properties - if (loanDto != null && loanDto.getMember() != null) { - loan.setName(loanDto.getMember().getName()); - } + Optional optionalChange=changeRepository.findByMemberId(memberId); + Change change; + if(optionalChange.isPresent()){ + change=optionalChange.get(); + change.updateFromLoan(loan,changeRepository); + }else{ + change = Change.builder().member(member.get()).build(); + change.updateFromLoan(loan, changeRepository); + + } - loan.setInsert_time(loanDto.getInsert_time()); - loan.setLoan_limit(loanDto.getLoan_limit()); - loan.setLoan_initial(loanDto.getLoan_initial()); - loan.setLoan_range_min(loanDto.getLoan_range_min()); - loan.setLoan_range_max(loanDto.getLoan_range_max()); + loanRepository.save(loan); + } else { + System.out.println(memberId); + throw new DataNotFoundException("해당 Member의 Loan 조회 실패"); + } - loanRepository.save(loan); } else { - System.out.println(memberId); - throw new DataNotFoundException("해당 Member의 Loan 조회 실패"); + throw new DataNotFoundException("Member 조회 실패"); } - } else { - throw new DataNotFoundException("Member 조회 실패"); } - } public void applyLoan(Long memberId, ApplyRequestDto applyDto) { Optional member = memberRepository.findById(memberId); @@ -62,11 +71,11 @@ public void applyLoan(Long memberId, ApplyRequestDto applyDto) { } - public LoanInfoDto getLoanInfo(Long memberId){ - Optional member=memberRepository.findById(memberId); - if(member.isPresent()){ - Loan loan=member.get().getLoan(); - return LoanInfoDto.from(loan); - }else throw new DataNotFoundException("Member 조회 실패"); - } +// public LoanInfoDto getLoanInfo(Long memberId){ +// Optional member=memberRepository.findById(memberId); +// if(member.isPresent()){ +// Loan loan=member.get().getLoan(); +// return LoanInfoDto.from(loan); +// }else throw new DataNotFoundException("Member 조회 실패"); +// } } \ No newline at end of file