OpenApiConfig.java

package com.flogin.backend.config;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OpenApiConfig {

    // Tên schema bảo mật (sẽ hiển thị trên nút Authorize)
    private static final String SCHEME_NAME = "BearerAuth";
    private static final String SCHEME = "bearer";


    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
            .info(new Info()
                .title("Kiểm Thử Phần Mềm - Product Management API")
                .version("1.0")
                .description("API cho chức năng Đăng nhập và Quản lý Sản phẩm. Dùng để thực hiện Kiểm thử Back-end.")
            )
            // 1. Định nghĩa Security Scheme (JWT/Bearer)
            .components(new Components()
                .addSecuritySchemes(SCHEME_NAME, createSecurityScheme())
            )
            // 2. Yêu cầu Security (Áp dụng cho mọi API trừ những cái đã public)
            .addSecurityItem(new SecurityRequirement().addList(SCHEME_NAME));
    }

    private SecurityScheme createSecurityScheme() {
        return new SecurityScheme()
            .name(SCHEME_NAME)
            .type(SecurityScheme.Type.HTTP)
            .scheme(SCHEME)
            .bearerFormat("JWT")
            .in(SecurityScheme.In.HEADER)
            .description("Token JWT: Nhập token vào trường sau (Ví dụ: Bearer eyJhbGci... )");
    }

}