diff --git a/oauth2/pom.xml b/oauth2/pom.xml index d7b5961..feba337 100644 --- a/oauth2/pom.xml +++ b/oauth2/pom.xml @@ -44,7 +44,7 @@ com.h2database h2 - + @@ -105,10 +105,14 @@ 4.1.1 test + + org.springframework.boot + spring-boot-starter-actuator + - jrmmba-usermodel + als-usermodel @@ -127,7 +131,7 @@ false - ${project.build.directory}/${project.build.finalName}.jar + ${project.build.directory}\${project.build.finalName}.jar ${java.version} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/SeedData.java b/oauth2/src/main/java/com/lambdaschool/usermodel/SeedData.java index 078798a..900e2b4 100755 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/SeedData.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/SeedData.java @@ -11,9 +11,20 @@ import com.lambdaschool.usermodel.services.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import javax.transaction.Transactional; import java.util.ArrayList; import java.util.Locale; @@ -42,74 +53,74 @@ public void run(String[] args) throws Exception // admin, data, user ArrayList admins = new ArrayList<>(); admins.add(new UserRoles(new User(), - r1)); + r1)); admins.add(new UserRoles(new User(), - r2)); + r2)); admins.add(new UserRoles(new User(), - r3)); + r3)); User u1 = new User("admin", - "password", - "admin@lambdaschool.local", - admins); + "password", + "admin@lambdaschool.local", + admins); u1.getUseremails() - .add(new Useremail(u1, - "admin@email.local")); + .add(new Useremail(u1, + "admin@email.local")); u1.getUseremails() - .add(new Useremail(u1, - "admin@mymail.local")); + .add(new Useremail(u1, + "admin@mymail.local")); userService.save(u1); // data, user ArrayList datas = new ArrayList<>(); datas.add(new UserRoles(new User(), - r3)); + r3)); datas.add(new UserRoles(new User(), - r2)); + r2)); User u2 = new User("cinnamon", - "1234567", - "cinnamon@lambdaschool.local", - datas); + "1234567", + "cinnamon@lambdaschool.local", + datas); u2.getUseremails() - .add(new Useremail(u2, - "cinnamon@mymail.local")); + .add(new Useremail(u2, + "cinnamon@mymail.local")); u2.getUseremails() - .add(new Useremail(u2, - "hops@mymail.local")); + .add(new Useremail(u2, + "hops@mymail.local")); u2.getUseremails() - .add(new Useremail(u2, - "bunny@email.local")); + .add(new Useremail(u2, + "bunny@email.local")); userService.save(u2); // user ArrayList users = new ArrayList<>(); users.add(new UserRoles(new User(), - r2)); + r2)); User u3 = new User("barnbarn", - "ILuvM4th!", - "barnbarn@lambdaschool.local", - users); + "ILuvM4th!", + "barnbarn@lambdaschool.local", + users); u3.getUseremails() - .add(new Useremail(u3, - "barnbarn@email.local")); + .add(new Useremail(u3, + "barnbarn@email.local")); userService.save(u3); users = new ArrayList<>(); users.add(new UserRoles(new User(), - r2)); + r2)); User u4 = new User("puttat", - "password", - "puttat@school.lambda", - users); + "password", + "puttat@school.lambda", + users); userService.save(u4); users = new ArrayList<>(); users.add(new UserRoles(new User(), - r2)); + r2)); User u5 = new User("misskitty", - "password", - "misskitty@school.lambda", - users); + "password", + "misskitty@school.lambda", + users); userService.save(u5); // using JavaFaker create a bunch of regular users @@ -117,7 +128,7 @@ public void run(String[] args) throws Exception // https://www.baeldung.com/regular-expressions-java FakeValuesService fakeValuesService = new FakeValuesService(new Locale("en-US"), - new RandomService()); + new RandomService()); Faker nameFaker = new Faker(new Locale("en-US")); for (int i = 0; i < 100; i++) @@ -127,16 +138,16 @@ public void run(String[] args) throws Exception users = new ArrayList<>(); users.add(new UserRoles(new User(), - r2)); + r2)); fakeUser = new User(nameFaker.name() - .username(), - "password", - nameFaker.internet() - .emailAddress(), - users); + .username(), + "password", + nameFaker.internet() + .emailAddress(), + users); fakeUser.getUseremails() .add(new Useremail(fakeUser, - fakeValuesService.bothify("????##@gmail.com"))); + fakeValuesService.bothify("????##@gmail.com"))); userService.save(fakeUser); } } diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/config/AuthorizationServerConfig.java b/oauth2/src/main/java/com/lambdaschool/usermodel/config/AuthorizationServerConfig.java index 67db946..c878ed1 100644 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/config/AuthorizationServerConfig.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/config/AuthorizationServerConfig.java @@ -10,6 +10,8 @@ import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; import org.springframework.security.oauth2.provider.token.TokenStore; +// TODO AUTH 1 + @Configuration @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/config/DataSourceConfig.java b/oauth2/src/main/java/com/lambdaschool/usermodel/config/DataSourceConfig.java index c6cd34a..f351266 100644 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/config/DataSourceConfig.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/config/DataSourceConfig.java @@ -1,5 +1,4 @@ package com.lambdaschool.usermodel.config; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -15,6 +14,8 @@ import javax.sql.DataSource; + +//TODO 8 db switch @Configuration public class DataSourceConfig { @@ -56,7 +57,7 @@ public DataSource dataSource() { logger.info("Manually shutting down system"); int exitCode = SpringApplication.exit(appContext, - (ExitCodeGenerator) () -> 1); + () -> 1); System.exit(exitCode); } @@ -75,11 +76,11 @@ public DataSource dataSource() logger.info("Database URL is " + myUrlString); return DataSourceBuilder.create() - .username(myDBUser) - .password(myDBPassword) - .url(myUrlString) - .driverClassName(myDriverClass) - .build(); + .username(myDBUser) + .password(myDBPassword) + .url(myUrlString) + .driverClassName(myDriverClass) + .build(); } @Bean(name = "jdbcCustom") diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/config/H2ServerConfiguration.java b/oauth2/src/main/java/com/lambdaschool/usermodel/config/H2ServerConfiguration.java index 17e48f3..69f9c9f 100644 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/config/H2ServerConfiguration.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/config/H2ServerConfiguration.java @@ -1,5 +1,6 @@ package com.lambdaschool.usermodel.config; + import org.h2.tools.Server; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/config/ResourceServerConfig.java b/oauth2/src/main/java/com/lambdaschool/usermodel/config/ResourceServerConfig.java index c86f3c2..3772881 100644 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/config/ResourceServerConfig.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/config/ResourceServerConfig.java @@ -7,6 +7,8 @@ import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer; import org.springframework.security.oauth2.provider.error.OAuth2AccessDeniedHandler; +//TODO AUTH 6 + @Configuration @EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/config/SecurityConfig.java b/oauth2/src/main/java/com/lambdaschool/usermodel/config/SecurityConfig.java index 99e0ec5..3fad2e6 100644 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/config/SecurityConfig.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/config/SecurityConfig.java @@ -16,11 +16,15 @@ import javax.annotation.Resource; + +//TODO AUTH 2 + @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { + @Resource(name = "securityUserService") private UserDetailsService userDetailsService; diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/AuthorController.java b/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/AuthorController.java new file mode 100644 index 0000000..604b54a --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/AuthorController.java @@ -0,0 +1,33 @@ +package com.lambdaschool.usermodel.controllers; + +import com.lambdaschool.usermodel.handlers.RestExceptionHandler; +import com.lambdaschool.usermodel.logging.Loggable; +import com.lambdaschool.usermodel.services.AuthorService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +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.RestController; + +import javax.servlet.http.HttpServletRequest; + +@RestController +@RequestMapping(value = "/authors") +@Loggable +public class AuthorController { + private static final Logger logger = LoggerFactory.getLogger(RestExceptionHandler.class); + @Autowired + private AuthorService authorService; + + // http://localhost:2021/authors/authors + @GetMapping(value = "/authors", produces = {"application/json"}) + public ResponseEntity listAllAuthors(HttpServletRequest request) + { + logger.trace(request.getMethod() + .toUpperCase() + " " + request.getRequestURI() + " accessed"); + return new ResponseEntity<>(authorService.findAll(), HttpStatus.OK); + } +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/BookController.java b/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/BookController.java new file mode 100644 index 0000000..8a27f87 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/BookController.java @@ -0,0 +1,53 @@ +package com.lambdaschool.usermodel.controllers; + +import com.lambdaschool.usermodel.models.Book; +import com.lambdaschool.usermodel.services.BookService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +@RestController +@RequestMapping(value = "/book") +public class BookController { + + @Autowired + private BookService bookService; + + private static final Logger logger = LoggerFactory.getLogger(BookController.class); + + // http://localhost:2021/book/books + @GetMapping(value = "/books", produces = "application/json") + ResponseEntity getBooks(){ + logger.info("books/books Accessed"); + List books = bookService.findAll(); + return new ResponseEntity<>(books, HttpStatus.OK); + } + + // http://localhost:2021/books/books/1 + @PutMapping(value = "/books/{id}", consumes = {"application/json"}) + public ResponseEntity updateBookById(HttpServletRequest request, @RequestBody Book book, @PathVariable long id) { + logger.info(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + bookService.update(id, book); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping(value = "/books/{bookid}/authors/{authorid}", consumes = {"application/json"}) + public ResponseEntity postBookAuthorById(HttpServletRequest request, @PathVariable long bookid, @PathVariable Book authorid) { + logger.info(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + bookService.update(bookid, authorid); + return new ResponseEntity(HttpStatus.CREATED); + } + + @DeleteMapping(value = "/books/{id}") + public ResponseEntity deleteBook(HttpServletRequest request, @PathVariable long id) { + logger.info(request.getMethod().toUpperCase() + " " + request.getRequestURI() + " accessed"); + bookService.delete(id); + return new ResponseEntity<>(HttpStatus.OK); + } +} \ No newline at end of file diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/LogoutController.java b/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/LogoutController.java index f2849ae..3f08014 100644 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/LogoutController.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/LogoutController.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; import javax.servlet.http.HttpServletRequest; - +//TODO AUTH 7 this is to logout @Loggable @Controller @Api(tags = {"LogoutEndpoint"}) diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/OpenController.java b/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/OpenController.java index d58c2c2..3131e63 100644 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/OpenController.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/controllers/OpenController.java @@ -25,6 +25,8 @@ import java.util.ArrayList; import java.util.List; + +// TODO CU 1 @Loggable @RestController @Api(tags = {"OpenEndpoint"}) @@ -80,7 +82,7 @@ public ResponseEntity addNewUser(HttpServletRequest httpServletRequest, newuser.setUsername(newminuser.getUsername()); newuser.setPassword(newminuser.getPassword()); newuser.setPrimaryemail(newminuser.getPrimaryemail()); - +//TODO CU 1a (auto defaults to user)(requires model UserMinimum) ArrayList newRoles = new ArrayList<>(); newRoles.add(new UserRoles(newuser, roleService.findByName("user"))); diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/models/Author.java b/oauth2/src/main/java/com/lambdaschool/usermodel/models/Author.java new file mode 100644 index 0000000..ad895c4 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/models/Author.java @@ -0,0 +1,72 @@ +package com.lambdaschool.usermodel.models; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.lambdaschool.usermodel.logging.Loggable; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Loggable +@Entity +@Table(name = "author") +public class Author extends Auditable{ + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long authorid; + private String fname; + private String lname; + + // @ManyToMany(mappedBy = "authors", cascade = CascadeType.ALL) + // @JsonIgnoreProperties(value = "authors") + // private List books = new ArrayList<>(); + + @OneToMany(mappedBy = "author", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonIgnoreProperties("author") + private List writer = new ArrayList<>(); + + public Author() {} + + public Author(String fname, String lname) { + this.fname = fname; + this.lname = lname; + } + + public long getBookid() { + return authorid; + } + + public void setBookid(long bookid) { + this.authorid = bookid; + } + + public String getFname() { + return fname; + } + + public void setFname(String fname) { + this.fname = fname; + } + + public String getLname() { + return lname; + } + + public List getWriter() { + return writer; + } + + public void setWriter(List writer) { + this.writer = writer; + } + + + + + public void setLname(String lname) { + this.lname = lname; + } + + +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/models/Book.java b/oauth2/src/main/java/com/lambdaschool/usermodel/models/Book.java new file mode 100644 index 0000000..6840761 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/models/Book.java @@ -0,0 +1,101 @@ +package com.lambdaschool.usermodel.models; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.lambdaschool.usermodel.logging.Loggable; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Loggable +@Entity +@Table(name = "book") +public class Book extends Auditable { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long bookid; + + private String title; + private String ISBN; + @Column(nullable = true) + private int copy; + + // @ManyToMany + // @JsonIgnoreProperties("books") + // private List authors = new ArrayList<>(); + + @ManyToOne + @JoinColumn(name = "sectionid") + @JsonIgnoreProperties("books") + private Section section; + + @OneToMany(mappedBy = "book", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonIgnoreProperties("book") + private List writers = new ArrayList<>(); + + + public Book(){} + + public Book(String title, String ISBN, int copy,Section section) { + this.title = title; + this.ISBN = ISBN; + this.copy = copy; + this.section = section; + } +// public List getAuthors() { +// return authors; +// } + +// public void setAuthors(List authors) { +// this.authors = authors; +// } + + public Section getSection() { + return section; + } + + public void setSection(Section section) { + this.section = section; + } + + public List getWriters() { + return writers; + } + + public void setWriters(List writers) { + this.writers = writers; + } + + public long getBookid() { + return bookid; + } + + public void setBookid(long bookid) { + this.bookid = bookid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getISBN() { + return ISBN; + } + + public void setISBN(String ISBN) { + this.ISBN = ISBN; + } + + public int getCopy() { + return this.copy; + } + + public void setCopy(int copy) { + this.copy = copy; + } +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/models/Section.java b/oauth2/src/main/java/com/lambdaschool/usermodel/models/Section.java new file mode 100644 index 0000000..97ff380 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/models/Section.java @@ -0,0 +1,53 @@ +package com.lambdaschool.usermodel.models; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "section") +public class Section extends Auditable { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long sectionid; + + @Column(nullable = false, unique = true) + private String name; + + @OneToMany(mappedBy = "section", cascade = CascadeType.ALL) + @JsonIgnoreProperties("section") + private List books = new ArrayList<>(); + + public Section() { + } + + public Section(String sectionname) { + this.name = sectionname; + } + + public long getSectionid() { + return sectionid; + } + + public void setSectionid(long sectionid) { + this.sectionid = sectionid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getBooks() { + return books; + } + + public void setBooks(List books) { + this.books = books; + } +} \ No newline at end of file diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/models/User.java b/oauth2/src/main/java/com/lambdaschool/usermodel/models/User.java index d79db41..d32d2e9 100644 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/models/User.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/models/User.java @@ -130,13 +130,13 @@ public String getPassword() { return password; } - +//TODO AUTH 5 ENCRYPT THE PASSWORD public void setPassword(String password) { BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); this.password = passwordEncoder.encode(password); } - +//TODO AUTH 6 NON ENCODED public void setPasswordNotEncrypt(String password) { this.password = password; @@ -162,6 +162,8 @@ public void setUseremails(List useremails) this.useremails = useremails; } + //TODO AUTH 4 SimpleGrantAuthority + @JsonIgnore public List getAuthority() { diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/models/UserMinimum.java b/oauth2/src/main/java/com/lambdaschool/usermodel/models/UserMinimum.java index 370d5d1..1c62804 100644 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/models/UserMinimum.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/models/UserMinimum.java @@ -2,6 +2,8 @@ import com.lambdaschool.usermodel.logging.Loggable; +//TODO CU 2 the model + @Loggable public class UserMinimum { diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/models/Wrote.java b/oauth2/src/main/java/com/lambdaschool/usermodel/models/Wrote.java new file mode 100644 index 0000000..d76bd40 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/models/Wrote.java @@ -0,0 +1,62 @@ +package com.lambdaschool.usermodel.models; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Objects; + +@Entity +@Table(name = "wrote") +public class Wrote extends Auditable implements Serializable { + @Id + @ManyToOne + @JoinColumn(name = "bookid") + @JsonIgnoreProperties("writers") + private Book book; + + @Id + @ManyToOne + @JoinColumn(name = "authorid") + @JsonIgnoreProperties("writers") + private Author author; + + public Wrote() { + } + + public Wrote(Book book, Author author) { + this.book = book; + this.author = author; + } + + public Book getBook() { + return book; + } + + public void setBook(Book book) { + this.book = book; + } + + public Author getAuthor() { + return author; + } + + public void setAuthor(Author author) { + this.author = author; + } + + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Wrote)) return false; + Wrote wrote = (Wrote) o; + return Objects.equals(getBook(), wrote.getBook()) && + Objects.equals(getAuthor(), wrote.getAuthor()); + } + + @Override + public int hashCode() { + return Objects.hash(getBook(), getAuthor()); + } +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/repository/AuthorRepo.java b/oauth2/src/main/java/com/lambdaschool/usermodel/repository/AuthorRepo.java new file mode 100644 index 0000000..a53dce4 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/repository/AuthorRepo.java @@ -0,0 +1,9 @@ +package com.lambdaschool.usermodel.repository; + +import com.lambdaschool.usermodel.models.Author; +import org.springframework.data.repository.CrudRepository; + +public interface AuthorRepo extends CrudRepository { + + +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/repository/BookRepo.java b/oauth2/src/main/java/com/lambdaschool/usermodel/repository/BookRepo.java new file mode 100644 index 0000000..2d54c83 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/repository/BookRepo.java @@ -0,0 +1,7 @@ +package com.lambdaschool.usermodel.repository; + +import com.lambdaschool.usermodel.models.Book; +import org.springframework.data.repository.CrudRepository; + +public interface BookRepo extends CrudRepository { +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/repository/SectionRepo.java b/oauth2/src/main/java/com/lambdaschool/usermodel/repository/SectionRepo.java new file mode 100644 index 0000000..5be32a5 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/repository/SectionRepo.java @@ -0,0 +1,9 @@ +package com.lambdaschool.usermodel.repository; + +import com.lambdaschool.usermodel.models.Section; +import org.springframework.data.repository.CrudRepository; + +public interface SectionRepo extends CrudRepository { + Section findByNameIgnoreCase(String name); + +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/services/AuthorService.java b/oauth2/src/main/java/com/lambdaschool/usermodel/services/AuthorService.java new file mode 100644 index 0000000..40def41 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/services/AuthorService.java @@ -0,0 +1,17 @@ +package com.lambdaschool.usermodel.services; + +import com.lambdaschool.usermodel.models.Author; + +import java.util.List; + +public interface AuthorService { + List findAll(); + + Author findAuthorById(long id); + + void delete(long id); + + Author save(Author author); + + Author update(long id, Author author); +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/services/AuthorServiceImpl.java b/oauth2/src/main/java/com/lambdaschool/usermodel/services/AuthorServiceImpl.java new file mode 100644 index 0000000..305aecd --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/services/AuthorServiceImpl.java @@ -0,0 +1,62 @@ +package com.lambdaschool.usermodel.services; + +import com.lambdaschool.usermodel.exceptions.ResourceNotFoundException; +import com.lambdaschool.usermodel.logging.Loggable; +import com.lambdaschool.usermodel.models.Author; +import com.lambdaschool.usermodel.repository.AuthorRepo; +import com.lambdaschool.usermodel.repository.BookRepo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Loggable +@Service(value = "authorService") +public class AuthorServiceImpl implements AuthorService { + + + @Autowired + AuthorRepo authorRepo; + @Autowired + BookRepo bookRepo; + + @Override + public List findAll() { + List list = new ArrayList<>(); + authorRepo.findAll().iterator().forEachRemaining(list::add); + return list; + } + + @Override + public Author findAuthorById(long id) { + return authorRepo.findById(id).orElseThrow( () -> new ResourceNotFoundException("could not find an author")); + } + + @Override + public void delete(long id) { + authorRepo.findById(id).orElseThrow(() -> new ResourceNotFoundException("nothing to delete")); + authorRepo.deleteById(id); + } + + + @Override + public Author save(Author author) { + Author newAuthor = new Author(); + newAuthor.setFname(author.getFname()); + newAuthor.setLname(author.getLname()); + if (author.getWriter().size() > 0) throw new ResourceNotFoundException("no author found"); + return authorRepo.save(author); + } + + @Override + public Author update(long id, Author author) { + Author currentAuthor = findAuthorById(id); + currentAuthor.setFname(author.getFname()); + currentAuthor.setLname(author.getLname()); + if (author.getWriter().size() > 0) throw new ResourceNotFoundException("no author found"); + return authorRepo.save(author); + } +} + + diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/services/BookService.java b/oauth2/src/main/java/com/lambdaschool/usermodel/services/BookService.java new file mode 100644 index 0000000..fb09d84 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/services/BookService.java @@ -0,0 +1,19 @@ +package com.lambdaschool.usermodel.services; + +import com.lambdaschool.usermodel.models.Book; + +import java.util.List; + +public interface BookService { + + List findAll(); + + Book findBookById(long id); + + void delete(long id); + + Book save(Book book); + + Book update(long id, Book book); + +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/services/BookServiceImpl.java b/oauth2/src/main/java/com/lambdaschool/usermodel/services/BookServiceImpl.java new file mode 100644 index 0000000..bdc9055 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/services/BookServiceImpl.java @@ -0,0 +1,63 @@ +package com.lambdaschool.usermodel.services; + +import com.lambdaschool.usermodel.exceptions.ResourceNotFoundException; +import com.lambdaschool.usermodel.models.Book; +import com.lambdaschool.usermodel.repository.AuthorRepo; +import com.lambdaschool.usermodel.repository.BookRepo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +@Service(value = "bookService") +public class BookServiceImpl implements BookService { + + @Autowired + private BookRepo bookRepo; + @Autowired + private AuthorRepo authorRepo; + + @Override + public List findAll() { + List list = new ArrayList<>(); + bookRepo.findAll().iterator().forEachRemaining(list::add); + return list; + } + + @Override + public Book findBookById(long id) { + return bookRepo.findById(id).orElseThrow(()-> new ResourceNotFoundException("nothing to find by that id")); + + } + + @Override + public void delete(long id) { + bookRepo.findById(id).orElseThrow(() -> new ResourceNotFoundException("nothing to delete")); + bookRepo.deleteById(id); + } + + @Override + public Book save(Book book) { + Book newBook = new Book(); + newBook.setTitle(book.getTitle()); + newBook.setISBN(book.getISBN()); + newBook.setCopy(book.getCopy()); + return bookRepo.save(book); + } + + @Override + public Book update(long id, Book book) { + Book currentBook = findBookById(id); + if (book.getTitle() != null) { + currentBook.setTitle(book.getTitle()); + } + if (book.getISBN() != null) { + currentBook.setISBN(book.getISBN()); + } + + currentBook.getCopy(); + + return bookRepo.save(book); + } + +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/services/SectionService.java b/oauth2/src/main/java/com/lambdaschool/usermodel/services/SectionService.java new file mode 100644 index 0000000..48d264b --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/services/SectionService.java @@ -0,0 +1,21 @@ +package com.lambdaschool.usermodel.services; + +import com.lambdaschool.usermodel.models.Section; + +import java.util.List; + +public interface SectionService +{ + List
findAll(); + + Section findSectionById(long id); + + void delete(long id); + + Section save(Section section); + + Section findByName(String name); + + Section update(long id, + Section section); +} diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/services/SectionServiceImpl.java b/oauth2/src/main/java/com/lambdaschool/usermodel/services/SectionServiceImpl.java new file mode 100644 index 0000000..199fdb9 --- /dev/null +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/services/SectionServiceImpl.java @@ -0,0 +1,97 @@ +package com.lambdaschool.usermodel.services; + +import com.lambdaschool.usermodel.exceptions.ResourceFoundException; +import com.lambdaschool.usermodel.exceptions.ResourceNotFoundException; +import com.lambdaschool.usermodel.logging.Loggable; +import com.lambdaschool.usermodel.models.Section; +import com.lambdaschool.usermodel.repository.AuthorRepo; +import com.lambdaschool.usermodel.repository.SectionRepo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +@Loggable +@Service(value = "sectionService") +public class SectionServiceImpl implements SectionService +{ + @Autowired + SectionRepo sectionRepo; + + @Autowired + AuthorRepo authorRepo; + + @Autowired + UserAuditing userAuditing; + + @Override + public List
findAll() + { + List
list = new ArrayList<>(); + sectionRepo.findAll() + .iterator() + .forEachRemaining(list::add); + return list; + } + + + @Override + public Section findSectionById(long id) + { + return sectionRepo.findById(id) + .orElseThrow(() -> new ResourceNotFoundException("Section id " + id + " not found!")); + } + + @Override + public Section findByName(String name) + { + Section rr = sectionRepo.findByNameIgnoreCase(name); + + if (rr != null) + { + return rr; + } else + { + throw new ResourceNotFoundException(name); + } + } + + @Transactional + @Override + public void delete(long id) + { + sectionRepo.findById(id) + .orElseThrow(() -> new ResourceNotFoundException("Sction id " + id + " not found!")); + sectionRepo.deleteById(id); + } + + + @Transactional + @Override + public Section update(long id, + Section section) { + if (section.getName() == null) { + throw new ResourceNotFoundException("No section name found to update!"); + } + return section; + } + + + @Transactional + @Override + public Section save(Section section) + { + Section newSection = new Section(); + newSection.setName(section.getName()); + if (section.getBooks() + .size() > 0) + { + throw new ResourceFoundException("User Roles are not updated through Role. See endpoint POST: users/user/{userid}/role/{roleid}"); + } + + return sectionRepo.save(section); + } +} + diff --git a/oauth2/src/main/java/com/lambdaschool/usermodel/services/SecurityUserServiceImpl.java b/oauth2/src/main/java/com/lambdaschool/usermodel/services/SecurityUserServiceImpl.java index 7dae64d..e5cad28 100644 --- a/oauth2/src/main/java/com/lambdaschool/usermodel/services/SecurityUserServiceImpl.java +++ b/oauth2/src/main/java/com/lambdaschool/usermodel/services/SecurityUserServiceImpl.java @@ -10,6 +10,8 @@ import javax.transaction.Transactional; +// TODO AUTH 3 (helps logining in) + @Service(value = "securityUserService") public class SecurityUserServiceImpl implements UserDetailsService { diff --git a/oauth2/src/main/resources/application.properties b/oauth2/src/main/resources/application.properties index e96fd61..6b8a1ac 100644 --- a/oauth2/src/main/resources/application.properties +++ b/oauth2/src/main/resources/application.properties @@ -2,8 +2,8 @@ # for a list of application.properties # Environment Variables Needed for PostgreSQL database # Which db to run -local.run.db=H2 -# local.run.db=POSTGRESQL +#local.run.db=H2 +local.run.db=POSTGRESQL # MYDBHOST # MYDBNAME # MYDBUSER @@ -15,9 +15,10 @@ local.run.db=H2 # heroku config -a jrmmba-oauthmin # postgres://rrwzjxlkniayov:83e8dc9dc5a3c3a30e40dde8fb62941da11030b3953709f5c8f808690e776c71@ec2-54-243-241-62.compute-1.amazonaws.com:5432/d7bl8dlv2l83jj # postgres://bzhxqmxdgwigkw:611e5353ffd763b09aed8fad07d243e9bbf44e13f8f542330e3b862a1df47c92@ec2-54-221-243-211.compute-1.amazonaws.com:5432/d1blvk8nmshe0v -# postgres://cdtpdlmrduoyqv:4958b9a3ba0533fa4fae763ac284bea71ea29f6955b9e36896740bed23289175@ec2-23-21-94-99.compute-1.amazonaws.com:5432/d37hecggdrqi5s -# posgress://username :password @url host :5432/dbname -server.port=${PORT:2019} +# postgres://bgqdsfkwiafiqv:237e3deefb862a3a27a60419c9feb82015e7e4bd8d256f4b4bfd21a18a01a97e@ec2-107-21-98-89.compute-1.amazonaws.com:5432/d4mg9mi2871qnl\ +# posgress://username :password @url host :5432/dbname +server.port=${PORT:2021} +# Begin h2 configuration # Begin h2 configuration spring.h2.console.enabled=true spring.h2.console.path=/h2-console @@ -42,5 +43,9 @@ spring.jpa.open-in-view=true # Shows the generated and custom SQL but does hurt performance and the logs get full fast spring.jpa.show-sql=false spring.jpa.properties.hibernate.format_sql=false -# Turns off Spring Boot automatic exception handling -server.error.whitelabel.enabled=false +# Turns off Spring Boot automatic excepti + +management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=always + +spring.data.web.pageable.one-indexed-parameters=true diff --git a/oauth2/src/main/resources/data.sql b/oauth2/src/main/resources/data.sql new file mode 100644 index 0000000..5bba40f --- /dev/null +++ b/oauth2/src/main/resources/data.sql @@ -0,0 +1,29 @@ + +INSERT INTO section (sectionid, name, created_by, created_date, last_modified_by, last_modified_date) VALUES (1, 'Fiction', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO section (sectionid, name, created_by, created_date, last_modified_by, last_modified_date) VALUES (2, 'Technology', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO section (sectionid, name, created_by, created_date, last_modified_by, last_modified_date) VALUES (3, 'Travel', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO section (sectionid, name, created_by, created_date, last_modified_by, last_modified_date) VALUES (4, 'Business', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO section (sectionid, name, created_by, created_date, last_modified_by, last_modified_date) VALUES (5, 'Religion', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); + +INSERT INTO author (authorid, fname, lname, created_by, created_date, last_modified_by, last_modified_date) VALUES (1, 'John', 'Mitchell', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO author (authorid, fname, lname, created_by, created_date, last_modified_by, last_modified_date) VALUES (2, 'Dan', 'Brown', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO author (authorid, fname, lname, created_by, created_date, last_modified_by, last_modified_date) VALUES (3, 'Jerry', 'Poe', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO author (authorid, fname, lname, created_by, created_date, last_modified_by, last_modified_date) VALUES (4, 'Wells', 'Teague', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO author (authorid, fname, lname, created_by, created_date, last_modified_by, last_modified_date) VALUES (5, 'George', 'Gallinger', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO author (authorid, fname, lname, created_by, created_date, last_modified_by, last_modified_date) VALUES (6, 'Ian', 'Stewart', 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); + +INSERT INTO book (bookid, title, ISBN, copy, sectionid, created_by, created_date, last_modified_by, last_modified_date) VALUES (1, 'Flatterland', '9780738206752', 2001, 1, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO book (bookid, title, ISBN, copy, sectionid, created_by, created_date, last_modified_by, last_modified_date) VALUES (2, 'Digital Fortess', '9788489367012', 2007, 1, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO book (bookid, title, ISBN, copy, sectionid, created_by, created_date, last_modified_by, last_modified_date) VALUES (3, 'The Da Vinci Code', '9780307474278', 2009, 1, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO book (bookid, title, ISBN, copy, sectionid, created_by, created_date, last_modified_by, last_modified_date) VALUES (4, 'Essentials of Finance', '1314241651234', 0, 4, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO book (bookid, title, ISBN, copy, sectionid, created_by, created_date, last_modified_by, last_modified_date) VALUES (5, 'Calling Texas Home', '1885171382134', 2000, 3, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); + +INSERT INTO wrote (bookid, authorid, created_by, created_date, last_modified_by, last_modified_date) VALUES (1, 6, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO wrote (bookid, authorid, created_by, created_date, last_modified_by, last_modified_date) VALUES (2, 2, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO wrote (bookid, authorid, created_by, created_date, last_modified_by, last_modified_date) VALUES (3, 2, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO wrote (bookid, authorid, created_by, created_date, last_modified_by, last_modified_date) VALUES (4, 5, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO wrote (bookid, authorid, created_by, created_date, last_modified_by, last_modified_date) VALUES (4, 3, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); +INSERT INTO wrote (bookid, authorid, created_by, created_date, last_modified_by, last_modified_date) VALUES (5, 4, 'SYSTEM', CURRENT_TIMESTAMP, 'SYSTEM', CURRENT_TIMESTAMP); + +alter sequence hibernate_sequence restart with 25; + diff --git a/oauth2/src/main/resources/logback-spring.xml b/oauth2/src/main/resources/logback-spring.xml index df282be..e775e52 100644 --- a/oauth2/src/main/resources/logback-spring.xml +++ b/oauth2/src/main/resources/logback-spring.xml @@ -48,35 +48,35 @@ - + - + - + - + - + - + - + diff --git a/oauth2/src/test/java/com/lambdaschool/usermodel/SeedData.java b/oauth2/src/test/java/com/lambdaschool/usermodel/SeedData.java deleted file mode 100755 index 3dc6e13..0000000 --- a/oauth2/src/test/java/com/lambdaschool/usermodel/SeedData.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.lambdaschool.usermodel; - -import com.lambdaschool.usermodel.models.Role; -import com.lambdaschool.usermodel.models.User; -import com.lambdaschool.usermodel.models.UserRoles; -import com.lambdaschool.usermodel.models.Useremail; -import com.lambdaschool.usermodel.services.RoleService; -import com.lambdaschool.usermodel.services.UserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.CommandLineRunner; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; - -@Transactional -@Component -public class SeedData implements CommandLineRunner -{ - @Autowired - RoleService roleService; - - @Autowired - UserService userService; - - - @Override - public void run(String[] args) throws Exception - { - Role r1 = new Role("admin"); - Role r2 = new Role("user"); - Role r3 = new Role("data"); - - roleService.save(r1); - roleService.save(r2); - roleService.save(r3); - - // admin, data, user - ArrayList admins = new ArrayList<>(); - admins.add(new UserRoles(new User(), - r1)); - admins.add(new UserRoles(new User(), - r2)); - admins.add(new UserRoles(new User(), - r3)); - User u1 = new User("admin", - "ILuvM4th!", - "admin@lambdaschool.local", - admins); - u1.getUseremails() - .add(new Useremail(u1, - "admin@email.local")); - u1.getUseremails() - .add(new Useremail(u1, - "admin@mymail.local")); - u1 = userService.save(u1); - - // data, user - ArrayList datas = new ArrayList<>(); - datas.add(new UserRoles(new User(), - r3)); - datas.add(new UserRoles(new User(), - r2)); - User u2 = new User("cinnamon", - "1234567", - "cinnamon@lambdaschool.local", - datas); - u2.getUseremails() - .add(new Useremail(u2, - "cinnamon@mymail.local")); - u2.getUseremails() - .add(new Useremail(u2, - "hops@mymail.local")); - u2.getUseremails() - .add(new Useremail(u2, - "bunny@email.local")); - u2 = userService.save(u2); - - // user - ArrayList users = new ArrayList<>(); - users.add(new UserRoles(new User(), - r1)); - User u3 = new User("testbarn", - "ILuvM4th!", - "testbarn@school.lambda", - users); - u3.getUseremails() - .add(new Useremail(u3, - "barnbarn@email.local")); - u3 = userService.save(u3); - - users = new ArrayList<>(); - users.add(new UserRoles(new User(), - r2)); - User u4 = new User("testcat", - "password", - "testcat@school.lambda", - users); - u4 = userService.save(u4); - - users = new ArrayList<>(); - users.add(new UserRoles(new User(), - r2)); - User u5 = new User("testdog", - "password", - "testdog@school.lambda", - users); - u5 = userService.save(u5); - - System.out.println("\n*** Seed Data ***"); - System.out.println(u1); - System.out.println(u2); - System.out.println(u3); - System.out.println(u4); - System.out.println(u5); - System.out.println("*** Seed Data ***\n"); - } -} \ No newline at end of file diff --git a/oauth2/src/test/java/com/lambdaschool/usermodel/UserModelApplication.java b/oauth2/src/test/java/com/lambdaschool/usermodel/UserModelApplication.java deleted file mode 100644 index c10ea4d..0000000 --- a/oauth2/src/test/java/com/lambdaschool/usermodel/UserModelApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.lambdaschool.usermodel; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.ApplicationContext; -import org.springframework.web.servlet.DispatcherServlet; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -@EnableWebMvc -// @EnableJpaAuditing -@SpringBootApplication -public class UserModelApplication -{ - private static final Logger logger = LoggerFactory.getLogger(com.lambdaschool.usermodel.UserModelApplication.class); - - - public static void main(String[] args) - { - ApplicationContext ctx = SpringApplication.run(com.lambdaschool.usermodel.UserModelApplication.class, - args); - - DispatcherServlet dispatcherServlet = (DispatcherServlet) ctx.getBean("dispatcherServlet"); - dispatcherServlet.setThrowExceptionIfNoHandlerFound(true); - } - -} diff --git a/oauth2/src/test/java/com/lambdaschool/usermodel/controllers/AuthorControllerTest.java b/oauth2/src/test/java/com/lambdaschool/usermodel/controllers/AuthorControllerTest.java new file mode 100644 index 0000000..f5d9230 --- /dev/null +++ b/oauth2/src/test/java/com/lambdaschool/usermodel/controllers/AuthorControllerTest.java @@ -0,0 +1,12 @@ +package com.lambdaschool.usermodel.controllers; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class AuthorControllerTest { + + @Test + public void listAllAuthors() { + } +} \ No newline at end of file diff --git a/oauth2/src/test/java/com/lambdaschool/usermodel/controllers/BookControllerTest.java b/oauth2/src/test/java/com/lambdaschool/usermodel/controllers/BookControllerTest.java new file mode 100644 index 0000000..7e49a6d --- /dev/null +++ b/oauth2/src/test/java/com/lambdaschool/usermodel/controllers/BookControllerTest.java @@ -0,0 +1,28 @@ +package com.lambdaschool.usermodel.controllers; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class BookControllerTest { + + @Test + public void getBooks() { + } + + @Test + public void testGetBooks() { + } + + @Test + public void updateBookById() { + } + + @Test + public void postBookAuthorById() { + } + + @Test + public void deleteBook() { + } +} \ No newline at end of file diff --git a/oauth2/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplUnitTest.java b/oauth2/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplUnitTest.java deleted file mode 100644 index 77ac21c..0000000 --- a/oauth2/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplUnitTest.java +++ /dev/null @@ -1,336 +0,0 @@ -package com.lambdaschool.usermodel.services; - -import com.lambdaschool.usermodel.UserModelApplication; -import com.lambdaschool.usermodel.exceptions.ResourceFoundException; -import com.lambdaschool.usermodel.exceptions.ResourceNotFoundException; -import com.lambdaschool.usermodel.models.Role; -import com.lambdaschool.usermodel.models.User; -import com.lambdaschool.usermodel.models.UserRoles; -import com.lambdaschool.usermodel.models.Useremail; -import org.junit.After; -import org.junit.Before; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.MethodSorters; -import org.mockito.MockitoAnnotations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.data.domain.Pageable; -import org.springframework.security.test.context.support.WithUserDetails; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; - -import static junit.framework.TestCase.assertEquals; - -/** - * I am testing UserServiceImpl so want 100% in UserServiceImpl - */ - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = UserModelApplication.class) -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class UserServiceImplUnitTest -{ - @Autowired - private UserService userService; - - @Before - public void setUp() throws Exception - { - MockitoAnnotations.initMocks(this); - } - - @After - public void tearDown() throws Exception - { - } - - @Test - public void B_findUserById() - { - assertEquals("admin", - userService.findUserById(4) - .getUsername()); - } - - @Test(expected = ResourceNotFoundException.class) - public void BA_findUserByIdNotFound() - { - assertEquals("admin", - userService.findUserById(10) - .getUsername()); - } - - @Test - public void C_findAll() - { - assertEquals(5, - userService.findAll(Pageable.unpaged()) - .size()); - } - - @Test - public void D_delete() - { - userService.delete(13); - assertEquals(4, - userService.findAll(Pageable.unpaged()) - .size()); - } - - @Test(expected = ResourceNotFoundException.class) - public void DA_notFoundDelete() - { - userService.delete(100); - assertEquals(4, - userService.findAll(Pageable.unpaged()) - .size()); - } - - @Test - public void E_findByUsername() - { - assertEquals("admin", - userService.findByName("admin") - .getUsername()); - } - - @Test(expected = ResourceNotFoundException.class) - public void AA_findByUsernameNotfound() - { - assertEquals("admin", - userService.findByName("turtle") - .getUsername()); - } - - @Test - public void AB_findByNameContaining() - { - assertEquals(4, - userService.findByNameContaining("a", - Pageable.unpaged()) - .size()); - } - - @Test - public void F_save() - { - ArrayList datas = new ArrayList<>(); - User u2 = new User("tiger", - "ILuvMath!", - "tiger@school.lambda", - datas); - u2.getUseremails() - .add(new Useremail(u2, - "tiger@tiger.local")); - - User saveU2 = userService.save(u2); - - System.out.println("*** DATA ***"); - System.out.println(saveU2); - System.out.println("*** DATA ***"); - - assertEquals("tiger@tiger.local", - saveU2.getUseremails() - .get(0) - .getUseremail()); - } - - @Test(expected = ResourceFoundException.class) - public void FA_saveResourceFound() - { - ArrayList datas = new ArrayList<>(); - User u2 = new User("cinnamon", - "ILuvMath!", - "cinnamon@school.lambda", - datas); - u2.getUseremails() - .add(new Useremail(u2, - "tiger@tiger.local")); - - User saveU2 = userService.save(u2); - - System.out.println("*** DATA ***"); - System.out.println(saveU2); - System.out.println("*** DATA ***"); - - assertEquals("tiger@tiger.local", - saveU2.getUseremails() - .get(0) - .getUseremail()); - } - - @Transactional - @WithUserDetails("cinnamon") - @Test - public void G_update() - { - ArrayList datas = new ArrayList<>(); - User u2 = new User("cinnamon", - "password", - "cinnamon@school.lambda", - datas); - u2.getUseremails() - .add(new Useremail(u2, - "cinnamon@mymail.thump")); - u2.getUseremails() - .add(new Useremail(u2, - "hops@mymail.thump")); - u2.getUseremails() - .add(new Useremail(u2, - "bunny@email.thump")); - - User updatedu2 = userService.update(u2, - 7, - false); - - System.out.println("*** DATA ***"); - System.out.println(updatedu2); - System.out.println("*** DATA ***"); - - int checking = updatedu2.getUseremails() - .size() - 1; - assertEquals("bunny@email.thump", - updatedu2.getUseremails() - .get(checking) - .getUseremail()); - } - - @Transactional - @WithUserDetails("cinnamon") - @Test(expected = ResourceFoundException.class) - public void GA_updateWithUserRole() - { - Role r2 = new Role("user"); - - ArrayList datas = new ArrayList<>(); - User u2 = new User("cinnamon", - "password", - "cinnamon@school.lambda", - datas); - datas.add(new UserRoles(u2, - r2)); - u2.getUseremails() - .add(new Useremail(u2, - "cinnamon@mymail.thump")); - u2.getUseremails() - .add(new Useremail(u2, - "hops@mymail.thump")); - u2.getUseremails() - .add(new Useremail(u2, - "bunny@email.thump")); - - User updatedu2 = userService.update(u2, - 7, - false); - - System.out.println("*** DATA ***"); - System.out.println(updatedu2); - System.out.println("*** DATA ***"); - - int checking = updatedu2.getUseremails() - .size() - 1; - assertEquals("bunny@email.thump", - updatedu2.getUseremails() - .get(checking) - .getUseremail()); - } - - @Transactional - @WithUserDetails("cinnamon") - @Test(expected = ResourceNotFoundException.class) - public void GB_updateNotCurrentUserNorAdmin() - { - Role r2 = new Role("user"); - - ArrayList datas = new ArrayList<>(); - User u2 = new User("cinnamon", - "password", - "cinnamon@school.lambda", - datas); - u2.getUseremails() - .add(new Useremail(u2, - "cinnamon@mymail.thump")); - u2.getUseremails() - .add(new Useremail(u2, - "hops@mymail.thump")); - u2.getUseremails() - .add(new Useremail(u2, - "bunny@email.thump")); - - User updatedu2 = userService.update(u2, - 8, - false); - - System.out.println("*** DATA ***"); - System.out.println(updatedu2); - System.out.println("*** DATA ***"); - - int checking = updatedu2.getUseremails() - .size() - 1; - assertEquals("bunny@email.thump", - updatedu2.getUseremails() - .get(checking) - .getUseremail()); - } - - @Test(expected = ResourceNotFoundException.class) - public void H_deleteUserRoleComboNotFound() - { - // testing cinnamon and user roles - userService.deleteUserRole(11, - 2); - } - - @Test(expected = ResourceNotFoundException.class) - public void HA_deleteUserRoleRoleNotFound() - { - userService.deleteUserRole(7, - 50); - } - - @Test(expected = ResourceNotFoundException.class) - public void HB_deleteUserRoleUserNotFound() - { - userService.deleteUserRole(50, - 2); - } - - @Test(expected = ResourceFoundException.class) - public void IA_addUserRoleUserRoleFound() - { - userService.addUserRole(11, - 1); - } - - @Test - public void IB_deleteUserRole() - { - userService.deleteUserRole(11, - 1); - } - - @Test(expected = ResourceNotFoundException.class) - public void IC_addUserRoleRoleNotFound() - { - userService.addUserRole(7, - 50); - } - - @Test(expected = ResourceNotFoundException.class) - public void ID_addUserRoleUserNotFound() - { - userService.addUserRole(50, - 2); - } - - @Test - public void IE_addUserRole() - { - userService.addUserRole(11, - 2); - } -} \ No newline at end of file diff --git a/oauth2/src/test/resources/application.properties b/oauth2/src/test/resources/application.properties index 6953168..fcfb92c 100644 --- a/oauth2/src/test/resources/application.properties +++ b/oauth2/src/test/resources/application.properties @@ -19,17 +19,20 @@ local.run.db=H2 # posgress://username :password @url host :5432/dbname server.port=${PORT:2019} # Begin h2 configuration +# Begin h2 configuration spring.h2.console.enabled=true spring.h2.console.path=/h2-console spring.h2.console.settings.web-allow-others=true # End h2 configuration +# Should we use createBlob from java.sql.connection. PostgreSQL requires it to be true. +spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true # What do with the schema # drop n create table again, good for testing -# spring.jpa.hibernate.ddl-auto=create -# spring.datasource.initialization-mode=always +spring.jpa.hibernate.ddl-auto=create +spring.datasource.initialization-mode=always # Good for production! -spring.jpa.hibernate.ddl-auto=update -spring.datasource.initialization-mode=never +# spring.jpa.hibernate.ddl-auto=update +# spring.datasource.initialization-mode=never # Feature that determines what happens when no accessors are found for a type # (and there are no annotations to indicate it is meant to be serialized). spring.jackson.serialization.fail-on-empty-beans=false @@ -40,7 +43,5 @@ spring.jpa.open-in-view=true # Shows the generated and custom SQL but does hurt performance and the logs get full fast spring.jpa.show-sql=false spring.jpa.properties.hibernate.format_sql=false -# Turns off Spring Boot automatic exception handling -server.error.whitelabel.enabled=false -# Should we use createBlob from java.sql.connection. PostgreSQL requires it to be true. -spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true +# Turns off Spring Boot automatic excepti +