using System; using Common; using Common.Constant; using Common.Http; using Esim.Apis.Business; using Database.Database; 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); } } }