Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[12기] 김민혁 과제 제출합니다. #3

Open
wants to merge 18 commits into
base: main
Choose a base branch
from
Open
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
2 changes: 2 additions & 0 deletions src/main/java/spring/library/SpringLibraryApplication.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 SpringLibraryApplication {

public static void main(String[] args) {
Expand Down
54 changes: 54 additions & 0 deletions src/main/java/spring/library/controller/BookInfoController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package spring.library.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import spring.library.controller.form.BookForm;
import spring.library.controller.response.*;
import spring.library.domain.Book;
import spring.library.dto.BookDto;
import spring.library.dto.MemberDto;
import spring.library.service.BookService;

import java.util.List;

@RestController
@RequestMapping("/books")
@RequiredArgsConstructor
@CrossOrigin
public class BookInfoController {

private final BookService bookService;

@PostMapping
public ResponseEntity<ApiResponse> addBook(@RequestBody BookForm form){
Long bookId = bookService.addBook(BookDto.from(form));
ApiResponse response = new BookIdResponse(bookId);
return ResponseEntity.ok(response);
}

@GetMapping("/{bookId}")
public ResponseEntity<ApiResponse> getBook(@PathVariable Long bookId){
BookDto bookDto = bookService.getBook(bookId);
ApiResponse response = new BookResponse(bookDto);
return ResponseEntity.ok(response);
}


@GetMapping
public ResponseEntity<ApiResponse> getAllBooks(){
List<BookDto> bookDto = bookService.getAllBooks();
ApiResponse response = new BookListResponse(bookDto);
return ResponseEntity.ok(response);
}


@DeleteMapping("/{bookId}")
public ResponseEntity<ApiResponse> deleteBook(@PathVariable Long bookId){
bookService.deleteBook(bookId);
ApiResponse response = new BookIdResponse(bookId);
return ResponseEntity.ok(response);
}


}
75 changes: 75 additions & 0 deletions src/main/java/spring/library/controller/CheckoutController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package spring.library.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import spring.library.controller.form.MemberForm;
import spring.library.controller.response.*;
import spring.library.domain.Book;
import spring.library.domain.History;
import spring.library.domain.Member;
import spring.library.dto.BookDto;
import spring.library.dto.HistoryDto;
import spring.library.dto.MemberDto;
import spring.library.service.BookService;
import spring.library.service.CheckoutService;
import spring.library.service.MemberService;

import java.util.List;

@RestController
@RequestMapping("/checkouts")
@RequiredArgsConstructor
@CrossOrigin
public class CheckoutController {

private final MemberService memberService;
private final BookService bookService;
private final CheckoutService checkoutService;

@PostMapping("/{bookId}")
public ResponseEntity<ApiResponse> borrowBook(
@PathVariable Long bookId, @RequestBody MemberForm memberForm) {
BookDto bookDto = bookService.getBook(bookId);
MemberDto memberDto = memberService.getMemberInfo(memberForm.getMemberId());
checkoutService.checkOut(memberDto, bookDto);
ApiResponse response = new CheckoutBorrowResponse();
return ResponseEntity.ok(response);
}

@GetMapping
public ResponseEntity<ApiResponse> getTakenBook(@RequestParam("memberId") Long memberId) {
List<BookDto> bookDto = checkoutService.getBookTakenByMember(memberId);
ApiResponse response = new CheckoutListResponse(bookDto);
return ResponseEntity.ok(response);
}


@GetMapping("/history")
public ResponseEntity<ApiResponse> historyBook(@RequestParam("memberId") Long memberId){
List<BookDto> bookDto = checkoutService.getBookHistory(memberId);
ApiResponse response = new HistoryListResponse(bookDto);
return ResponseEntity.ok(response);
}

@PatchMapping("/{checkOutId}/return")
public ResponseEntity<ApiResponse> returnBook(@PathVariable Long checkOutId, @RequestBody MemberForm memberForm){
BookDto bookDto = bookService.getBook(checkOutId);
MemberDto memberDto =memberService.getMemberInfo(memberForm.getMemberId());
checkoutService.returnBook(memberDto,bookDto);
ApiResponse response = new ReturnResponse();
return ResponseEntity.ok(response);
}


@PatchMapping("/{checkOutId}/renewal")
public ResponseEntity<ApiResponse> renewalBook(@PathVariable Long checkOutId, @RequestBody MemberForm memberForm){
MemberDto memberDto =memberService.getMemberInfo(memberForm.getMemberId());

checkoutService.renewalBook(checkOutId,memberDto);
ApiResponse response = new RenewalResponse();
return ResponseEntity.ok(response);
}

}

55 changes: 55 additions & 0 deletions src/main/java/spring/library/controller/MemberController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package spring.library.controller;


import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import spring.library.controller.form.MemberForm;
import spring.library.controller.response.ApiResponse;
import spring.library.controller.response.MemberIdResponse;
import spring.library.controller.response.MemberListResponse;
import spring.library.controller.response.MemberResponse;
import spring.library.dto.MemberDto;
import spring.library.service.MemberService;

import java.util.List;

@RestController
@RequestMapping("/members")
@RequiredArgsConstructor
@CrossOrigin
public class MemberController {

private final MemberService memberService;

@PostMapping
public ResponseEntity<ApiResponse> addMember(@RequestBody MemberForm form){
Long memberId = memberService.addMember(MemberDto.from(form));
ApiResponse response = new MemberIdResponse(memberId);
return ResponseEntity.ok(response);
}

@GetMapping
public ResponseEntity<ApiResponse> getAllMemeber(){
List<MemberDto> memberDto = memberService.getAllMembers();
ApiResponse response = new MemberListResponse(memberDto);

return ResponseEntity.ok(response);
}

@GetMapping("/{member_id}")
public ResponseEntity<ApiResponse> getMember(@PathVariable Long member_id){
MemberDto memberDto = memberService.getMemberInfo(member_id);
ApiResponse response = new MemberResponse(memberDto);
return ResponseEntity.ok(response);
}

@DeleteMapping("/{member_id}")
public ResponseEntity<ApiResponse> delete(@PathVariable Long member_id){
memberService.deleteMember(member_id);
ApiResponse response = new MemberIdResponse(member_id);
return ResponseEntity.ok(response);
}

}
18 changes: 18 additions & 0 deletions src/main/java/spring/library/controller/form/BookForm.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package spring.library.controller.form;

import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class BookForm {

private Long bookId;
private String title;
private String author;
private String publisher;
private int publicationYear;
private String classification;
private String status;
private int amount;
}
20 changes: 20 additions & 0 deletions src/main/java/spring/library/controller/form/MemberForm.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package spring.library.controller.form;

import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class MemberForm {

private String name;

private Long memberId;

private String feature;

private String email;

private String phoneNumber;

}
18 changes: 18 additions & 0 deletions src/main/java/spring/library/controller/response/ApiResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package spring.library.controller.response;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import spring.library.domain.Book;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ApiResponse {

private Boolean isSuccessful = true;

public ApiResponse(boolean isSuccessful){
this.isSuccessful = isSuccessful;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package spring.library.controller.response;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED)
@AllArgsConstructor
public class BookIdResponse extends ApiResponse {

private Long bookId;


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package spring.library.controller.response;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import spring.library.dto.BookDto;

import java.util.List;

@Getter
@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED)
public class BookListResponse extends ApiResponse {

private List<BookDto> books;

public BookListResponse(List<BookDto> bookDto){
this.books = bookDto;
}

}
30 changes: 30 additions & 0 deletions src/main/java/spring/library/controller/response/BookResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package spring.library.controller.response;

import spring.library.dto.BookDto;

public class BookResponse extends ApiResponse {

private Long bookId;
private String title;

private String author;
private String publisher;
private int publicationYear;
private String classification;
private String status;
private int amount;


public BookResponse(BookDto bookDto) {
this.bookId=bookDto.getBookId();
this.title =bookDto.getTitle();

this.author = bookDto.getAuthor();
this.publisher = bookDto.getPublisher();
this.publicationYear = bookDto.getPublicationYear();
this.classification = bookDto.getClassification();
this.status = bookDto.getStatus();
this.amount = bookDto.getAmount();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package spring.library.controller.response;


import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
public class CheckoutBorrowResponse extends ApiResponse {



}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package spring.library.controller.response;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import spring.library.domain.Book;
import spring.library.dto.BookDto;
import spring.library.dto.MemberDto;

import java.util.List;

@Getter
@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED)
public class CheckoutListResponse extends ApiResponse {

private List<BookDto> books;

public CheckoutListResponse(List<BookDto> bookDto){
this.books = bookDto;
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package spring.library.controller.response;

import lombok.Getter;
import lombok.NoArgsConstructor;
import spring.library.dto.BookDto;
import spring.library.dto.MemberDto;

import java.util.List;

@Getter
@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED)
public class HistoryListResponse extends ApiResponse {

private List<BookDto> bookDto;


public HistoryListResponse(List<BookDto> bookDto){
this.bookDto = bookDto;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package spring.library.controller.response;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED)
@AllArgsConstructor
public class MemberIdResponse extends ApiResponse {

private Long memberId;

}
Loading