Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/NonAdminUser.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/NonAdminUser.java	(revision ecd0016c8d52ac7d8f2575fc3413ce0506e6a143)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/NonAdminUser.java	(revision 5c65932148f640bedd107abbafc22d3752f398be)
@@ -4,4 +4,5 @@
 import lombok.Getter;
 import lombok.Setter;
+import org.hibernate.annotations.Cascade;
 
 @Getter
@@ -15,5 +16,5 @@
 
     @MapsId
-    @OneToOne
+    @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
     @JoinColumn(name = "user_id")
     private User user;
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/User.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/User.java	(revision ecd0016c8d52ac7d8f2575fc3413ce0506e6a143)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/User.java	(revision 5c65932148f640bedd107abbafc22d3752f398be)
@@ -4,6 +4,18 @@
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
-import jakarta.persistence.*;
-import lombok.*;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
 
 @Setter
@@ -41,9 +53,8 @@
     private Admin admin;
 
-    // todo: is this column needed? if so, add to entities and documentation
     @Enumerated(EnumType.STRING)
     private Role role;
 
-    @OneToOne(mappedBy = "user")
+    @OneToOne(mappedBy = "user", orphanRemoval = true)
     @JsonIgnore
     private NonAdminUser nonAdminUser;
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/AuthService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/AuthService.java	(revision ecd0016c8d52ac7d8f2575fc3413ce0506e6a143)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/AuthService.java	(revision 5c65932148f640bedd107abbafc22d3752f398be)
@@ -1,10 +1,10 @@
 package com.ukim.finki.develop.finkwave.service;
 
-import com.ukim.finki.develop.finkwave.config.AuthProperties;
-import com.ukim.finki.develop.finkwave.dto.LoginRequestDto;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 
+import com.ukim.finki.develop.finkwave.config.AuthProperties;
 import com.ukim.finki.develop.finkwave.dto.AuthRequestDto;
+import com.ukim.finki.develop.finkwave.dto.LoginRequestDto;
 import com.ukim.finki.develop.finkwave.dto.UserResponseDto;
 import com.ukim.finki.develop.finkwave.model.NonAdminUser;
@@ -17,4 +17,5 @@
 import jakarta.servlet.http.Cookie;
 import jakarta.servlet.http.HttpServletResponse;
+import jakarta.transaction.Transactional;
 import lombok.RequiredArgsConstructor;
 
@@ -30,27 +31,22 @@
 
 
+    @Transactional
     public UserResponseDto registerAndLogIn(HttpServletResponse response, AuthRequestDto authRequestDto){
         if (userRepository.findByUsername(authRequestDto.username()).isPresent()){
             throw new RuntimeException("User already exists");
         }
-        createNonAdminUser(authRequestDto);
-        // todo: could also be redirect in controller, which one is better?
-        return login(response, new LoginRequestDto(authRequestDto.username(), authRequestDto.password()));
+        User user = createNonAdminUser(authRequestDto);
+        return authenticateAndRespond(response, user);
     }
 
-    // todo: dto in arguments or the standalone values?
     public UserResponseDto login(HttpServletResponse response, LoginRequestDto loginRequestDto){
         User user = userRepository.findByUsername(loginRequestDto.username())
                 .orElseThrow(() -> new RuntimeException("Invalid credentials"));
+
         if (!passwordEncoder.matches(loginRequestDto.password(), user.getPassword())){
             throw new RuntimeException("Invalid credentials");
         }
 
-        String accessToken = jwtService.generateToken(loginRequestDto.username(), user.getRole().name());
-        RefreshToken refreshToken = refreshTokenService.createRefreshToken(user);
-
-        UserResponseDto userResponseDto = new UserResponseDto(user.getUsername(), user.getRole());
-        addTokensToResponse(response, refreshToken, accessToken);
-        return userResponseDto;
+        return authenticateAndRespond(response, user);
     }
 
@@ -93,7 +89,5 @@
     }
 
-    // todo: should it be transactional?
-//    @Transactional
-    private void createNonAdminUser(AuthRequestDto authRequestDto){
+    private User createNonAdminUser(AuthRequestDto authRequestDto){
         User user = User.builder()
                 .fullName(authRequestDto.fullname())
@@ -109,5 +103,14 @@
         user.setNonAdminUser(nonAdminUser);
         nonAdminUserRepository.save(nonAdminUser);
-        userRepository.save(user);
+        return user;
+    }
+
+    private UserResponseDto authenticateAndRespond(HttpServletResponse response, User user){
+        String accessToken = jwtService.generateToken(user.getUsername(), user.getRole().name());
+        RefreshToken refreshToken = refreshTokenService.createRefreshToken(user);
+
+        UserResponseDto userResponseDto = new UserResponseDto(user.getUsername(), user.getRole());
+        addTokensToResponse(response, refreshToken, accessToken);
+        return userResponseDto;
     }
 
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/CustomUserDetailsService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/CustomUserDetailsService.java	(revision ecd0016c8d52ac7d8f2575fc3413ce0506e6a143)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/CustomUserDetailsService.java	(revision 5c65932148f640bedd107abbafc22d3752f398be)
@@ -22,7 +22,5 @@
         User user = userRepository.findByUsername(username)
                 .orElseThrow(() -> new RuntimeException("user not found"));
-        // todo: fix hardcoded role
-        // List<GrantedAuthority> authorities = List.of(new SimpleGrantedAuthority("ROLE_" + user.getRole().name()));
-        List<GrantedAuthority> authorities = List.of(new SimpleGrantedAuthority("ROLE_NONADMIN"));
+         List<GrantedAuthority> authorities = List.of(new SimpleGrantedAuthority("ROLE_" + user.getRole().name()));
         return new org.springframework.security.core.userdetails.User(
                 user.getUsername(),
