From 6811ef178128760ed900ebe9c62c0914163388dc Mon Sep 17 00:00:00 2001
From: migudel <miguel.moras@estudiantes.uva.es>
Date: Wed, 27 Nov 2024 18:47:21 +0100
Subject: [PATCH] =?UTF-8?q?Integraci=C3=B3n=20de=20servicios=20correcta?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../auth => config}/SecurityConfig.java       |  5 +-
 .../JwtAuthenticationFilter.java              |  2 +-
 .../services/auth/AuthController.java         | 47 -------------
 .../monolith/services/auth/LoginRequest.java  | 23 -------
 .../services/bookings/models/Booking.java     | 10 +--
 .../bookings/services/BookingService.java     | 23 +++----
 .../services/hotels/models/Hotel.java         |  3 -
 .../monolith/services/hotels/models/Room.java |  9 ++-
 .../services/hotels/models/RoomType.java      |  7 ++
 .../users/controllers/UserService.java        | 36 ----------
 .../monolith/services/users/models/Tipo.java  |  7 --
 .../services/users/services/UserService.java  | 26 ++++----
 .../com/uva/authentication/api/UserAPI.java   | 11 ++--
 .../controllers/AuthController.java           |  2 -
 .../authentication/services/AuthService.java  | 66 ++++++++++---------
 .../com/uva/authentication/utils/JwtUtil.java |  2 -
 16 files changed, 86 insertions(+), 193 deletions(-)
 rename java/roomBooking/src/main/java/com/uva/monolith/{services/auth => config}/SecurityConfig.java (92%)
 rename java/roomBooking/src/main/java/com/uva/monolith/{services/auth => filter}/JwtAuthenticationFilter.java (99%)
 delete mode 100644 java/roomBooking/src/main/java/com/uva/monolith/services/auth/AuthController.java
 delete mode 100644 java/roomBooking/src/main/java/com/uva/monolith/services/auth/LoginRequest.java
 create mode 100644 java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/RoomType.java
 delete mode 100644 java/roomBooking/src/main/java/com/uva/monolith/services/users/controllers/UserService.java
 delete mode 100644 java/roomBooking/src/main/java/com/uva/monolith/services/users/models/Tipo.java

diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/auth/SecurityConfig.java b/java/roomBooking/src/main/java/com/uva/monolith/config/SecurityConfig.java
similarity index 92%
rename from java/roomBooking/src/main/java/com/uva/monolith/services/auth/SecurityConfig.java
rename to java/roomBooking/src/main/java/com/uva/monolith/config/SecurityConfig.java
index e115ffb..75a4664 100644
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/auth/SecurityConfig.java
+++ b/java/roomBooking/src/main/java/com/uva/monolith/config/SecurityConfig.java
@@ -1,4 +1,4 @@
-package com.uva.monolith.services.auth;
+package com.uva.monolith.config;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -7,6 +7,7 @@ import org.springframework.security.config.annotation.web.configuration.EnableWe
 import org.springframework.security.web.SecurityFilterChain;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 
+import com.uva.monolith.filter.JwtAuthenticationFilter;
 import com.uva.monolith.services.users.models.UserRol;
 
 @Configuration
