feat: implement AuthService and AuthController

This commit is contained in:
2026-02-23 20:34:40 +03:00
parent f08bb8d65c
commit 5e27a6fd6c
2 changed files with 108 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
package com.example.bankcards.controller;
import com.example.bankcards.dto.AuthResponse;
import com.example.bankcards.dto.LoginRequest;
import com.example.bankcards.dto.RegisterRequest;
import com.example.bankcards.service.AuthService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/auth")
@RequiredArgsConstructor
public class AuthController {
private final AuthService authService;
@PostMapping("/register")
public ResponseEntity<AuthResponse> register(
@Valid @RequestBody RegisterRequest request
) {
return ResponseEntity.ok(authService.register(request));
}
@PostMapping("/login")
public ResponseEntity<AuthResponse> login(
@Valid @RequestBody LoginRequest request
) {
return ResponseEntity.ok(authService.login(request));
}
}

View File

@@ -0,0 +1,76 @@
package com.example.bankcards.service;
import com.example.bankcards.dto.AuthResponse;
import com.example.bankcards.dto.LoginRequest;
import com.example.bankcards.dto.RegisterRequest;
import com.example.bankcards.entity.Role;
import com.example.bankcards.entity.User;
import com.example.bankcards.exception.BadRequestException;
import com.example.bankcards.repository.UserRepository;
import com.example.bankcards.security.JwtService;
import lombok.RequiredArgsConstructor;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class AuthService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final JwtService jwtService;
private final AuthenticationManager authenticationManager;
private final UserDetailsService userDetailsService;
public AuthResponse register(RegisterRequest request) {
if (userRepository.existsByUsername(request.getUsername())) {
throw new BadRequestException("Username already taken");
}
if (userRepository.existsByEmail(request.getEmail())) {
throw new BadRequestException("Email already registered");
}
User user = User.builder()
.username(request.getUsername())
.email(request.getEmail())
.password(passwordEncoder.encode(request.getPassword()))
.role(Role.ROLE_USER)
.build();
userRepository.save(user);
UserDetails userDetails = userDetailsService.loadUserByUsername(
user.getUsername()
);
String token = jwtService.generateToken(userDetails);
return new AuthResponse(
token,
user.getUsername(),
user.getRole().name()
);
}
public AuthResponse login(LoginRequest request) {
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
request.getUsername(),
request.getPassword()
)
);
UserDetails userDetails = userDetailsService.loadUserByUsername(
request.getUsername()
);
String token = jwtService.generateToken(userDetails);
User user = userRepository
.findByUsername(request.getUsername())
.orElseThrow();
return new AuthResponse(
token,
user.getUsername(),
user.getRole().name()
);
}
}