diff --git a/src/main/java/com/example/bookmanagement/Book.java b/src/main/java/com/example/bookmanagement/Book.java index ce0dd851c191458e65c22fcc6cb18d42d03865b0..d058d60bcbd8474ade9a13d6e71e23e4d2f7ae8d 100644 --- a/src/main/java/com/example/bookmanagement/Book.java +++ b/src/main/java/com/example/bookmanagement/Book.java @@ -2,20 +2,48 @@ package com.example.bookmanagement; import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.Table; @Entity +@Table public class Book { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private long id; +@Id +private Long id; +@Column +private String book_name; +@Column +private String author_name; - @Column(nullable = false, unique = true) - private String title; +public Book(){ } - @Column(nullable = false) - private String author; +public Book(Long id, String book_name, String author_name, String isbn) { +this.id=id; +this.book_name=book_name; +this.author_name=author_name; +} + +public Long getId() { +return id; +} + +public void setId(Long id) { +this.id = id; +} + +public String getBook_name() { +return book_name; +} + +public void setBook_name(String book_name) { +this.book_name = book_name; +} + +public String getAuthor_name() { +return author_name; +} +public void setAuthor_name(String author_name) { +this.author_name = author_name; } +} \ No newline at end of file diff --git a/src/main/java/com/example/bookmanagement/BookController.java b/src/main/java/com/example/bookmanagement/BookController.java index 20939dbfbf060857c707a23b1d4f37ffaa3ce89f..7462f0ac0d8d826d47c869d10252f6282602dbc1 100644 --- a/src/main/java/com/example/bookmanagement/BookController.java +++ b/src/main/java/com/example/bookmanagement/BookController.java @@ -1,6 +1,7 @@ package com.example.bookmanagement; import java.util.List; +import java.util.Optional; import com.example.bookmanagement.error.BookIdMismatchException; import com.example.bookmanagement.error.BookNotFoundException; @@ -17,48 +18,48 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @RestController -@RequestMapping("/api/books") public class BookController { - @Autowired - private BookRepository bookRepository; +@Autowired +BookRepository bookRepository; - @GetMapping - public Iterable<Book> findAll() { - return bookRepository.findAll(); - } +@GetMapping("/getAllBooks") +public List<Book> getAllBooks() +{ +return bookRepository.findAll(); +} - @GetMapping("/title/{bookTitle}") - public List findByTitle(@PathVariable String bookTitle) { - return bookRepository.findByTitle(bookTitle); - } +@GetMapping("/getBookById/{id}") +public Optional<Book> getBookById(@PathVariable Long id) +{ + System.out.println(bookRepository.findById(id)); +return bookRepository.findById(id); +} - @GetMapping("/{id}") - public Book findOne(@PathVariable Long id) { - return bookRepository.findById(id) - .orElseThrow(BookNotFoundException::new); - } +@PostMapping("/addBook") +public Book addBook(@RequestBody Book book) +{ +return bookRepository.save(book); +} - @PostMapping - @ResponseStatus(HttpStatus.CREATED) - public Book create(@RequestBody Book book) { - return bookRepository.save(book); - } +@PutMapping("/updateBook/{id}") +public Book updateBook(@PathVariable Long id, @RequestBody Book bookDetails) +{ +Optional<Book> book = bookRepository.findById(id); +Book book_new=book.get(); +book_new.setAuthor_name(bookDetails.getAuthor_name()); +book_new.setBook_name(bookDetails.getBook_name()); +book_new.setIsbn(bookDetails.getIsbn()); +return bookRepository.save(book_new); - @DeleteMapping("/{id}") - public void delete(@PathVariable Long id) { - bookRepository.findById(id) - .orElseThrow(BookNotFoundException::new); - bookRepository.deleteById(id); - } +} - @PutMapping("/{id}") - public Book updateBook(@RequestBody Book book, @PathVariable Long id) { - if (book.getId() != id) { - throw new BookIdMismatchException(); - } - bookRepository.findById(id) - .orElseThrow(BookNotFoundException::new); - return bookRepository.save(book); - } +@DeleteMapping("/deleteBook/{id}") +public void deleteBook(@PathVariable Long id) +{ +Optional<Book> book=bookRepository.findById(id); +Book book_new=book.get(); +bookRepository.delete(book_new); } + +} \ No newline at end of file diff --git a/src/main/java/com/example/bookmanagement/BookRepository.java b/src/main/java/com/example/bookmanagement/BookRepository.java index fb72f6cbb20e674d068b49c09ea0a5a97c09bf8e..b3203617a7d5132cc2f9e46097fa5a770a95ad14 100644 --- a/src/main/java/com/example/bookmanagement/BookRepository.java +++ b/src/main/java/com/example/bookmanagement/BookRepository.java @@ -1,8 +1,6 @@ package com.example.bookmanagement; +import org.springframework.data.jpa.repository.JpaRepository; -import java.util.List; +public interface BookRepository extends JpaRepository<Book, Long>{ -import org.springframework.data.repository.CrudRepository; -public interface BookRepository extends CrudRepository<Book, Long> { - List<Book> findByTitle(String title); } \ No newline at end of file diff --git a/src/main/java/com/example/bookmanagement/SimpleController.java b/src/main/java/com/example/bookmanagement/SimpleController.java index 90a1f481fef7bb4dfbea9b703378bb57a44bfa41..8ea0a416e91b0ef22acd2ddf446f9821b21361f0 100644 --- a/src/main/java/com/example/bookmanagement/SimpleController.java +++ b/src/main/java/com/example/bookmanagement/SimpleController.java @@ -2,18 +2,46 @@ package com.example.bookmanagement; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; @Controller public class SimpleController { @Value("${spring.application.name}") String appName; - @GetMapping("/") + /*@GetMapping("/") public String homePage(Model model) { System.out.println("qwerty"); model.addAttribute("appName", appName); return "index"; + }*/ + @GetMapping("/") + public String root() { + return "index"; } + + /*@GetMapping("/user") + public String userIndex() { + return "user/index"; + }*/ + + @GetMapping("/login") + public String login() { + return "login"; + } + + @PostMapping("/") + public String checkCredentials() { + if(){ + return "Book"; + }else{ + return "loginError"; + } + } + + /*@GetMapping("/access-denied") + public String accessDenied() { + return "/error/access-denied"; + }*/ } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index fc80b544b153b2a4bf797d314ab6b072cef97c3c..33d882699559fb6906725102334a124b8ce1c362 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,7 +6,13 @@ spring.thymeleaf.suffix=.html spring.application.name=Bootstrap Spring Boot -spring.datasource.driver-class-name=org.h2.Driver -spring.datasource.url=jdbc:h2:mem:bootapp;DB_CLOSE_DELAY=-1 -spring.datasource.username=sa -spring.datasource.password= \ No newline at end of file + +## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) +spring.datasource.url = jdbc:mysql://localhost:3306/library +spring.datasource.username =root +spring.datasource.password =root +## Hibernate Properties +# The SQL dialect makes Hibernate generate better SQL for the chosen database +spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect +# Hibernate ddl auto (create, create-drop, validate, update) +spring.jpa.hibernate.ddl-auto = update \ No newline at end of file diff --git a/src/main/resources/database.sql b/src/main/resources/database.sql new file mode 100644 index 0000000000000000000000000000000000000000..850223c24c4140dbc65bd62135d51d684703d681 --- /dev/null +++ b/src/main/resources/database.sql @@ -0,0 +1,13 @@ +DROP TABLE IF EXISTS billionaires; + +CREATE TABLE billionaires ( + id INT AUTO_INCREMENT PRIMARY KEY, + first_name VARCHAR(250) NOT NULL, + last_name VARCHAR(250) NOT NULL, + career VARCHAR(250) DEFAULT NULL +); + +INSERT INTO billionaires (first_name, last_name, career) VALUES + ('Aliko', 'Dangote', 'Billionaire Industrialist'), + ('Bill', 'Gates', 'Billionaire Tech Entrepreneur'), + ('Folrunsho', 'Alakija', 'Billionaire Oil Magnate'); \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 4c289ef2dfe98e45af3212511feb1cb2ff45a861..a1d5307123009f54243632478e9a7572e9bccb35 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -7,10 +7,11 @@ </head> <body> <div layout:fragment="content" th:remove="tag"> - <h1>Hello Spring Security</h1> - <p>This is an unsecured page, but you can access the secured pages after authenticating.</p> + <h1>Click the link below to login</h1> + <p></p> + <br> <ul> - <li>Go to the <a href="/" th:href="@{/}">secured pages</a></li> + <li><a href="/login" th:href="@{/login}">link</a></li> </ul> </div> </body> diff --git a/src/test/java/com/example/bookmanagement/SpringBootBootstrapLiveTest.java b/src/test/java/com/example/bookmanagement/SpringBootBootstrapLiveTest.java new file mode 100644 index 0000000000000000000000000000000000000000..107c311dd81af91f2ea10ca687dc1fbf4509c19e --- /dev/null +++ b/src/test/java/com/example/bookmanagement/SpringBootBootstrapLiveTest.java @@ -0,0 +1,26 @@ +package com.example.bookmanagement; + +import javax.ws.rs.core.Response; + +import org.apache.tomcat.util.http.parser.MediaType; + +public class SpringBootBootstrapLiveTest { + + private static final String API_ROOT + = "http://localhost:8085/api/books"; + + private Book createRandomBook() { + Book book = new Book(); + book.setTitle(randomAlphabetic(10)); + book.setAuthor(randomAlphabetic(15)); + return book; + } + + private String createBookAsUri(Book book) { + Response response = RestAssured.given() + .contentType(MediaType.APPLICATION_JSON_VALUE) + .body(book) + .post(API_ROOT); + return API_ROOT + "/" + ((Object) response).jsonPath().get("id"); + } +}