From 7ad0ee69877719814124fc0bf5425e824a4ad64b Mon Sep 17 00:00:00 2001 From: RonnieDipple Date: Mon, 11 Nov 2019 14:49:11 -0600 Subject: [PATCH] added initial added initial --- usermodel - initial/pom.xml | 3 - .../com/lambdaschool/usermodel/SeedData.java | 112 ++++++++++-------- .../usermodel/UserModelApplication.java | 2 + .../config/H2ServerConfiguration.java | 3 +- .../usermodel/controllers/UserController.java | 15 ++- .../controllers/UseremailController.java | 2 +- .../usermodel/models/Auditable.java | 32 +++++ .../lambdaschool/usermodel/models/Role.java | 22 +++- .../lambdaschool/usermodel/models/User.java | 37 +++--- .../usermodel/models/UserRoles.java | 69 +++++++++++ .../usermodel/models/Useremail.java | 4 +- .../usermodel/repository/RoleRepository.java | 12 ++ .../usermodel/repository/UserRepository.java | 6 + .../usermodel/services/UserAuditing.java | 18 +++ .../usermodel/services/UserService.java | 12 +- .../usermodel/services/UserServiceImpl.java | 50 ++++++++ .../usermodel/views/JustTheCount.java | 5 + .../usermodel/views/UserNameCountEmails.java | 6 + usermodel-final and pageable/.idea/.gitignore | 2 + .../.idea/compiler.xml | 18 +++ .../.idea/encodings.xml | 6 + usermodel-final and pageable/.idea/misc.xml | 14 +++ usermodel-final and pageable/.idea/vcs.xml | 6 + usermodel-initial/.idea/.gitignore | 5 + usermodel-initial/.idea/compiler.xml | 18 +++ usermodel-initial/.idea/dataSources.xml | 11 ++ usermodel-initial/.idea/encodings.xml | 6 + usermodel-initial/.idea/misc.xml | 14 +++ usermodel-initial/.idea/vcs.xml | 6 + 29 files changed, 437 insertions(+), 79 deletions(-) create mode 100644 usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Auditable.java create mode 100644 usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/UserRoles.java create mode 100644 usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserAuditing.java create mode 100644 usermodel - initial/src/main/java/com/lambdaschool/usermodel/views/JustTheCount.java create mode 100644 usermodel - initial/src/main/java/com/lambdaschool/usermodel/views/UserNameCountEmails.java create mode 100644 usermodel-final and pageable/.idea/.gitignore create mode 100644 usermodel-final and pageable/.idea/compiler.xml create mode 100644 usermodel-final and pageable/.idea/encodings.xml create mode 100644 usermodel-final and pageable/.idea/misc.xml create mode 100644 usermodel-final and pageable/.idea/vcs.xml create mode 100644 usermodel-initial/.idea/.gitignore create mode 100644 usermodel-initial/.idea/compiler.xml create mode 100644 usermodel-initial/.idea/dataSources.xml create mode 100644 usermodel-initial/.idea/encodings.xml create mode 100644 usermodel-initial/.idea/misc.xml create mode 100644 usermodel-initial/.idea/vcs.xml diff --git a/usermodel - initial/pom.xml b/usermodel - initial/pom.xml index 4c185e2..cf91d7a 100644 --- a/usermodel - initial/pom.xml +++ b/usermodel - initial/pom.xml @@ -57,9 +57,6 @@ - - jrmmba-starthere - org.springframework.boot diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/SeedData.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/SeedData.java index 3a0ec77..760c730 100755 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/SeedData.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/SeedData.java @@ -5,6 +5,7 @@ import com.github.javafaker.service.RandomService; 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; @@ -12,99 +13,114 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; - +import java.util.ArrayList; import java.util.Locale; - @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); - + r1 = roleService.save(r1); + r2 = roleService.save(r2); + r3 = 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", - "password", - "admin@lambdaschool.local"); + "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)); + datas.add(new UserRoles(new User(), + r2)); User u2 = new User("cinnamon", - "1234567", - "cinnamon@lambdaschool.local"); + "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); - + ArrayList users = new ArrayList<>(); + users.add(new UserRoles(new User(), + r2)); User u3 = new User("barnbarn", - "ILuvM4th!", - "barnbarn@lambdaschool.local"); + "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)); User u4 = new User("puttat", - "password", - "puttat@school.lambda"); + "password", + "puttat@school.lambda", + users); userService.save(u4); - + users = new ArrayList<>(); + users.add(new UserRoles(new User(), + r2)); User u5 = new User("misskitty", - "password", - "misskitty@school.lambda"); + "password", + "misskitty@school.lambda", + users); userService.save(u5); - // using JavaFaker create a bunch of regular users // https://www.baeldung.com/java-faker // 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++) { new User(); User fakeUser; - + users = new ArrayList<>(); + users.add(new UserRoles(new User(), + r2)); fakeUser = new User(nameFaker.name() - .username(), - "password", - nameFaker.internet() - .emailAddress()); + .username(), + "password", + nameFaker.internet() + .emailAddress(), + users); fakeUser.getUseremails() .add(new Useremail(fakeUser, - fakeValuesService.bothify("????##@gmail.com"))); + fakeValuesService.bothify("????##@gmail.com"))); userService.save(fakeUser); } } -} \ No newline at end of file +} diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/UserModelApplication.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/UserModelApplication.java index 42dee90..af2bd59 100644 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/UserModelApplication.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/UserModelApplication.java @@ -2,7 +2,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +@EnableJpaAuditing //Enables Auditabale @SpringBootApplication public class UserModelApplication { diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/config/H2ServerConfiguration.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/config/H2ServerConfiguration.java index bff0bc1..17e48f3 100644 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/config/H2ServerConfiguration.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/config/H2ServerConfiguration.java @@ -4,10 +4,11 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import java.sql.SQLException; -// @Configuration +@Configuration // taken from https://techdev.io/en/developer-blog/querying-the-embedded-h2-database-of-a-spring-boot-application // necessary for using the database tool built into intellij public class H2ServerConfiguration diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/controllers/UserController.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/controllers/UserController.java index 04be722..17a4453 100755 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/controllers/UserController.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/controllers/UserController.java @@ -172,8 +172,8 @@ public ResponseEntity deleteUserRoleByIds( @PathVariable long roleid) { - // userService.deleteUserRole(userid, - // roleid); + userService.deleteUserRole(userid, + roleid); return new ResponseEntity<>(HttpStatus.OK); } @@ -187,9 +187,16 @@ public ResponseEntity postUserRoleByIds( @PathVariable long roleid) { - // userService.addUserRole(userid, - // roleid); + userService.addUserRole(userid, + roleid); return new ResponseEntity<>(HttpStatus.CREATED); } + + //http://localhost:2019/users/user/email/count //gives list of user emails + @GetMapping(value = "/user/email/count", produces = {"application/json"}) + public ResponseEntity getNumUserEmails() + { + return new ResponseEntity<>(userService.getCountUserEmails(), HttpStatus.OK); + } } \ No newline at end of file diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/controllers/UseremailController.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/controllers/UseremailController.java index b798ef6..5fa4abd 100644 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/controllers/UseremailController.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/controllers/UseremailController.java @@ -75,5 +75,5 @@ public ResponseEntity updateUserEmail( return new ResponseEntity<>(HttpStatus.OK); } - // note emails are added through the user process + // note emails are added through the usercontroller process } diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Auditable.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Auditable.java new file mode 100644 index 0000000..8c96b02 --- /dev/null +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Auditable.java @@ -0,0 +1,32 @@ +package com.lambdaschool.usermodel.models; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import java.util.Date; + + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class)//runs in background when something happens it makes changes in background +abstract class Auditable +{ + @CreatedBy + protected String createdby; + @CreatedDate + @Temporal(TemporalType.TIMESTAMP)//adds time to date + protected Date createddate; + @LastModifiedBy + protected String lastmodifiedby; + @LastModifiedDate + @Temporal(TemporalType.TIMESTAMP) + protected Date lastmodifieddate; + +} diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Role.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Role.java index 1d99105..4887214 100644 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Role.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Role.java @@ -1,10 +1,15 @@ package com.lambdaschool.usermodel.models; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import org.hibernate.validator.constraints.EAN; + import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; @Entity @Table(name = "roles") -public class Role +public class Role extends Auditable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -14,6 +19,11 @@ public class Role unique = true) private String name; + @OneToMany(mappedBy = "role", + cascade = CascadeType.ALL) + @JsonIgnoreProperties("role") + private List userroles = new ArrayList<>(); + public Role() { } @@ -35,7 +45,7 @@ public void setRoleid(long roleid) public String getName() { - if (name == null) + if (name == null) // possible to not have a name when doing an update, so check is neccessary { return null; } else @@ -48,4 +58,12 @@ public void setName(String name) { this.name = name.toUpperCase(); } + + public List getUserroles() { + return userroles; + } + + public void setUserroles(List userroles) { + this.userroles = userroles; + } } diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/User.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/User.java index 5eacb08..ac51dd4 100644 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/User.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/User.java @@ -12,7 +12,7 @@ @Entity @Table(name = "users") -public class User +public class User extends Auditable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -23,14 +23,19 @@ public class User private String username; @Column(nullable = false) - @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)// Never write out a password in Json private String password; @Column(nullable = false, unique = true) - @Email + @Email//validation anotation makes sure email is in the correct format like @ in the address etc private String primaryemail; + @OneToMany(mappedBy = "user", + cascade = CascadeType.ALL) + @JsonIgnoreProperties("user") + private List userroles = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) @@ -43,23 +48,26 @@ public User() public User(String username, String password, - String primaryemail) + String primaryemail, + List userRoles) { setUsername(username); setPassword(password); this.primaryemail = primaryemail; + for (UserRoles ur : userRoles) + { + ur.setUser(this); + } + this.userroles = userRoles; } - public long getUserid() { return userid; } - public void setUserid(long userid) { this.userid = userid; } - public String getUsername() { if (username == null) // this is possible when updating a user @@ -70,12 +78,10 @@ public String getUsername() return username.toLowerCase(); } } - public void setUsername(String username) { this.username = username.toLowerCase(); } - public String getPrimaryemail() { if (primaryemail == null) // this is possible when updating a user @@ -86,29 +92,32 @@ public String getPrimaryemail() return primaryemail.toLowerCase(); } } - public void setPrimaryemail(String primaryemail) { this.primaryemail = primaryemail.toLowerCase(); } - public String getPassword() { return password; } - public void setPassword(String password) { this.password = password; } - public List getUseremails() { return useremails; } - public void setUseremails(List useremails) { this.useremails = useremails; } + public List getUserroles() + { + return userroles; + } + public void setUserroles(List userroles) + { + this.userroles = userroles; + } } diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/UserRoles.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/UserRoles.java new file mode 100644 index 0000000..74506a9 --- /dev/null +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/UserRoles.java @@ -0,0 +1,69 @@ +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 = "userroles", +uniqueConstraints = {@UniqueConstraint(columnNames = {"userid", "roleid"})}) +public class UserRoles extends Auditable implements Serializable { + + /////Combination id or complex primary key + @Id + @ManyToOne + @JoinColumn(name = "userid") + @JsonIgnoreProperties("userroles") + + private User user; + + @Id + @ManyToOne + @JoinColumn(name = "roleid") + @JsonIgnoreProperties("userroles") + private Role role; + + + //////////////////////////////////////////////////////////////// + + public UserRoles (){} + + public UserRoles(User user, Role role) { + this.user = user; + this.role = role; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public Role getRole() { + return role; + } + + public void setRole(Role role) { + this.role = role; + } +///////Must be done when implementing serializable + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof UserRoles)) return false; + UserRoles userRoles = (UserRoles) o; + return Objects.equals(getUser(), userRoles.getUser()) && + Objects.equals(getRole(), userRoles.getRole()); + } + + @Override + public int hashCode() { + return Objects.hash(getUser(), getRole()); + } + + ///////////////////////////////////////////////////////////// +} diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Useremail.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Useremail.java index f856b30..04ff106 100644 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Useremail.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/models/Useremail.java @@ -7,8 +7,8 @@ @Entity @Table(name = "useremails", - uniqueConstraints = {@UniqueConstraint(columnNames = {"userid", "useremail"})}) -public class Useremail + uniqueConstraints = {@UniqueConstraint(columnNames = {"userid", "useremail"})})//@UniqueConstraint makes sure the combination of userid and useremail are unique in the database +public class Useremail extends Auditable { @Id @GeneratedValue(strategy = GenerationType.AUTO) diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/repository/RoleRepository.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/repository/RoleRepository.java index dc3cac3..1a9da1a 100755 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/repository/RoleRepository.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/repository/RoleRepository.java @@ -1,9 +1,21 @@ package com.lambdaschool.usermodel.repository; import com.lambdaschool.usermodel.models.Role; +import com.lambdaschool.usermodel.views.JustTheCount; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; +import org.springframework.transaction.annotation.Transactional; public interface RoleRepository extends CrudRepository { Role findByNameIgnoreCase(String name); + + @Transactional + @Modifying + @Query(value = "SELECT COUNT(*) as count FROM userroles WHERE userid = :userid AND roleid = :roleid", + nativeQuery = true) + JustTheCount checkUserRolesCombo(long userid, + long roleid); + } diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/repository/UserRepository.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/repository/UserRepository.java index da952ba..3aabdc1 100755 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/repository/UserRepository.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/repository/UserRepository.java @@ -1,8 +1,11 @@ package com.lambdaschool.usermodel.repository; import com.lambdaschool.usermodel.models.User; +import com.lambdaschool.usermodel.views.UserNameCountEmails; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; +import java.util.ArrayList; import java.util.List; public interface UserRepository extends CrudRepository @@ -10,4 +13,7 @@ public interface UserRepository extends CrudRepository User findByUsername(String username); List findByUsernameContainingIgnoreCase(String name); + + @Query(value = "SELECT u.username as usernamerpt, count(ue.useremailid) as countemails FROM users u JOIN useremails ue ON u.userid = ue.userid GROUP BY u.username", nativeQuery = true) + ArrayList getCountUserEmails(); } diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserAuditing.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserAuditing.java new file mode 100644 index 0000000..9eb876c --- /dev/null +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserAuditing.java @@ -0,0 +1,18 @@ +package com.lambdaschool.usermodel.services; + +import org.springframework.data.domain.AuditorAware; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +@Component //turns it into a bean +public class UserAuditing implements AuditorAware +{ + + @Override + public Optional getCurrentAuditor() { + String uname; + uname = "SYSTEM"; + return Optional.of(uname) ; + } +} diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserService.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserService.java index 0394021..c47230f 100755 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserService.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserService.java @@ -1,7 +1,9 @@ package com.lambdaschool.usermodel.services; import com.lambdaschool.usermodel.models.User; +import com.lambdaschool.usermodel.views.UserNameCountEmails; +import java.util.ArrayList; import java.util.List; public interface UserService @@ -21,9 +23,11 @@ public interface UserService User update(User user, long id); - // void deleteUserRole(long userid, - // long roleid); + ArrayListgetCountUserEmails(); - // void addUserRole(long userid, - // long roleid); + void deleteUserRole(long userid, + long roleid); + + void addUserRole(long userid, + long roleid); } \ No newline at end of file diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserServiceImpl.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserServiceImpl.java index 0662b63..259a27f 100755 --- a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserServiceImpl.java +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/services/UserServiceImpl.java @@ -4,6 +4,7 @@ import com.lambdaschool.usermodel.models.Useremail; import com.lambdaschool.usermodel.repository.RoleRepository; import com.lambdaschool.usermodel.repository.UserRepository; +import com.lambdaschool.usermodel.views.UserNameCountEmails; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -129,4 +130,53 @@ public User update(User user, return userrepos.save(currentUser); } + + @Override + public List getCountUserEmails() + { + return userrepos.getCountUserEmails(); + } + + @Override + public void deleteUserRole(long userid, + long roleid) + { + userrepos.findById(userid) + .orElseThrow(() -> new EntityNotFoundException("User id " + userid + " not found!")); + rolerepos.findById(roleid) + .orElseThrow(() -> new EntityNotFoundException("Role id " + roleid + " not found!")); + + if (rolerepos.checkUserRolesCombo(userid, + roleid) + .getCount() > 0) + { + rolerepos.deleteUserRoles(userid, + roleid); + } else + { + throw new EntityNotFoundException("Role and User Combination Does Not Exists"); + } + } + + @Transactional + @Override + public void addUserRole(long userid, + long roleid) + { + userrepos.findById(userid) + .orElseThrow(() -> new EntityNotFoundException("User id " + userid + " not found!")); + rolerepos.findById(roleid) + .orElseThrow(() -> new EntityNotFoundException("Role id " + roleid + " not found!")); + + if (rolerepos.checkUserRolesCombo(userid, + roleid) + .getCount() <= 0) + { + rolerepos.insertUserRoles(userid, + roleid); + } else + { + throw new EntityNotFoundException("Role and User Combination Already Exists"); + } + } } diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/views/JustTheCount.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/views/JustTheCount.java new file mode 100644 index 0000000..b30c320 --- /dev/null +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/views/JustTheCount.java @@ -0,0 +1,5 @@ +package com.lambdaschool.usermodel.views; + +public interface JustTheCount { + int getCount(); +} diff --git a/usermodel - initial/src/main/java/com/lambdaschool/usermodel/views/UserNameCountEmails.java b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/views/UserNameCountEmails.java new file mode 100644 index 0000000..6aa71cd --- /dev/null +++ b/usermodel - initial/src/main/java/com/lambdaschool/usermodel/views/UserNameCountEmails.java @@ -0,0 +1,6 @@ +package com.lambdaschool.usermodel.views; + +public interface UserNameCountEmails { + String getUsernamerpt();//must be spelt exactly that way + int getCountEmails(); +} diff --git a/usermodel-final and pageable/.idea/.gitignore b/usermodel-final and pageable/.idea/.gitignore new file mode 100644 index 0000000..5c98b42 --- /dev/null +++ b/usermodel-final and pageable/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/usermodel-final and pageable/.idea/compiler.xml b/usermodel-final and pageable/.idea/compiler.xml new file mode 100644 index 0000000..5b50187 --- /dev/null +++ b/usermodel-final and pageable/.idea/compiler.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/usermodel-final and pageable/.idea/encodings.xml b/usermodel-final and pageable/.idea/encodings.xml new file mode 100644 index 0000000..8cff07b --- /dev/null +++ b/usermodel-final and pageable/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/usermodel-final and pageable/.idea/misc.xml b/usermodel-final and pageable/.idea/misc.xml new file mode 100644 index 0000000..9748532 --- /dev/null +++ b/usermodel-final and pageable/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/usermodel-final and pageable/.idea/vcs.xml b/usermodel-final and pageable/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/usermodel-final and pageable/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/usermodel-initial/.idea/.gitignore b/usermodel-initial/.idea/.gitignore new file mode 100644 index 0000000..5e41b2b --- /dev/null +++ b/usermodel-initial/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml \ No newline at end of file diff --git a/usermodel-initial/.idea/compiler.xml b/usermodel-initial/.idea/compiler.xml new file mode 100644 index 0000000..5b50187 --- /dev/null +++ b/usermodel-initial/.idea/compiler.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/usermodel-initial/.idea/dataSources.xml b/usermodel-initial/.idea/dataSources.xml new file mode 100644 index 0000000..d5e183a --- /dev/null +++ b/usermodel-initial/.idea/dataSources.xml @@ -0,0 +1,11 @@ + + + + + h2.unified + true + org.h2.Driver + jdbc:h2:tcp://localhost:9092/mem:testdb + + + \ No newline at end of file diff --git a/usermodel-initial/.idea/encodings.xml b/usermodel-initial/.idea/encodings.xml new file mode 100644 index 0000000..f33a8b6 --- /dev/null +++ b/usermodel-initial/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/usermodel-initial/.idea/misc.xml b/usermodel-initial/.idea/misc.xml new file mode 100644 index 0000000..faa73e8 --- /dev/null +++ b/usermodel-initial/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/usermodel-initial/.idea/vcs.xml b/usermodel-initial/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/usermodel-initial/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file