Commit fa0f6142 authored by Alex's avatar Alex

add showing and deleting users functional

parent 5fc4f4eb
......@@ -28,15 +28,20 @@
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.h2database</groupId>-->
<!-- <artifactId>h2</artifactId>-->
<!-- <scope>runtime</scope>-->
<!-- <groupId>mysql</groupId>-->
<!-- <artifactId>mysql-connector-java</artifactId>-->
<!-- <version>8.0.21</version>-->
<!-- </dependency>-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>0.7.5</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
......
package com.yagudza;
import org.modelmapper.ModelMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class UserRoleHandlerApplication {
......@@ -9,4 +11,9 @@ public class UserRoleHandlerApplication {
public static void main(String[] args) {
SpringApplication.run(UserRoleHandlerApplication.class, args);
}
@Bean
public ModelMapper modelMapper() {
return new ModelMapper();
}
}
package com.yagudza.controller;
import com.yagudza.dto.UserDto;
import com.yagudza.dto.UsersDto;
import com.yagudza.servise.UserService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/showUsers")
public ResponseEntity<Iterable<UsersDto>> showUsers() {
return ResponseEntity.ok(userService.findAll());
}
@GetMapping("/show/{login}")
public ResponseEntity<UserDto> showUserByLogin(@PathVariable("login") String login) {
return ResponseEntity.ok(userService.findById(login));
}
@DeleteMapping("/delete/{login}")
@ResponseStatus(HttpStatus.OK)
public void deleteUserByLogin(@PathVariable("login") String login) {
userService.deleteById(login);
}
}
package com.yagudza.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
public class Roles {
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
long id;
String name;
@ManyToMany (mappedBy = "roles", fetch = FetchType.LAZY)
Set<User> userSet = new HashSet<>();
public long getId() {
return id;
}
......
package com.yagudza.domain;
import javax.persistence.*;
import java.util.List;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
@Entity
public class Users {
public class User {
@Column(nullable = false)
private String name;
@Id
@Column(nullable = false)
private String login;
@Column(nullable = false)
private String password;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "user_roles",
@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinTable(name = "user_role",
uniqueConstraints = {@UniqueConstraint(columnNames = {"user_login", "role_id"})},
joinColumns = {@JoinColumn(name = "user_login", referencedColumnName = "login")}
, inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")
})
private List<Roles> roles;
private Set<Role> roles;
// = new HashSet<>();
public List<Roles> getRoles() {
public Set<Role> getRoles() {
return roles;
}
public void setRoles(List<Roles> roles) {
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
public String getName() {
return name;
}
......@@ -54,4 +58,30 @@ public class Users {
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", login='" + login + '\'' +
", password='" + password + '\'' +
", roles=" + roles +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(name, user.name) &&
Objects.equals(login, user.login) &&
Objects.equals(password, user.password)
&& Objects.equals(roles, user.roles);
}
@Override
public int hashCode() {
return Objects.hash(name, login, password, roles);
}
}
package com.yagudza.dto;
import com.yagudza.domain.Role;
import javax.persistence.*;
import java.util.Set;
public class UserDto {
private String name;
private String login;
private String password;
private Set<Role> roles;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
package com.yagudza.dto;
public class UsersDto {
private String name;
private String login;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.yagudza.exceptions;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class ControllerExceptionHandler {
private final String NO_USER = "There is no such user";
@ExceptionHandler (UserNotFoundException.class)
public ResponseEntity<String> userNotFound() {
return new ResponseEntity<>(NO_USER, new HttpHeaders(), HttpStatus.NO_CONTENT);
}
}
package com.yagudza.exceptions;
public class UserNotFoundException extends RuntimeException{
}
package com.yagudza.repository;
import com.yagudza.domain.Role;
import org.springframework.data.repository.CrudRepository;
public interface RoleRepository extends CrudRepository<Role, Long> {
}
package com.yagudza.repository;
import com.yagudza.domain.User;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import java.util.Optional;
public interface UserRepository extends CrudRepository<User, String> {
@Query(nativeQuery = true, value = "select u.login, u.name, u.password from User u ")
Iterable<User> findAll();
@Query(nativeQuery = true, value = "select u.login, u.name, u.password from User u where u.login = ?1")
Optional<User> findById(String var);
}
package com.yagudza.servise;
import org.springframework.stereotype.Service;
@Service
public interface RoleService {
}
package com.yagudza.servise;
public class RoleServiceImpl {
}
package com.yagudza.servise;
import com.yagudza.dto.UserDto;
import com.yagudza.dto.UsersDto;
import org.springframework.stereotype.Service;
import java.util.LinkedHashMap;
import java.util.LinkedList;
@Service
public interface UserService {
Iterable<UsersDto> findAll();
UserDto findById(String login);
void deleteById(String login);
}
package com.yagudza.servise;
import com.yagudza.domain.User;
import com.yagudza.dto.UserDto;
import com.yagudza.dto.UsersDto;
import com.yagudza.exceptions.UserNotFoundException;
import com.yagudza.repository.UserRepository;
import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Service;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
@Service
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
private final ModelMapper modelMapper;
public UserServiceImpl(UserRepository userRepository, ModelMapper modelMapper) {
this.userRepository = userRepository;
this.modelMapper = modelMapper;
}
@Override
public Iterable<UsersDto> findAll() {
Iterable<User> usersIterable = userRepository.findAll();
return StreamSupport.stream(usersIterable.spliterator(), false)
.map(user -> modelMapper.map(user, UsersDto.class))
.collect(Collectors.toList());
}
@Override
public UserDto findById(String login) {
Object user = userRepository.findById(login).orElseThrow(UserNotFoundException::new);
return modelMapper.map(user, UserDto.class);
}
@Override
public void deleteById(String login) {
if (!userRepository.existsById(login)) {
throw new UserNotFoundException();
}
userRepository.deleteById(login);
}
}
#spring.datasource.url=jdbc:h2:mem:testdb
#spring.datasource.driverClassName=org.h2.Driver
#spring.datasource.username=sa
#spring.datasource.password=
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.datasource.url=jdbc:mysql://localhost:3306/role?serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect
spring.datasource.username=root
spring.datasource.password=root
#spring.datasource.url=jdbc:mysql://localhost:3306/role?serverTimezone=UTC
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect
#spring.datasource.username=root
#spring.datasource.password=root
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true
\ No newline at end of file
INSERT INTO role (name) VALUES ('admin'),
('tester'),
('developer'),
('boss');
INSERT INTO user(login, name, password)
VALUES ('login 1', 'name 1', 'password 1'),
('login 2', 'name 2', 'password 2'),
('login 3', 'name 3', 'password 3');
INSERT INTO user_role(user_login, role_id)
VALUES ('login 1', 1),
('login 1', 3),
('login 3', 2);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment