← Back to Documentation Portal|📊 Coverage Quality Gates|Coverage Dashboard
Payflow API — Automated JaCoCo Code Coverage (90% Line / 73% Branch)

AuthController.java

package com.payflow.controller;

import java.util.UUID;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.payflow.dto.request.LoginRequest;
import com.payflow.dto.response.AuthResponse;
import com.payflow.entity.User;
import com.payflow.security.JwtTokenProvider;
import com.payflow.service.UserService;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;

@RestController
@RequestMapping("/api/v1/auth")
@Tag(name = "Authentication", description = "Endpoints for user authentication and JWT token issuance")
public class AuthController {

	private static final Logger LOG = LoggerFactory.getLogger(AuthController.class);

	private final UserService userService;
	private final JwtTokenProvider jwtTokenProvider;

	public AuthController(UserService userService, JwtTokenProvider jwtTokenProvider) {
		this.userService = userService;
		this.jwtTokenProvider = jwtTokenProvider;
	}

	@PostMapping("/login")
	@Operation(summary = "Authenticate user and issue JWT token")
	@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Authentication successful"),
			@ApiResponse(responseCode = "400", description = "Invalid request payload"),
			@ApiResponse(responseCode = "404", description = "User not found"),
			@ApiResponse(responseCode = "422", description = "Validation failure")})
	public ResponseEntity<AuthResponse> login(@Valid @RequestBody LoginRequest request) {
		LOG.info("Authenticating login request for upiId={}", request.getUpiId());

		User user = userService.getUserByUpiId(request.getUpiId());
		String token = jwtTokenProvider.generateToken(user.getUpiId(), user.getReferenceId());
		long expiresIn = jwtTokenProvider.getExpirationSeconds();

		String upi = user.getUpiId();
		UUID refId = user.getReferenceId();
		AuthResponse response = new AuthResponse(token, "Bearer", expiresIn, upi, refId);
		return ResponseEntity.ok(response);
	}
}