| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Globalization;
- using System.Threading;
- using System.Threading.Tasks;
- using LotteryWebApp.Common;
- using LotteryWebApp.Extensions;
- using LotteryWebApp.Languages;
- using LotteryWebApp.Models;
- using LotteryWebApp.Service;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Configuration;
- using Newtonsoft.Json;
- using LotteryWebApp.Controllers;
- namespace LotteryWebApp.Areas.LotteryV2.Controllers
- {
- [Area("LotteryV2")]
- [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
- public class HomeController : BaseController
- {
- private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
- IConfiguration configuration;
- private readonly IWebHostEnvironment webHostEnvironment;
- APIFunctions api = new APIFunctions();
- public HomeController(IConfiguration _configuration, IWebHostEnvironment hostEnvironment)
- {
- configuration = _configuration;
- webHostEnvironment = hostEnvironment;
- }
- public String GetParameter(String key)
- {
- return configuration.GetSection(key).Value;
- }
- public async Task<IActionResult> Index(
- string termType,
- String uuid,
- String mcuid,
- String phonenumber,
- String token
- )
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
- String lang = currentCulture.Name;
- String msisdnAuto = null;
- if (!CheckAuthToken())
- {
- if (token != null)
- {
- AutoLoginRequest autoLoginRequest = new AutoLoginRequest { token = token };
- AutoLoginResponse autoLoginResponse = await api.AutoLoginApiAsync(configuration, autoLoginRequest);
- if (autoLoginResponse.code == Code.SUCCESS_CODE)
- {
- string msisdnReal = validateMsisdn(autoLoginResponse.data.msisdn.Substring(1));
- if (msisdnReal == "") return RedirectToAction("Login", "Account", new { area = "" });
- CheckAccountRequest checkAccountRequest = new CheckAccountRequest
- {
- msisdn = msisdnReal,
- channel = Constants.WEB_CHANNEL,
- language = lang == "en" ? "0" : "1"
- };
- CheckAccountResponse checkAccountResponse = api.CheckAccountApi(configuration, checkAccountRequest);
- if (checkAccountResponse.status == Code.SUCCESS)
- {
- string tokenGetReal = checkAccountResponse.token;
- HttpContext.Session.SetComplexData("msisdn", msisdnReal);
- CreateAuthToken();
- HttpContext.Session.SetComplexData("token", tokenGetReal);
- UserGetProfileRequest userGetProfileRequest = new UserGetProfileRequest { users = msisdnReal, token = tokenGetReal };
- Profile profileGet = api.UserLoadProfileApi(configuration, userGetProfileRequest);
- HttpContext.Session.SetComplexData("profile", profileGet);
- UserStatusRequest userStatusRequest = new UserStatusRequest { users = msisdnReal, token = tokenGetReal };
- UserStatus userStatusGet = api.GetUserStatusApi(configuration, userStatusRequest);
- HttpContext.Session.SetComplexData("userStatus", userStatusGet);
- }
- else
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- }
- }
- else if (uuid != null)
- {
- String res = await CheckAutoLogin(log, uuid);
- if (res != null)
- {
- dynamic json = JsonConvert.DeserializeObject(res);
- if (json["code"] == "200" && json["errorCode"] == "200")
- {
- msisdnAuto = json["data"]["msisdn"];
- }
- }
- String msisdnDetect = validateMsisdn(msisdnAuto.Substring(1));
- if (msisdnDetect != "")
- {
- RegisterRequest request = new RegisterRequest { Msisdn = msisdnDetect };
- RegisterResponse reset = api.UserForgotPasswordApi(configuration, request);
- if (reset.status == Code.SUCCESS)
- {
- HttpContext.Session.Remove("regInfos");
- HttpContext.Session.SetComplexData("msisdn", msisdnDetect);
- return RedirectToAction("Login", "Account", new { area = "", step = 2 });
- }
- }
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- else if (phonenumber != null)
- {
- // simplified or same logic as original
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- else
- {
- // If no token/uuid and not auth, verify existing session token
- var savedToken = HttpContext.Session.GetString("token");
- if (string.IsNullOrEmpty(savedToken))
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- }
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.termType = termType != null ? termType : Constants.MEGA_LOTO;
- model.userStatus = userStatus;
- model.profile = profile;
- model.listTerm = new List<Term>();
- String tokenGet = HttpContext.Session.GetComplexData<String>("token");
- String fromDate = DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
- String toDate = DateTime.Now.ToString("dd/MM/yyyy");
- // Get Top Winner
- GetTopWinnerRequest getTopWinnerRequest = new GetTopWinnerRequest { type = lang == "en" ? "0" : "1", token = tokenGet };
- GetTopWininerResponse getTopWininerResponse = api.GetTopWinnerApi(configuration, getTopWinnerRequest);
- if (getTopWininerResponse.responseCode == Code.SUCCESS)
- {
- model.topWinner = getTopWininerResponse.list;
- HttpContext.Session.SetComplexData("topWinner", model.topWinner);
- }
- // Get Term Results
- //ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
- //{
- // gameId = model.termType,
- // token = tokenGet,
- // type = Constants.TERM_HAS_NOT_RESULT_TYPE,
- // order = Constants.DECS,
- // fromDate = fromDate,
- // toDate = toDate,
- // rowsOnPage = Constants.ROW_ON_PAGE,
- // seqPage = "1",
- // id = Constants.ALL_DATA
- //};
- //ResultOfTermResponse result = api.GetResultOfTermApi(configuration, resultOfTermRequest);
- //if (result.responseCode == Code.SESSION_EXPIRED)
- //{
- // return RedirectToAction("Login", "Account", new { area = "" });
- //}
- //else if (result.responseCode == Code.SUCCESS)
- //{
- // model.listTerm = result.listTerm;
- //}
- if (!string.IsNullOrEmpty(termType))
- {
- HttpContext.Session.SetString("termType", termType);
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- model.serverTime = DateTime.Now;
- return View(model);
- }
- public async Task<IActionResult> GameHome(string termType)
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.termType = termType != null ? termType : Constants.FLORIDA_BOLET_CODE;
- model.userStatus = userStatus;
- model.profile = profile;
- model.listTerm = new List<Term>();
- if (!string.IsNullOrEmpty(termType))
- {
- HttpContext.Session.SetString("termType", termType);
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- model.serverTime = DateTime.Now; return View(model);
- }
- public async Task<IActionResult> FAQ()
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- model.serverTime = DateTime.Now; return View(model);
- }
- public IActionResult More()
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- model.serverTime = DateTime.Now; return View(model);
- }
- public IActionResult Profile()
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- model.serverTime = DateTime.Now; return View(model);
- }
- [HttpPost]
- public IActionResult UserUpdateProfile(string fullName, string birthday)
- {
- try
- {
- string msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- string token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(msisdn) || string.IsNullOrEmpty(token))
- {
- return Json(new { status = Code.ERROR, message = "Session expired" });
- }
- string birthdayFormat = birthday;
- if (!string.IsNullOrEmpty(birthday) && birthday.Contains("-"))
- {
- try
- {
- birthdayFormat = DateTime.ParseExact(birthday, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy");
- }
- catch { }
- }
- UserUpdateProfileRequest request = new UserUpdateProfileRequest
- {
- users = msisdn,
- token = token,
- fullName = fullName,
- birthday = birthdayFormat
- };
- UserUpdateProfileResponse response = api.UserUpdateProfileApi(configuration, request);
- if (response.status == Code.SUCCESS)
- {
- // Update session profile
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- if (profile != null)
- {
- profile.fullName = fullName;
- profile.birthday = birthdayFormat;
- HttpContext.Session.SetComplexData("profile", profile);
- }
- }
- return Json(response);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { status = Code.ERROR, message = ex.Message });
- }
- }
- public IActionResult Rule()
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- model.serverTime = DateTime.Now; return View(model);
- }
- public IActionResult HowToPlay()
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- model.serverTime = DateTime.Now; return View(model);
- }
- public IActionResult Results(string termType, string fromDate, string toDate)
- {
- TermResultHistoryModel model = new TermResultHistoryModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.termType = termType != null ? termType : (HttpContext.Session.GetString("termType") ?? Constants.PIC10_BASIC_CODE);
- // Set default dates if not provided (same as root implementation)
- string fromFormatted = fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
- string toFormatted = toDate != null ? toDate : DateTime.Now.ToString("yyyy-MM-dd");
- model.fromDate = fromFormatted;
- model.toDate = toFormatted;
- // Load initial results
- ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
- {
- gameId = model.termType,
- token = token,
- type = Constants.TERM_HAS_RESULT_TYPE,
- order = Constants.DECS,
- fromDate = DateTime.ParseExact(fromFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- toDate = DateTime.ParseExact(toFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- rowsOnPage = Constants.ROW_ON_PAGE,
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, resultOfTermRequest);
- if (result.responseCode == Code.SUCCESS)
- {
- model.listTerm = result.listTerm ?? new List<Term>();
- }
- else
- {
- model.listTerm = new List<Term>();
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- model.listTerm = new List<Term>();
- }
- model.serverTime = DateTime.Now; return View(model);
- }
- public IActionResult TermResultHistory(string termType, string fromDate, string toDate)
- {
- TermResultHistoryModel model = new TermResultHistoryModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token)) return Json(new { status = "error", message = "Session expired" });
- string fromFormatted = fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
- string toFormatted = toDate != null ? toDate : DateTime.Now.ToString("yyyy-MM-dd");
- model.termType = termType;
- model.fromDate = fromFormatted;
- model.toDate = toFormatted;
- ResultOfTermRequest request = new ResultOfTermRequest
- {
- gameId = termType,
- token = token,
- type = Constants.TERM_HAS_RESULT_TYPE,
- order = Constants.DECS,
- fromDate = DateTime.ParseExact(fromFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- toDate = DateTime.ParseExact(toFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- rowsOnPage = Constants.ROW_ON_PAGE,
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
- if (result.responseCode == Code.SUCCESS)
- {
- model.listTerm = result.listTerm ?? new List<Term>();
- }
- else
- {
- model.listTerm = new List<Term>();
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- model.listTerm = new List<Term>();
- }
- return PartialView("_TermResultHistoryV2", model);
- }
- public IActionResult TermResultHistoryGrouped(string fromDate, string toDate)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token)) return Json(new { status = "error", message = "Session expired" });
- string fromFormatted = fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
- string toFormatted = toDate != null ? toDate : DateTime.Now.ToString("yyyy-MM-dd");
- string[] gameIds = { Constants.PIC10_BASIC_CODE, Constants.PIC10_BIGSMALL_CODE, Constants.PIC10_ODDEVEN_CODE };
- var allTerms = new List<Term>();
- foreach (var gid in gameIds)
- {
- ResultOfTermRequest request = new ResultOfTermRequest
- {
- gameId = gid,
- token = token,
- type = Constants.TERM_HAS_RESULT_TYPE,
- order = Constants.DECS,
- fromDate = DateTime.ParseExact(fromFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- toDate = DateTime.ParseExact(toFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- rowsOnPage = "50",
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
- if (result.responseCode == Code.SUCCESS && result.listTerm != null)
- {
- allTerms.AddRange(result.listTerm);
- }
- }
- // Group by date part of date_random
- var grouped = allTerms.GroupBy(x => {
- DateTime dt;
- if (DateTime.TryParse(x.date_random, out dt))
- return dt.Date;
- return DateTime.MinValue;
- })
- .Where(g => g.Key != DateTime.MinValue)
- .OrderByDescending(g => g.Key)
- .ToList();
- return PartialView("_TermResultHistoryGrouped", grouped);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return PartialView("_TermResultHistoryGrouped", new List<IGrouping<DateTime, Term>>());
- }
- }
- public IActionResult History(string termType, string status, string seqPage)
- {
- UserTicketHistoryModel model = new UserTicketHistoryModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- string msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- model.termType = termType ?? Constants.PIC10_BASIC_CODE;
- model.status = status ?? Constants.ALL_DATA; // -1 for all, or 0, 1, 2
- model.seqPage = seqPage ?? "1";
- UserTicketRequest request = new UserTicketRequest
- {
- gameId = model.termType,
- msisdn = msisdn,
- token = token,
- type = model.status,
- order = Constants.DECS,
- rowsOnPage = Constants.ROW_ON_PAGE,
- seqPage = model.seqPage
- };
- UserTicketResponse result = api.GetUserTicketApi(configuration, request);
- if (result.responseCode == Code.SUCCESS)
- {
- model.listTicket = result.listTicket ?? new List<Ticket>();
- model.totalPage = result.totalPage;
- }
- else
- {
- model.listTicket = new List<Ticket>();
- model.totalPage = "0";
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- model.listTicket = new List<Ticket>();
- }
- model.serverTime = DateTime.Now;
- return View(model);
- }
- public IActionResult TermUserTicketHistory(string termType, string status, string seqPage)
- {
- UserTicketHistoryModel model = new UserTicketHistoryModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token)) return Json(new { status = "error", message = "Session expired" });
- string msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- model.termType = termType;
- model.status = status;
- model.seqPage = seqPage ?? "1";
- UserTicketRequest request = new UserTicketRequest
- {
- gameId = termType,
- msisdn = msisdn,
- token = token,
- type = status,
- order = Constants.DECS,
- rowsOnPage = Constants.ROW_ON_PAGE,
- seqPage = model.seqPage
- };
- UserTicketResponse result = api.GetUserTicketApi(configuration, request);
- if (result.responseCode == Code.SUCCESS)
- {
- model.listTicket = result.listTicket ?? new List<Ticket>();
- model.totalPage = result.totalPage;
- }
- else
- {
- model.listTicket = new List<Ticket>();
- model.totalPage = "0";
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- model.listTicket = new List<Ticket>();
- }
- return PartialView("_TermUserTicketHistory", model);
- }
- [HttpPost]
- [ValidateAntiForgeryToken]
- public IActionResult TermResult(string termType)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- string lang = CultureInfo.CurrentCulture.Name;
- string langValue = (lang.StartsWith("en") || lang.StartsWith("fr")) ? "0" : "1";
- ResultOfTermRequest request = new ResultOfTermRequest
- {
- gameId = termType,
- language = langValue,
- token = token,
- type = Constants.TERM_HAS_NOT_RESULT_TYPE,
- order = Constants.DECS,
- rowsOnPage = "5",
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
- return Json(result);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- [HttpPost]
- public IActionResult ConfirmTicketData([FromBody] ConfirmTicketDataRequest request)
- {
- try
- {
- log.Info($"[ConfirmTicketData] START - Request: {JsonConvert.SerializeObject(request)}");
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token))
- {
- log.Info("[ConfirmTicketData] Session expired");
- return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- }
- request.token = token;
- request.msisdn = msisdn;
- request.language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1";
- request.requestId = Guid.NewGuid().ToString();
- ConfirmTicketDataResponse response = api.BuyTicketV2Api(configuration, request);
- log.Info($"[ConfirmTicketData] Call BuyTicketV2Api Response: {JsonConvert.SerializeObject(response)}");
- return Json(response);
- }
- catch (Exception ex)
- {
- log.Error("[ConfirmTicketData] EXCEPTION: ", ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- [HttpPost]
- public IActionResult ConfirmOTP([FromBody] ConfirmOTPRequest request)
- {
- try
- {
- log.Info($"[ConfirmOTP] START - Request: {JsonConvert.SerializeObject(request)}");
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token))
- {
- log.Info("[ConfirmOTP] Session expired");
- return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- }
- request.token = token;
- request.msisdn = msisdn;
- ConfirmOTPResponse response = api.ConfirmOTPApi(configuration, request);
- log.Info($"[ConfirmOTP] Call ConfirmOTPApi Response: {JsonConvert.SerializeObject(response)}");
- return Json(response);
- }
- catch (Exception ex)
- {
- log.Error("[ConfirmOTP] EXCEPTION: ", ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- [HttpPost]
- public IActionResult SendOTP()
- {
- try
- {
- log.Info("[SendOTP] START");
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token))
- {
- log.Info("[SendOTP] Session expired");
- return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- }
- SendOTPRequest request = new SendOTPRequest
- {
- msisdn = msisdn,
- token = token,
- language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
- channel = configuration.GetSection("channel").Value
- };
- log.Info($"[SendOTP] Call SendOTPApi Request: {JsonConvert.SerializeObject(request)}");
- SendOTPResponse response = api.SendOTPApi(configuration, request);
- log.Info($"[SendOTP] Call SendOTPApi Response: {JsonConvert.SerializeObject(response)}");
- return Json(response);
- }
- catch (Exception ex)
- {
- log.Error("[SendOTP] EXCEPTION: ", ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- [HttpPost]
- public IActionResult ConfirmBuyingTicketV2([FromBody] ConfirmBuyingTicketRequest request)
- {
- try
- {
- log.Info($"[ConfirmBuyingTicketV2] START - Request: {JsonConvert.SerializeObject(request)}");
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token))
- {
- log.Info("[ConfirmBuyingTicketV2] Session expired");
- return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- }
- var isWalletPayment = request.channelPayment == Constants.NATCASH_WALLET_TICKET;
- // The main-account flow keeps the existing OTP verification.
- if (!isWalletPayment)
- {
- ConfirmOTPRequest otpRequest = new ConfirmOTPRequest
- {
- otp = request.paymentCode,
- msisdn = msisdn,
- token = token,
- language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
- channel = configuration.GetSection("channel").Value
- };
- ConfirmOTPResponse otpResponse = api.ConfirmOTPApi(configuration, otpRequest);
- if (otpResponse.responseCode != Code.SUCCESS)
- {
- return Json(new { responseCode = otpResponse.responseCode, responseMessage = otpResponse.responseMessage });
- }
- }
- // Step 2: Proceed to Confirm buying
- request.token = token;
- request.msisdn = msisdn;
- request.requestId = Guid.NewGuid().ToString();
- request.language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1";
- request.channel = configuration.GetSection("channel").Value;
- log.Info($"[ConfirmBuyingTicketV2] Call ConfirmBuyingTicketApi Request: {JsonConvert.SerializeObject(request)}");
- ConfirmBuyingTicketResponse response = isWalletPayment
- ? api.ConfirmBuyingTicketV2Api(configuration, request, Constants.WALLET_PAYMENT_CHANNEL, request.walletPin)
- : api.ConfirmBuyingTicketApi(configuration, request);
- log.Info($"[ConfirmBuyingTicketV2] Call ConfirmBuyingTicketApi Response: {JsonConvert.SerializeObject(response)}");
- if (response.responseCode == Code.SUCCESS)
- {
- log.Info($"[ConfirmBuyingTicketV2] Payment Success. Updating user status for {msisdn}");
- UpdateUserStatus(msisdn, token);
- }
- log.Info($"[ConfirmBuyingTicketV2] END - Result: {JsonConvert.SerializeObject(response)}");
- return Json(response);
- }
- catch (Exception ex)
- {
- log.Error("[ConfirmBuyingTicketV2] EXCEPTION: ", ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- [HttpPost]
- public IActionResult ConfirmBuyingTicket([FromBody] ConfirmBuyingTicketRequest request)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- request.token = token;
- request.msisdn = msisdn;
- request.requestId = Guid.NewGuid().ToString();
- request.language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1";
- request.channel = configuration.GetSection("channel").Value;
- ConfirmBuyingTicketResponse response = api.ConfirmBuyingTicketApi(configuration, request);
- if (response.responseCode == Code.SUCCESS)
- {
- UpdateUserStatus(msisdn, token);
- }
- return Json(new
- {
- responseCode = response.responseCode,
- responseMessage = response.responseMessage,
- transId = response.transId,
- orderId = response.orderId,
- userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus")
- });
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- public IActionResult BuyTicket(string termType)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- model.termType = termType ?? Constants.PIC10_BASIC_CODE;
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- // Get active term
- ResultOfTermRequest request = new ResultOfTermRequest
- {
- gameId = model.termType,
- token = token,
- type = Constants.TERM_HAS_NOT_RESULT_TYPE,
- order = Constants.DECS,
- rowsOnPage = "1",
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
- if (result.responseCode == Code.SUCCESS && result.listTerm != null && result.listTerm.Count > 0)
- {
- model.listTerm = result.listTerm;
- }
- else
- {
- model.listTerm = new List<Term>();
- }
- if (model.termType == Constants.PIC10_BIGSMALL_CODE || model.termType == Constants.PIC10_ODDEVEN_CODE)
- {
- ResultOfTermRequest pastRequest = new ResultOfTermRequest
- {
- gameId = model.termType,
- token = token,
- type = Constants.TERM_HAS_RESULT_TYPE,
- order = Constants.DECS,
- fromDate = DateTime.Now.AddDays(-10).ToString("dd/MM/yyyy"),
- toDate = DateTime.Now.ToString("dd/MM/yyyy"),
- rowsOnPage = "5",
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse pastResult = api.GetResultOfTermApi(configuration, pastRequest);
- if (pastResult.responseCode == Code.SUCCESS && pastResult.listTerm != null)
- {
- var pastTerms = pastResult.listTerm.Take(5).ToList();
- pastTerms.Reverse(); // Display chronological order
- ViewBag.PastTerms = pastTerms;
- }
- else
- {
- ViewBag.PastTerms = new List<Term>();
- }
- }
- model.serverTime = DateTime.Now; return View(model);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return RedirectToAction("GameHome", new { termType = termType });
- }
- }
- public IActionResult TransferWinMoney()
- {
- if (!CheckAuthToken())
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- model.profile = HttpContext.Session.GetComplexData<Profile>("profile");
- model.userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.serverTime = DateTime.Now; return View(model);
- }
- [HttpPost]
- public IActionResult ConfirmTransfer(string otp, string phone, string amount, string channelPayment)
- {
- try
- {
- log.Info($"[ConfirmTransfer] START - otp: {otp}, phone: {phone}, amount: {amount}, channelPayment: {channelPayment}");
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token)) return Json(new { status = Code.SESSION_EXPIRED, message = "Session expired" });
- // Step 1: Verify OTP
- ConfirmOTPRequest otpRequest = new ConfirmOTPRequest
- {
- otp = otp,
- msisdn = msisdn,
- token = token,
- language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
- channel = configuration.GetSection("channel").Value
- };
- log.Info($"[ConfirmTransfer] Call ConfirmOTPApi Request: {JsonConvert.SerializeObject(otpRequest)}");
- ConfirmOTPResponse otpResponse = api.ConfirmOTPApi(configuration, otpRequest);
- log.Info($"[ConfirmTransfer] Call ConfirmOTPApi Response: {JsonConvert.SerializeObject(otpResponse)}");
- if (otpResponse.responseCode != Code.SUCCESS)
- {
- return Json(new { status = otpResponse.responseCode, message = otpResponse.responseMessage });
- }
- // Step 2: If OTP success, call Transfer Money Api
- TransferMoneyRequest xferRequest = new TransferMoneyRequest
- {
- msisdn = msisdn,
- msisdnReceive = phone,
- money = amount,
- otp = otp,
- token = token,
- channelPayment = channelPayment ?? Constants.BASIC_WALLET_TRANSFER,
- language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
- channel = configuration.GetSection("channel").Value
- };
- log.Info($"[ConfirmTransfer] Call TransferMoneyApi Request: {JsonConvert.SerializeObject(xferRequest)}");
- TransferMoneyResponse xferResponse = api.TransferMoneyApi(configuration, xferRequest);
- log.Info($"[ConfirmTransfer] Call TransferMoneyApi Response: {JsonConvert.SerializeObject(xferResponse)}");
- if (xferResponse.responseCode == Code.SUCCESS)
- {
- UpdateUserStatus(msisdn, token);
- }
- return Json(new
- {
- status = xferResponse.responseCode,
- message = xferResponse.responseMessage,
- paymentCode = xferResponse.paymentCode,
- responseCode = xferResponse.responseCode,
- userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus")
- });
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { status = Code.ERROR, message = ex.Message });
- }
- }
- private void UpdateUserStatus(string msisdn, string token)
- {
- try
- {
- log.Info($"[UpdateUserStatus] START - msisdn: {msisdn}");
- UserStatusRequest userStatusRequest = new UserStatusRequest { users = msisdn, token = token };
- log.Info($"[UpdateUserStatus] Call GetUserStatusApi Request: {JsonConvert.SerializeObject(userStatusRequest)}");
- UserStatus userStatusGet = api.GetUserStatusApi(configuration, userStatusRequest);
- log.Info($"[UpdateUserStatus] Call GetUserStatusApi Response: {JsonConvert.SerializeObject(userStatusGet)}");
- if (userStatusGet != null)
- {
- HttpContext.Session.SetComplexData("userStatus", userStatusGet);
- }
- log.Info("[UpdateUserStatus] END");
- }
- catch (Exception ex)
- {
- log.Error("[UpdateUserStatus] EXCEPTION: ", ex);
- }
- }
- public IActionResult Logout()
- {
- ClearCache();
- return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
- }
- }
- }
|