VerificationCodeController.kt

package io.github.lishangbu.avalon.auth.controller

import io.github.lishangbu.avalon.auth.model.EmailCodeRequest
import io.github.lishangbu.avalon.auth.model.SmsCodeRequest
import io.github.lishangbu.avalon.auth.service.VerificationCodeService
import io.github.lishangbu.avalon.oauth2.common.core.AuthorizationGrantTypeSupport
import jakarta.validation.Valid
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

/**
 * 验证码控制器
 *
 * 提供短信与邮箱验证码的发送接口
 *
 * @author lishangbu
 * @since 2026/3/13
 */
@RequestMapping("/auth")
@RestController
class VerificationCodeController(
    /** 验证码服务 */
    private val verificationCodeService: VerificationCodeService,
) {
    /**
     * 发送短信验证码
     *
     * @param request 短信验证码请求
     */
    @PostMapping("/sms/code")
    fun sendSmsCode(
        @RequestBody @Valid request: SmsCodeRequest,
    ) {
        verificationCodeService.generateCode(request.phone, AuthorizationGrantTypeSupport.SMS.value)
    }

    /**
     * 发送邮箱验证码
     *
     * @param request 邮箱验证码请求
     */
    @PostMapping("/email/code")
    fun sendEmailCode(
        @RequestBody @Valid request: EmailCodeRequest,
    ) {
        verificationCodeService.generateCode(
            request.email,
            AuthorizationGrantTypeSupport.EMAIL.value,
        )
    }
}