From 8b14a236a2295a97b52c3229824a229f72a96d82 Mon Sep 17 00:00:00 2001 From: jon ander Date: Thu, 8 May 2025 17:00:32 +0200 Subject: [PATCH] Add Categoria and Departamento services and repositories; refactor UserService to implement GenericEntityService --- .../GestionInventario/DataInitializer.java | 17 +- .../controllers/UserController.java | 260 +++++++++++++----- .../entities/Departamento.java | 5 + .../GestionInventario/entities/Entidad.java | 12 + .../repos/CategoriaRepository.java | 10 + .../repos/DepartamentoRepository.java | 3 + .../repos/GenericEntityService.java | 11 + .../repos/UserRepository.java | 5 +- .../services/CategoriaService.java | 47 ++++ .../services/DepartamentoService.java | 22 +- .../services/UserService.java | 37 ++- src/main/resources/static/css/table_style.css | 2 +- src/main/resources/templates/userPage.html | 15 +- 13 files changed, 354 insertions(+), 92 deletions(-) create mode 100644 src/main/java/com/ieslamar/GestionInventario/entities/Entidad.java create mode 100644 src/main/java/com/ieslamar/GestionInventario/repos/CategoriaRepository.java create mode 100644 src/main/java/com/ieslamar/GestionInventario/repos/GenericEntityService.java create mode 100644 src/main/java/com/ieslamar/GestionInventario/services/CategoriaService.java diff --git a/src/main/java/com/ieslamar/GestionInventario/DataInitializer.java b/src/main/java/com/ieslamar/GestionInventario/DataInitializer.java index 661bc0c..83f0a2c 100644 --- a/src/main/java/com/ieslamar/GestionInventario/DataInitializer.java +++ b/src/main/java/com/ieslamar/GestionInventario/DataInitializer.java @@ -2,6 +2,7 @@ package com.ieslamar.GestionInventario; import com.ieslamar.GestionInventario.dto.BotonDTO; import com.ieslamar.GestionInventario.entities.Role; +import com.ieslamar.GestionInventario.services.CategoriaService; import com.ieslamar.GestionInventario.services.DepartamentoService; import com.ieslamar.GestionInventario.services.UserService; import org.springframework.boot.CommandLineRunner; @@ -11,14 +12,14 @@ import org.springframework.context.annotation.Configuration; @Configuration public class DataInitializer { - @Bean - public CommandLineRunner initData(UserService userService,DepartamentoService departamentoService) { - return args -> { +// @Bean +// public CommandLineRunner initData(UserService userService,DepartamentoService departamentoService) { +// return args -> { // userService.registerUser("Test","test123",Role.USER.name(),"test4@gmail.com",departamentoService.getDepartamentoById(1)); // userService.registerUser("admin", "admin123", Role.ADMIN.name(), "admin123@ejemplo.com",null); // userService.registerUser("user", "user123", Role.USER.name(), "user123@ejemplo.com",null); - }; - } +// }; +// } // @Bean // public CommandLineRunner initData(DepartamentoService departamentoService) { @@ -27,6 +28,12 @@ public class DataInitializer { // departamentoService.registerDepartamento("Ciencias"); // }; // } +// @Bean +// public CommandLineRunner initData(CategoriaService categoriaService) { +// return args -> { +// categoriaService.registerCategoria("Mueble"); +// }; +// } } diff --git a/src/main/java/com/ieslamar/GestionInventario/controllers/UserController.java b/src/main/java/com/ieslamar/GestionInventario/controllers/UserController.java index 4ded1f8..4898481 100644 --- a/src/main/java/com/ieslamar/GestionInventario/controllers/UserController.java +++ b/src/main/java/com/ieslamar/GestionInventario/controllers/UserController.java @@ -1,46 +1,50 @@ package com.ieslamar.GestionInventario.controllers; - import com.ieslamar.GestionInventario.dto.BotonDTO; -import com.ieslamar.GestionInventario.entities.Departamento; -import com.ieslamar.GestionInventario.entities.User; +import com.ieslamar.GestionInventario.entities.*; +import com.ieslamar.GestionInventario.repos.GenericEntityService; +import com.ieslamar.GestionInventario.services.CategoriaService; import com.ieslamar.GestionInventario.services.DepartamentoService; import com.ieslamar.GestionInventario.services.UserService; +import jakarta.persistence.Entity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import org.springframework.security.core.GrantedAuthority; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.*; -import java.util.ArrayList; - -import java.util.List; -import java.util.Map; @Controller public class UserController { + @Autowired + private ApplicationContext context; private final UserService userService; private final DepartamentoService departamentoService; + private final CategoriaService categoriaService; private static final Logger logger = LoggerFactory.getLogger(UserController.class); - public UserController(UserService userService, DepartamentoService departamentoService) { + public UserController(UserService userService, DepartamentoService departamentoService, CategoriaService categoriaService) { this.userService = userService; this.departamentoService = departamentoService; + this.categoriaService = categoriaService; } private final BotonDTO gestionUsuarios = new BotonDTO("Gestión de usuarios", "/user_list", true, null); +// private final BotonDTO gestionDepartamentosTest = new BotonDTO("Gestión de departamentos generica", "/list/" + Categoria.class.getSimpleName(), true, null); private final BotonDTO gestionProductos = new BotonDTO("Gestión de Productos", "/user_management", true, null); private final BotonDTO gestionDepartamentos = new BotonDTO("Gestión de Departamentos", "/departamento_list", true, null); private final BotonDTO gestionCategorias = new BotonDTO("Gestión de Categorías", "/user_management", true, null); private final BotonDTO gestionUbicaciones = new BotonDTO("Gestión de Ubicaciones", "/user_management", true, null); - private final BotonDTO gestionInventario = new BotonDTO("Gestión de Inventario", "/user_management", true, null); + private final BotonDTO gestionInventario = new BotonDTO("Gestión de Inventario", "/inventario", true, null); private final BotonDTO gestionTiposDatos = new BotonDTO("Gestión de Tipos de dato", "/user_management", true, null); private final BotonDTO inventario = new BotonDTO("Inventario", "/management", false, null); @@ -48,12 +52,12 @@ public class UserController { private final BotonDTO home = new BotonDTO("Salir", "/home", false, "button_salir"); - private List filtrarBotones(Authentication auth,List botones){ + private List filtrarBotones(Authentication auth, List botones) { List botones_response = new ArrayList<>(); List roles = auth.getAuthorities() - .stream() - .map(GrantedAuthority::getAuthority) - .toList(); + .stream() + .map(GrantedAuthority::getAuthority) + .toList(); if (roles.contains("ROLE_ADMIN")) { return botones; } @@ -73,7 +77,7 @@ public class UserController { @GetMapping("/home") public String homePage(Model model) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - List botones = filtrarBotones(auth,new ArrayList<>(List.of( + List botones = filtrarBotones(auth, new ArrayList<>(List.of( inventario, gestion ))); @@ -82,9 +86,9 @@ public class UserController { } @GetMapping("/management") - public String managementPage(Model model){ + public String managementPage(Model model) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - Listbotones = filtrarBotones(auth,new ArrayList<>(List.of( + List botones = filtrarBotones(auth, new ArrayList<>(List.of( gestionUsuarios, gestionProductos, gestionDepartamentos, @@ -93,6 +97,7 @@ public class UserController { gestionInventario, gestionCategorias, gestionTiposDatos, +// gestionDepartamentosTest, home ))); model.addAttribute("buttons", botones); @@ -100,58 +105,122 @@ public class UserController { } + //USERS-------------------------------------------------------------------------------------------------------- + @GetMapping("/userPage") public String userPage(Model model) { - model.addAttribute("departamentos",departamentoService.getAllDepartamentos()); + model.addAttribute("departamentos", departamentoService.getAllDepartamentos()); return "userPage"; // Retorna la vista register.html } - - @PostMapping("/userPage") - public String userPage(@RequestParam String username, - @RequestParam String password, - @RequestParam String role, - @RequestParam String mail, - @RequestParam(required = false) Integer iddepartamento - ) { - Departamento departamento = null; - if(iddepartamento != null) - departamento = departamentoService.getDepartamentoById(iddepartamento); +@PostMapping("/userPage") +public String userPage(@RequestParam(required = false) Long id, + @RequestParam String username, + @RequestParam String password, + @RequestParam String role, + @RequestParam String mail, + @RequestParam(required = false) Integer iddepartamento) { + Departamento departamento = iddepartamento != null ? departamentoService.getDepartamentoById(iddepartamento) : null; + if (id != null) { + // Editar usuario existente + User user = userService.getUserById(id); + if (user != null) { + user.setNombre(username); + if (!password.isEmpty()) { + user.setPassword(password); + } + user.setRole(Role.valueOf(role)); + user.setMail(mail); + user.setDepartamento(departamento); + userService.saveUser(user); + } + } else { + // Crear nuevo usuario userService.registerUser(username, password, role, mail, departamento); - return "redirect:/user_list"; // Redirige al login tras registrarse } - - - + return "redirect:/user_list"; +} @PostMapping("/delete_user") public String deleteUser(@RequestParam("id") Long id) { User user = userService.getUserById(id); userService.deleteUser(user); // Llama al servicio para eliminar el usuario return "redirect:/user_list"; // Redirige a la página de gestión de usuarios } - @GetMapping("/user_list") public String userList(Model model) { return buildUserList(model, userService.getAllUsers()); } - private String buildUserList(Model model, List users) { model.addAttribute("title", "Gestión de usuarios"); - model.addAttribute("headers", List.of("ID", "Nombre", "Rol", "Email","Departamento")); + model.addAttribute("headers", List.of("ID", "Nombre", "Rol", "Email", "Departamento")); model.addAttribute("items", users.stream() - .map(user -> Map.of( - "id", user.getId(), - "values", List.of( - user.getId(), - user.getNombre(), - user.getRole(), - user.getMail(), - user.getDepartamento() != null ? user.getDepartamento().getNombre() : " " - ) - )) - .toList()); + .map(user -> Map.of( + "id", user.getId(), + "values", List.of( + user.getId(), + user.getNombre(), + user.getRole(), + user.getMail(), + user.getDepartamento() != null ? user.getDepartamento().getNombre() : " " + ) + )) + .toList()); model.addAttribute("actionsUrl", Map.of( - "edit", "", - "delete", "/delete_user" + "edit", "/edit_user", + "delete", "/delete_user" + )); + model.addAttribute("backUrl", "/Inventario/home"); + model.addAttribute("addUrl", "/Inventario/userPage"); + + return "list"; + } + @GetMapping("/edit_user/{id}") + public String editUser(@PathVariable Long id, Model model) { + User user = userService.getUserById(id); + if (user != null) { + model.addAttribute("user", user); + model.addAttribute("departamentos", departamentoService.getAllDepartamentos()); + } + return "userPage"; // Redirige a la página de registro + } + + + //DEPARTAMENTOS-------------------------------------------------------------------------------------------------------- + + @GetMapping("/departamento_list") + public String genericPageDepartamento(Model model) { + model.addAttribute("title", "Gestión de Departamentos"); + model.addAttribute("headers", List.of("ID", "Nombre")); + model.addAttribute( + "items", + departamentoService.getAllDepartamentos().stream().map(departamento -> Map.of("id", departamento.getId(), + "values", List.of(departamento.getId(), departamento.getNombre()))).toList() + ); + model.addAttribute("actionsUrl", Map.of( + "edit", "", + "delete", "" + )); + model.addAttribute("backUrl", "/Inventario/home"); + model.addAttribute("addUrl", "/Inventario/"); + return "list"; + } + + //CATEGORIAS-------------------------------------------------------------------------------------------------------- + + private String buildCategoriaList(Model model, List categorias) { + model.addAttribute("title", "Gestión de categorías"); + model.addAttribute("headers", List.of("ID", "Nombre")); + model.addAttribute("items", categorias.stream() + .map(categoria -> Map.of( + "id", categoria.getId(), + "values", List.of( + categoria.getId(), + categoria.getNombre() + ) + )) + .toList()); + model.addAttribute("actionsUrl", Map.of( + "edit", "", + "delete", "/delete_user" )); model.addAttribute("backUrl", "/Inventario/home"); model.addAttribute("addUrl", "/Inventario/userPage"); @@ -160,27 +229,76 @@ public class UserController { } + //GENERICO-------------------------------------------------------------------------------------------------------- + /** + @GetMapping("/list/{tabla}") + public String tablaList(Model model, @PathVariable String entity) { + String serviceName = entity.toLowerCase() + "Service"; + Object serviceBean = context.getBean(serviceName); - - - - @GetMapping("/departamento_list") - public String genericPageDepartamento(Model model) { - model.addAttribute("title", "Gestión de Departamentos"); - model.addAttribute("headers", List.of("ID", "Nombre")); - model.addAttribute( - "items", - departamentoService.getAllDepartamentos().stream().map(departamento -> Map.of("id", departamento.getId(), - "values", List.of(departamento.getId(), departamento.getNombre()))).toList() - ); - model.addAttribute("actionsUrl", Map.of( - "edit", "", - "delete", "" - )); - model.addAttribute("backUrl", "/Inventario/home"); - model.addAttribute("addUrl", "/Inventario/"); - return "list"; + return ""; } + @GetMapping("/list/{entity}") + public String entityList(Model model, @PathVariable String entity) { + //construye el nombre del servicio de la entidad + String serviceName = entity.toLowerCase() + "Service"; + try { + //busca el servicio de la entidad + Object serviceBean = context.getBean(serviceName); + //si el Bean es una instancia de GenericEntityService + if (serviceBean instanceof GenericEntityService genericService) { + //genericService es un Servicio de los que hay, eso trae todas las instancias, entities sería por ejemplo user,categoria,etc + List entities = genericService.findAll(); + + List> items = entities.stream().map(e -> + Map.of( + "id", getId(e), + "values", genericService.getRowValues(e) + ) + ).toList(); + + model.addAttribute("title", "Gestión de " + entity); + model.addAttribute("headers", genericService.getHeaders()); + model.addAttribute("items", items); + model.addAttribute("actionsUrl", Map.of( + "edit", "", + "delete", "" // puedes personalizar por entidad + )); + model.addAttribute("backUrl", "/Inventario/home"); + model.addAttribute("addUrl", "/Inventario/"); + + return "list"; + } else { + throw new IllegalArgumentException("No es un GenericEntityService válido"); + } + + } catch (Exception e) { + model.addAttribute("error", "No se pudo cargar la entidad: " + entity); + return "error"; + } + } + + private Object getId(Object entity) { + try { + Method method = entity.getClass().getMethod("getId"); + return method.invoke(entity); + } catch (Exception e) { + return null; + } + } + **/ } + + + + + + + + + + + + diff --git a/src/main/java/com/ieslamar/GestionInventario/entities/Departamento.java b/src/main/java/com/ieslamar/GestionInventario/entities/Departamento.java index aa9a2f9..a0a770b 100644 --- a/src/main/java/com/ieslamar/GestionInventario/entities/Departamento.java +++ b/src/main/java/com/ieslamar/GestionInventario/entities/Departamento.java @@ -1,10 +1,14 @@ package com.ieslamar.GestionInventario.entities; +import com.ieslamar.GestionInventario.controllers.UserController; +import com.ieslamar.GestionInventario.services.DepartamentoService; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.springframework.orm.hibernate5.SpringSessionContext; +import org.springframework.stereotype.Repository; import java.util.List; @@ -28,4 +32,5 @@ public class Departamento { @OneToMany(mappedBy = "departamento") private List usuarios; + } diff --git a/src/main/java/com/ieslamar/GestionInventario/entities/Entidad.java b/src/main/java/com/ieslamar/GestionInventario/entities/Entidad.java new file mode 100644 index 0000000..40d05e0 --- /dev/null +++ b/src/main/java/com/ieslamar/GestionInventario/entities/Entidad.java @@ -0,0 +1,12 @@ +package com.ieslamar.GestionInventario.entities; + +import org.springframework.stereotype.Repository; +import org.springframework.stereotype.Service; + +import java.util.List; + +public abstract class Entidad { + + public abstract String getEntityName(); + public abstract List getEntityAttributes(); +} diff --git a/src/main/java/com/ieslamar/GestionInventario/repos/CategoriaRepository.java b/src/main/java/com/ieslamar/GestionInventario/repos/CategoriaRepository.java new file mode 100644 index 0000000..a551556 --- /dev/null +++ b/src/main/java/com/ieslamar/GestionInventario/repos/CategoriaRepository.java @@ -0,0 +1,10 @@ +package com.ieslamar.GestionInventario.repos; + +import com.ieslamar.GestionInventario.entities.Categoria; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface CategoriaRepository extends JpaRepository { + Categoria findByNombre(String nombre); +} diff --git a/src/main/java/com/ieslamar/GestionInventario/repos/DepartamentoRepository.java b/src/main/java/com/ieslamar/GestionInventario/repos/DepartamentoRepository.java index f8156b9..197ea57 100644 --- a/src/main/java/com/ieslamar/GestionInventario/repos/DepartamentoRepository.java +++ b/src/main/java/com/ieslamar/GestionInventario/repos/DepartamentoRepository.java @@ -1,8 +1,11 @@ package com.ieslamar.GestionInventario.repos; import com.ieslamar.GestionInventario.entities.Departamento; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +@Repository public interface DepartamentoRepository extends JpaRepository { } \ No newline at end of file diff --git a/src/main/java/com/ieslamar/GestionInventario/repos/GenericEntityService.java b/src/main/java/com/ieslamar/GestionInventario/repos/GenericEntityService.java new file mode 100644 index 0000000..27d0a80 --- /dev/null +++ b/src/main/java/com/ieslamar/GestionInventario/repos/GenericEntityService.java @@ -0,0 +1,11 @@ +package com.ieslamar.GestionInventario.repos; + +import com.ieslamar.GestionInventario.entities.User; + +import java.util.List; + +public interface GenericEntityService { + List findAll(); + List getHeaders(); + List getRowValues(T entity); +} diff --git a/src/main/java/com/ieslamar/GestionInventario/repos/UserRepository.java b/src/main/java/com/ieslamar/GestionInventario/repos/UserRepository.java index d4a5ea7..292259f 100644 --- a/src/main/java/com/ieslamar/GestionInventario/repos/UserRepository.java +++ b/src/main/java/com/ieslamar/GestionInventario/repos/UserRepository.java @@ -1,9 +1,12 @@ package com.ieslamar.GestionInventario.repos; import com.ieslamar.GestionInventario.entities.User; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.jpa.repository.JpaRepository; -import java.util.Optional; +import org.springframework.stereotype.Repository; +import java.util.Optional; +@Repository public interface UserRepository extends JpaRepository { Optional findByNombre(String username); } diff --git a/src/main/java/com/ieslamar/GestionInventario/services/CategoriaService.java b/src/main/java/com/ieslamar/GestionInventario/services/CategoriaService.java new file mode 100644 index 0000000..99dbe1a --- /dev/null +++ b/src/main/java/com/ieslamar/GestionInventario/services/CategoriaService.java @@ -0,0 +1,47 @@ +package com.ieslamar.GestionInventario.services; + +import com.ieslamar.GestionInventario.entities.Categoria; +import com.ieslamar.GestionInventario.repos.CategoriaRepository; +import com.ieslamar.GestionInventario.repos.GenericEntityService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class CategoriaService implements GenericEntityService { + private final CategoriaRepository categoriaRepository; + + public CategoriaService(CategoriaRepository categoriaRepository) { + this.categoriaRepository = categoriaRepository; + } + public List getAllCategorias() { + return categoriaRepository.findAll(); + } + public Categoria getCategoriaById(Integer id) { + return categoriaRepository.findById(id).orElse(null); + } + + public void registerCategoria(String nombre) { + Categoria categoria = new Categoria(); + categoria.setNombre(nombre); + categoriaRepository.save(categoria); + } + + @Override + public List findAll() { + return categoriaRepository.findAll(); + } + + @Override + public List getHeaders() { + return List.of("ID","Nombre"); + } + + @Override + public List getRowValues(Categoria categoria) { + return List.of( + categoria.getId(), + categoria.getNombre() + ); + } +} diff --git a/src/main/java/com/ieslamar/GestionInventario/services/DepartamentoService.java b/src/main/java/com/ieslamar/GestionInventario/services/DepartamentoService.java index 3b19859..bb7157c 100644 --- a/src/main/java/com/ieslamar/GestionInventario/services/DepartamentoService.java +++ b/src/main/java/com/ieslamar/GestionInventario/services/DepartamentoService.java @@ -3,12 +3,12 @@ package com.ieslamar.GestionInventario.services; import com.ieslamar.GestionInventario.entities.Departamento; import com.ieslamar.GestionInventario.entities.User; import com.ieslamar.GestionInventario.repos.DepartamentoRepository; -import com.ieslamar.GestionInventario.repos.UserRepository; +import com.ieslamar.GestionInventario.repos.GenericEntityService; import org.springframework.stereotype.Service; import java.util.List; @Service -public class DepartamentoService { +public class DepartamentoService implements GenericEntityService { private final DepartamentoRepository departamentoRepository; public DepartamentoService(DepartamentoRepository departamentoRepository) { @@ -26,4 +26,22 @@ public class DepartamentoService { departamento.setNombre(nombre); departamentoRepository.save(departamento); } + + @Override + public List findAll() { + return departamentoRepository.findAll(); + } + + @Override + public List getHeaders() { + return List.of("ID", "Nombre"); + } + + @Override + public List getRowValues(Departamento departamento) { + return List.of( + departamento.getId(), + departamento.getNombre() + ); + } } diff --git a/src/main/java/com/ieslamar/GestionInventario/services/UserService.java b/src/main/java/com/ieslamar/GestionInventario/services/UserService.java index 13131d6..58faaf8 100644 --- a/src/main/java/com/ieslamar/GestionInventario/services/UserService.java +++ b/src/main/java/com/ieslamar/GestionInventario/services/UserService.java @@ -3,19 +3,22 @@ package com.ieslamar.GestionInventario.services; import com.ieslamar.GestionInventario.entities.Departamento; import com.ieslamar.GestionInventario.entities.Role; import com.ieslamar.GestionInventario.entities.User; +import com.ieslamar.GestionInventario.repos.GenericEntityService; import com.ieslamar.GestionInventario.repos.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; import java.util.List; @Service -public class UserService { - private final UserRepository userRepository; +public class UserService implements GenericEntityService { + @Autowired + public UserRepository userRepository; private final PasswordEncoder passwordEncoder; public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder) { - this.userRepository = userRepository; this.passwordEncoder = passwordEncoder; } @@ -37,4 +40,32 @@ public class UserService { public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } + public List getAll() { + return userRepository.findAll(); + } + + @Override + public List findAll() { + return userRepository.findAll(); + } + + @Override + public List getHeaders() { + return List.of("ID", "Nombre", "Rol", "Email", "Departamento"); + } + + @Override + public List getRowValues(User user) { + return List.of( + user.getId(), + user.getNombre(), + user.getRole(), + user.getMail(), + user.getDepartamento() != null ? user.getDepartamento().getNombre() : " " + ); + } + + public void saveUser(User user) { + userRepository.save(user); + } } diff --git a/src/main/resources/static/css/table_style.css b/src/main/resources/static/css/table_style.css index 3206c60..845e166 100644 --- a/src/main/resources/static/css/table_style.css +++ b/src/main/resources/static/css/table_style.css @@ -18,7 +18,7 @@ body { align-items: center; } tr{ - text-align: left; + text-align: center; } tbody tr:hover { background-color: rgba(255, 255, 255, 0.3); diff --git a/src/main/resources/templates/userPage.html b/src/main/resources/templates/userPage.html index 1d0c224..70db327 100644 --- a/src/main/resources/templates/userPage.html +++ b/src/main/resources/templates/userPage.html @@ -12,21 +12,17 @@
- -
-
- - +
- +
@@ -35,7 +31,8 @@