@@ -23,8 +24,6 @@ public class SecurityConfig {
     public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
         http.csrf(csrf -> csrf.disable())
                 .authorizeHttpRequests(authorize -> authorize
-                        // Permitir todas las conexiones
-                        .requestMatchers("").permitAll()
                         // Acceso restringido a usuarios y administradores
                         .requestMatchers("users", "users/**")
                         .hasAnyRole(UserRol.ADMIN.toString(), UserRol.CLIENT.toString())
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/auth/JwtAuthenticationFilter.java b/java/roomBooking/src/main/java/com/uva/monolith/filter/JwtAuthenticationFilter.java
similarity index 99%
rename from java/roomBooking/src/main/java/com/uva/monolith/services/auth/JwtAuthenticationFilter.java
rename to java/roomBooking/src/main/java/com/uva/monolith/filter/JwtAuthenticationFilter.java
index 2313797..9a0b6f4 100644
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/auth/JwtAuthenticationFilter.java
+++ b/java/roomBooking/src/main/java/com/uva/monolith/filter/JwtAuthenticationFilter.java
@@ -1,4 +1,4 @@
-package com.uva.monolith.services.auth;
+package com.uva.monolith.filter;
 
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.ExpiredJwtException;
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/auth/AuthController.java b/java/roomBooking/src/main/java/com/uva/monolith/services/auth/AuthController.java
deleted file mode 100644
index c47ba89..0000000
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/auth/AuthController.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.uva.monolith.services.auth;
-import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.SignatureAlgorithm;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.server.ResponseStatusException;
-import com.uva.monolith.services.users.controllers.UserService;
-import com.uva.monolith.services.users.models.User;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import javax.crypto.spec.SecretKeySpec;
-import java.security.Key;
-import javax.crypto.Mac;
-import javax.crypto.spec.SecretKeySpec;
-
-@RestController
-@RequestMapping("/api/auth")
-public class AuthController {
-
-    private final String SECRET_KEY = "clave_secreta";
-
-    @Autowired
-    private UserService userService;
-
-    @PostMapping("/login")
-    public Map<String, String> login(@RequestBody LoginRequest loginRequest) {
-        User user = userService.findByEmail(loginRequest.getEmail());
-
-        if (user != null && userService.verifyPassword(loginRequest.getPassword(), user.getPassword())) {
-            String token = Jwts.builder()
-                               .setSubject(user.getEmail())
-                               .signWith(new SecretKeySpec(SECRET_KEY.getBytes(), SignatureAlgorithm.HS256.getJcaName()))
-                               .claim("email", user.getEmail())
-                               .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1 hora
-                               .compact();
-
-            Map<String, String> response = new HashMap<>();
-            response.put("token", token);
-            return response;
-        }
-
-        throw new ResponseStatusException(HttpStatus.FORBIDDEN, "Credenciales inválidas");
-    }
-}
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/auth/LoginRequest.java b/java/roomBooking/src/main/java/com/uva/monolith/services/auth/LoginRequest.java
deleted file mode 100644
index 62f9cb9..0000000
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/auth/LoginRequest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.uva.monolith.services.auth;
-
-public class LoginRequest {
-        
-    private String email;
-    private String password;
-    
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-}
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/models/Booking.java b/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/models/Booking.java
index b3b0a5a..533ee0c 100644
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/models/Booking.java
+++ b/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/models/Booking.java
@@ -14,7 +14,7 @@ import jakarta.persistence.Table;
 import java.time.LocalDate;
 
 import com.uva.monolith.services.hotels.models.Room;
-import com.uva.monolith.services.users.models.User;
+import com.uva.monolith.services.users.models.Client;
 
 @Entity
 @Table(name = "bookings")
@@ -25,7 +25,7 @@ public class Booking {
     private int id;
     @JoinColumn(name = "user_id", referencedColumnName = "id")
     @ManyToOne(optional = false, fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
-    private User userId;
+    private Client userId;
     @JoinColumn(name = "room_id", referencedColumnName = "id")
     @ManyToOne(optional = false, fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
     private Room roomId;
@@ -37,7 +37,7 @@ public class Booking {
     public Booking() {
     }
 
-    public Booking(int id, User userId, Room roomID, LocalDate startDate, LocalDate endDate) {
+    public Booking(int id, Client userId, Room roomID, LocalDate startDate, LocalDate endDate) {
         this.id = id;
         this.userId = userId;
         this.roomId = roomID;
@@ -53,11 +53,11 @@ public class Booking {
         return this.id;
     }
 
-    public void setUserId(User userId) {
+    public void setUserId(Client userId) {
         this.userId = userId;
     }
 
-    public User getUserId() {
+    public Client getUserId() {
         return this.userId;
     }
 
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/services/BookingService.java b/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/services/BookingService.java
index b897e47..176f49d 100644
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/services/BookingService.java
+++ b/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/services/BookingService.java
@@ -4,8 +4,10 @@ import com.uva.monolith.services.bookings.models.Booking;
 import com.uva.monolith.services.bookings.repositories.BookingRepository;
 import com.uva.monolith.services.hotels.models.Room;
 import com.uva.monolith.services.hotels.repositories.RoomRepository;
-import com.uva.monolith.services.users.models.User;
-import com.uva.monolith.services.users.repositories.UserRepository;
+import com.uva.monolith.services.users.models.Client;
+import com.uva.monolith.services.users.repositories.ClientRepository;
+
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
@@ -14,15 +16,14 @@ import java.util.List;
 @Service
 public class BookingService {
 
-    private final BookingRepository bookingRepository;
-    private final UserRepository userRepository;
-    private final RoomRepository roomRepository;
+    @Autowired
+    private BookingRepository bookingRepository;
 
-    public BookingService(BookingRepository bookingRepository, UserRepository userRepository, RoomRepository roomRepository) {
-        this.bookingRepository = bookingRepository;
-        this.userRepository = userRepository;
-        this.roomRepository = roomRepository;
-    }
+    @Autowired
+    private RoomRepository roomRepository;
+
+    @Autowired
+    private ClientRepository clientRepository;
 
     public List<Booking> getBookings(LocalDate start, LocalDate end, Integer roomId, Integer userId) {
         List<Booking> bookings = null;
@@ -56,7 +57,7 @@ public class BookingService {
     }
 
     public Booking createBooking(Booking booking) {
-        User user = userRepository.findById(booking.getUserId().getId())
+        Client user = clientRepository.findById(booking.getUserId().getId())
                 .orElseThrow(() -> new RuntimeException("User not found"));
         Room room = roomRepository.findById(booking.getRoomId().getId())
                 .orElseThrow(() -> new RuntimeException("Room not found"));
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/Hotel.java b/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/Hotel.java
index 0616ff8..21f5cec 100644
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/Hotel.java
+++ b/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/Hotel.java
@@ -2,13 +2,10 @@ package com.uva.monolith.services.hotels.models;
 
 import java.util.List;
 
-import org.hibernate.annotations.ManyToAny;
-
 import com.uva.monolith.services.users.models.HotelManager;
 
 import jakarta.persistence.Basic;
 import jakarta.persistence.CascadeType;
-import jakarta.persistence.Column;
 import jakarta.persistence.Entity;
 import jakarta.persistence.FetchType;
 import jakarta.persistence.GeneratedValue;
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/Room.java b/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/Room.java
index 0ac71f5..72a6a72 100644
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/Room.java
+++ b/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/Room.java
@@ -4,7 +4,6 @@ import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.uva.monolith.services.bookings.models.Booking;
-import com.uva.monolith.services.users.models.Tipo;
 
 import jakarta.persistence.Basic;
 import jakarta.persistence.CascadeType;
@@ -36,7 +35,7 @@ public class Room {
     @Column(name = "room_number", nullable = false)
     private String roomNumber;
     @Column(name = "type", nullable = false)
-    private Tipo type;
+    private RoomType type;
     @Column(name = "available", nullable = false)
     private boolean available;
     @JsonIgnore
@@ -46,7 +45,7 @@ public class Room {
     public Room() {
     }
 
-    public Room(int id, Hotel hotelId, String roomNumber, Tipo type, boolean available, List<Booking> bookings) {
+    public Room(int id, Hotel hotelId, String roomNumber, RoomType type, boolean available, List<Booking> bookings) {
         this.id = id;
         this.hotel = hotelId;
         this.roomNumber = roomNumber;
@@ -79,11 +78,11 @@ public class Room {
         return this.roomNumber;
     }
 
-    public void setType(Tipo type) {
+    public void setType(RoomType type) {
         this.type = type;
     }
 
-    public Tipo getType() {
+    public RoomType getType() {
         return this.type;
     }
 
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/RoomType.java b/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/RoomType.java
new file mode 100644
index 0000000..b9e8258
--- /dev/null
+++ b/java/roomBooking/src/main/java/com/uva/monolith/services/hotels/models/RoomType.java
@@ -0,0 +1,7 @@
+package com.uva.monolith.services.hotels.models;
+
+public enum RoomType {
+    SINGLE,
+    DOUBLE,
+    SUITE
+}
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/users/controllers/UserService.java b/java/roomBooking/src/main/java/com/uva/monolith/services/users/controllers/UserService.java
deleted file mode 100644
index bdaf5ac..0000000
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/users/controllers/UserService.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.uva.monolith.services.users.controllers;
-
-import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.server.ResponseStatusException;
-
-import com.uva.monolith.services.users.models.User;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import com.uva.monolith.services.users.repositories.UserRepository;
-
-@Service
-public class UserService {
-
-    @Autowired
-    private UserRepository userRepository;
-
-    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
-
-    public boolean verifyPassword(String rawPassword, String encodedPassword) {
-        return passwordEncoder.matches(rawPassword, encodedPassword);
-    }
-
-    public String encodePassword(String password) {
-        return passwordEncoder.encode(password);
-    }
-
-    public User findByEmail(@RequestParam String email) {
-        return userRepository.findByEmail(email)
-            .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Usuario no encontrado"));
-}
-}
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/users/models/Tipo.java b/java/roomBooking/src/main/java/com/uva/monolith/services/users/models/Tipo.java
deleted file mode 100644
index 8b240e8..0000000
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/users/models/Tipo.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.uva.monolith.services.users.models;
-
-public enum Tipo {
-    SINGLE,
-    DOUBLE,
-    SUITE
-}
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/users/services/UserService.java b/java/roomBooking/src/main/java/com/uva/monolith/services/users/services/UserService.java
index 66c072e..d25e835 100644
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/users/services/UserService.java
+++ b/java/roomBooking/src/main/java/com/uva/monolith/services/users/services/UserService.java
@@ -9,9 +9,10 @@ import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.HttpClientErrorException;
 
+import com.uva.monolith.services.users.models.Client;
 import com.uva.monolith.services.users.models.User;
-import com.uva.monolith.services.users.models.UserRol;
 import com.uva.monolith.services.users.models.UserStatus;
+import com.uva.monolith.services.users.repositories.ClientRepository;
 import com.uva.monolith.services.users.repositories.UserRepository;
 
 @Service
@@ -20,11 +21,14 @@ public class UserService {
   @Autowired
   private UserRepository userRepository;
 
+  @Autowired
+  private ClientRepository clientRepository;
+
   public List<User> getAllUsers() {
     return userRepository.findAll();
   }
 
-  private User assertUser(Optional<User> opUser) {
+  private User assertUser(Optional<? extends User> opUser) {
     return opUser.orElseThrow(() -> new HttpClientErrorException(HttpStatus.NOT_FOUND));
   }
 
@@ -37,13 +41,14 @@ public class UserService {
   }
 
   public User addUser(User user) {
-    // TODO Introducir medidas de seguridad?
-    // Establecemos valores por defecto
-    user.setStatus(UserStatus.NO_BOOKINGS);
-    if (user.getRol() == null) // Rol por defecto
-      user.setRol(UserRol.CONSUMER);
-    // Guardamos
-    return userRepository.save(user);
+    // Actualmente está en el servicio AUTH
+    // TODO adaptar adecuadamente
+    throw new HttpClientErrorException(HttpStatus.MOVED_PERMANENTLY, "servicio actual en http://localhost:8101/login");
+    // user.setStatus(UserStatus.NO_BOOKINGS);
+    // if (user.getRol() == null) // Rol por defecto
+    // user.setRol(UserRol.CONSUMER);
+    // // Guardamos
+    // return userRepository.save(user);
   }
 
   public User updateUserData(int id, String name, String email) {
@@ -55,7 +60,7 @@ public class UserService {
 
   public User updateUserStatus(int id, UserStatus status) {
 
-    User user = getUserById(id);
+    Client user = (Client) assertUser(clientRepository.findById(id));
 
     boolean activeBookings = user.getBookings().stream()
         .anyMatch(booking -> !booking.getEndDate().isBefore(LocalDate.now())); // reserva >= ahora
@@ -63,7 +68,6 @@ public class UserService {
         .anyMatch(booking -> booking.getStartDate().isBefore(LocalDate.now())); // reserva < ahora
 
     switch (status) {
-      // TODO Buscar como validar las (in)active bookings
       case NO_BOOKINGS:
         if (!user.getBookings().isEmpty())
           throw new IllegalArgumentException("Invalid State: The user has at least one booking");
diff --git a/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java b/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java
index a2df673..7df746b 100644
--- a/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java
+++ b/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java
@@ -3,9 +3,7 @@ package com.uva.authentication.api;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
@@ -41,10 +39,11 @@ public class UserAPI {
 
   public User getUserByEmail(String email) {
 
-    String token = getAccessToken();
-    HttpHeaders headers = new HttpHeaders();
-    headers.set("Authorization", "Bearer " + token);
-    HttpEntity<Void> entity = new HttpEntity<>(headers);
+    // Implementación para acceder con autentificación
+    // String token = getAccessToken();
+    // HttpHeaders headers = new HttpHeaders();
+    // headers.set("Authorization", "Bearer " + token);
+    // HttpEntity<Void> entity = new HttpEntity<>(headers);
 
     String url = USER_API_URL + "?email={" + email + "}";
     try {
diff --git a/java/services/auth/src/main/java/com/uva/authentication/controllers/AuthController.java b/java/services/auth/src/main/java/com/uva/authentication/controllers/AuthController.java
index b9434db..72e4eab 100644
--- a/java/services/auth/src/main/java/com/uva/authentication/controllers/AuthController.java
+++ b/java/services/auth/src/main/java/com/uva/authentication/controllers/AuthController.java
@@ -22,7 +22,6 @@ public class AuthController {
             return ResponseEntity.ok(token);
         } catch (HttpClientErrorException e) {
             if (e.getStatusCode() == HttpStatus.FORBIDDEN) {
-                // return new ResponseEntity<Void>(HttpStatus.FORBIDDEN);
                 return new ResponseEntity<String>(e.getMessage(), HttpStatus.FORBIDDEN);
             }
         }
@@ -40,7 +39,6 @@ public class AuthController {
             return login(loginRequest);
         } catch (HttpClientErrorException e) {
             if (e.getStatusCode() == HttpStatus.CONFLICT) {
-                // return new ResponseEntity<Void>(HttpStatus.FORBIDDEN);
                 return new ResponseEntity<String>(e.getMessage(), HttpStatus.CONFLICT);
             }
             e.fillInStackTrace();
diff --git a/java/services/auth/src/main/java/com/uva/authentication/services/AuthService.java b/java/services/auth/src/main/java/com/uva/authentication/services/AuthService.java
index 0ed1999..3bc823b 100644
--- a/java/services/auth/src/main/java/com/uva/authentication/services/AuthService.java
+++ b/java/services/auth/src/main/java/com/uva/authentication/services/AuthService.java
@@ -8,7 +8,6 @@ import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.HttpClientErrorException;
 
-import com.uva.authentication.api.UserAPI;
 import com.uva.authentication.models.Client;
 import com.uva.authentication.models.HotelManager;
 import com.uva.authentication.models.LoginRequest;
@@ -33,9 +32,6 @@ public class AuthService {
   @Autowired
   private ClientRepository clientRepository;
 
-  @Autowired
-  private UserAPI userAPI;
-
   @Autowired
   private UserRepository userRepository;
 
@@ -46,49 +42,57 @@ public class AuthService {
   }
 
   public String login(LoginRequest loginRequest) {
-    // User user = userAPI.getUserByEmail(loginRequest.getEmail());
     User user = userRepository.findByEmail(loginRequest.getEmail())
         .orElseThrow(() -> new HttpClientErrorException(HttpStatus.FORBIDDEN,
             "Invalid credentials"));
-    boolean isAuthenticated = authenticateUser(loginRequest, user);
 
-    if (!isAuthenticated) {
+    if (!authenticateUser(loginRequest, user)) {
       throw new HttpClientErrorException(HttpStatus.FORBIDDEN, "Invalid credentials");
     }
 
-    // Generate a mock JWT token for simplicity
-    String jwtToken = "Bearer " + jwtUtil.generateToken(user);
-    return jwtToken;
-
+    return jwtUtil.generateToken(user);
   }
 
   public User register(RegisterRequest registerRequest) {
-    // User user = userAPI.getUserByEmail(registerRequest.getEmail());
     Optional<User> user = userRepository.findByEmail(registerRequest.getEmail());
     if (user.isPresent())
       throw new HttpClientErrorException(HttpStatus.CONFLICT, "Email already in use");
 
-    String hashPass = SecurityUtils.encrypt(registerRequest.getPassword());
-    // return userAPI.registerUser(registerRequest);
+    return registerNewUser(registerRequest);
+  }
+
+  private User registerNewUser(RegisterRequest registerRequest) {
     User newUser;
-    if (registerRequest.getRol() == UserRol.HOTEL_ADMIN) {
-      HotelManager hm = new HotelManager();
-      // hm.setName(registerRequest.getName());
-      // hm.setEmail(registerRequest.getEmail());
-      // hm.setRol(registerRequest.getRol());
-      BeanUtils.copyProperties(registerRequest, hm);
-      hm.setPassword(hashPass);
-      newUser = hotelManagerRepository.save(hm);
-    } else {
-      Client client = new Client();
-      // client.setName(registerRequest.getName());
-      // client.setEmail(registerRequest.getEmail());
-      BeanUtils.copyProperties(registerRequest, client);
-      client.setRol(UserRol.CLIENT);
-      client.setPassword(hashPass);
-      newUser = clientRepository.save(client);
+
+    // Ciframos la contraseña
+    String hashPass = SecurityUtils.encrypt(registerRequest.getPassword());
+    registerRequest.setPassword(hashPass);
+
+    // Aseguramos que tenga un rol, por defecto es cliente
+    if (registerRequest.getRol() == null)
+      registerRequest.setRol(UserRol.CLIENT);
+
+    switch (registerRequest.getRol()) {
+      case HOTEL_ADMIN:
+        HotelManager hm = new HotelManager();
+        BeanUtils.copyProperties(registerRequest, hm);
+        newUser = hotelManagerRepository.save(hm);
+        break;
+
+      case ADMIN: // TODO revisar
+        User admin = new User();
+        BeanUtils.copyProperties(registerRequest, admin);
+        newUser = userRepository.save(admin);
+        break;
+
+      case CLIENT: // Por defecto cliente normal
+      default:
+        Client client = new Client();
+        BeanUtils.copyProperties(registerRequest, client);
+        client.setRol(UserRol.CLIENT);
+        newUser = clientRepository.save(client);
+        break;
     }
     return newUser;
   }
-
 }
diff --git a/java/services/auth/src/main/java/com/uva/authentication/utils/JwtUtil.java b/java/services/auth/src/main/java/com/uva/authentication/utils/JwtUtil.java
index 2e22fae..4ac6688 100644
--- a/java/services/auth/src/main/java/com/uva/authentication/utils/JwtUtil.java
+++ b/java/services/auth/src/main/java/com/uva/authentication/utils/JwtUtil.java
@@ -80,8 +80,6 @@ public class JwtUtil {
 
   private Key getSignInKey() {
     byte[] keyBytes = Decoders.BASE64.decode(secretKey);
-    // byte[] keyBytes = secretKey.getBytes(StandardCharsets.UTF_8); // for secret
-    // key
     return Keys.hmacShaKeyFor(keyBytes);
   }
 }
-- 
GitLab