using BuddyFinance.Integration;
using BuddyFinance.Integration.Models;
using BuddyFinance.Integration.Models.Enums;
using BuddyFinance.Integration.Models.Registration;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web.Http;
namespace BuddyFinance.WebApi.Controllers
{
///
/// Profile registrations
///
[RoutePrefix("api/registration")]
[AllowAnonymous]
public class RegistrationController : BaseController
{
private readonly RegistrationIntegrator _registration = new RegistrationIntegrator();
///
/// Register a new profile
///
/// Profile Details
///
[HttpPost]
[Route("register")]
public RegistrationResult Register(NewProfileModel newProfile)
{
if (!ValidateOtp(newProfile.Otp, newProfile.ContactNumber).Result)
{
return new RegistrationResult
{
ErrorCode = (int)ResponseCodes.ValidationError,
ErrorMessage = "Invalid OTP"
};
}
return _registration.Register(newProfile);
//var result = _registration.Register(newProfile);
//if (result.ErrorCode == (int)ResponseCodes.Success)
//{
// //send profile verification email ..
// var token_ = result.VerificationToken;// TokenManager.Generate(result.Result);
// var url = ConfigurationManager.AppSettings["VerifyUrl"].Replace("_token", token_);// Url.Link("Default", new { Controller = "Registration", Action = "Verify", token = token_, profileNumber = result.Result });
// var mailDetails = new Dictionary
// {
// { "[names]", $"{newProfile.Name} {newProfile.Surname}" },
// { "[url]", url},
// { "[username]",newProfile.EmailAddress },
// { "[profileNumber]", result.Result }
// };
// var templateText = System.IO.File.ReadAllText(ConfigurationManager.AppSettings["TemplatesPath"] + NotificationTempate.ProfileRegistered.ToString() + ".txt");
// var emailBody = mailDetails.Aggregate(templateText, (item, m) => item.Replace(m.Key, m.Value));
// _notifications.SendEmail(newProfile.EmailAddress, emailBody, "Account Created - Buddy Finance", null);
//}
//return result;
}
///
/// Sets rejected applications to pending
///
///
///
[HttpPost]
[Route("reapply")]
public BaseResult ReApply(string profileNumber)
{
return _registration.ReApply(profileNumber);
}
///
/// Sends OTP for profile registration
///
/// Profile contact number
///
[HttpPost]
[Route("sendotp")]
public SendOtpResult SendOtp(string number)
{
return _registration.SendOtp(number);
}
///
/// Validates OTP on profile registration
///
/// Validation OTP
/// Profile contact number
///
[HttpPost]
[Route("validateotp")]
public ValidateOtpResult ValidateOtp(string otp, string number)
{
return _registration.ValidateOtp(otp, number);
}
///
/// Verify/Activate profile registration
///
///
///
[HttpPost]
[Route("verify")]
public VerifyRegistrationResult Verify(AccountVerificationModel model)
{
return _registration.VerifyRegistration(model.Token, model.ProfileNumber, model.Username);
}
}
}