using System;
using Common;
using Common.Constant;
using Common.Http;
using Database.Database;
using Esim.Apis.Business;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace RevoSystem.Apis.Controllers
{
[ApiController]
public class UserController : Controller
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(
typeof(UserController)
);
ModelContext dbContext;
IConfiguration configuration;
IUserBusiness userBusiness;
public UserController(
IConfiguration _configuration,
IUserBusiness userBusiness,
ModelContext dbContext
)
{
configuration = _configuration;
this.userBusiness = userBusiness;
this.dbContext = dbContext;
}
private string GetParameter(string key)
{
return configuration.GetSection(key).Value ?? "";
}
///
/// Request OTP via email
/// POST /apis/auth/request-otp
///
[HttpPost]
[Route(ApiUrlConstant.RequestOtpUrl)]
public async Task RequestOtp([FromBody] RequestOtpReq request)
{
return await userBusiness.RequestOtp(HttpContext.Request, request);
}
///
/// Resend OTP via email
/// POST /apis/auth/resend-otp
///
[HttpPost]
[Route(ApiUrlConstant.ResendOtpUrl)]
public async Task ResendOtp([FromBody] RequestOtpReq request)
{
return await userBusiness.ResendOtp(HttpContext.Request, request);
}
///
/// Verify OTP and complete login
/// POST /apis/auth/verify-otp
///
[HttpPost]
[Route(ApiUrlConstant.VerifyOtpUrl)]
public async Task VerifyOtp([FromBody] VerifyOtpReq request)
{
return await userBusiness.VerifyOtp(HttpContext.Request, request);
}
///
/// Get Google Login URL
/// POST /apis/auth/google-login
///
/// Contains optional 'lang' parameter for response message language
/// Returns JSON object with 'url' property containing the Google OAuth2 authorization URL
[ProducesResponseType(typeof(object), 200)]
[HttpPost]
[Route(ApiUrlConstant.GoogleLoginUrl)]
public async Task GoogleLogin([FromBody] GoogleLoginReq request)
{
return await userBusiness.GoogleLogin(
HttpContext.Request,
request ?? new GoogleLoginReq()
);
}
///
/// Google OAuth Callback (Exchange code for token)
/// POST /apis/auth/google-callback
///
/// Contains the authorization 'code' (required) and 'redirectUri' (optional)
/// Returns user profile and JWT tokens (accessToken, refreshToken)
[ProducesResponseType(typeof(object), 200)]
[HttpPost]
[Route(ApiUrlConstant.GoogleCallbackUrl)]
public async Task GoogleCallback([FromBody] GoogleCallbackReq request)
{
return await userBusiness.GoogleCallback(HttpContext.Request, request);
}
}
}