From 15160749e14993401c5f4ba3dfb10026aa895668 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 27 Mar 2023 23:40:22 +0000 Subject: [PATCH] case 4447 --- .vscode/launch.json | 2 +- server/Controllers/OrderController.cs | 2 +- server/Controllers/RvrController.cs | 2 +- ...ubscriptionServerTrialRequestController.cs | 154 ++++++++++++++++++ 4 files changed, 157 insertions(+), 3 deletions(-) create mode 100644 server/Controllers/SubscriptionServerTrialRequestController.cs diff --git a/.vscode/launch.json b/.vscode/launch.json index 7cade77..43d3bb4 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -33,7 +33,7 @@ "SOCKEYE_DB_CONNECTION": "Server=localhost;Username=postgres;Password=sockeye;Database=sockeye;CommandTimeout=300;", "SOCKEYE_DATA_PATH": "c:\\temp\\sockeye", "SOCKEYE_USE_URLS": "http://*:7676;", - //"SOCKEYE_PERMANENTLY_ERASE_DATABASE": "true", + //"XXXXXSOCKEYE_PERMANENTLY_ERASE_DATABASE": "true", //"SOCKEYE_REPORT_RENDERING_TIMEOUT":"1", "SOCKEYE_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_14\\bin" }, diff --git a/server/Controllers/OrderController.cs b/server/Controllers/OrderController.cs index 1ba2828..d3c92c8 100644 --- a/server/Controllers/OrderController.cs +++ b/server/Controllers/OrderController.cs @@ -13,7 +13,7 @@ namespace Sockeye.Api.Controllers [Produces("application/json")] [Route("api/order")] - public class OrderController : ControllerBase + public class OrderController : ControllerBase //RECEIVE ORDERS FROM VENDOR (MyCommerce) { private readonly AyContext ct; diff --git a/server/Controllers/RvrController.cs b/server/Controllers/RvrController.cs index 2d73b8b..b8e943b 100644 --- a/server/Controllers/RvrController.cs +++ b/server/Controllers/RvrController.cs @@ -11,7 +11,7 @@ using System.ComponentModel.DataAnnotations; namespace Sockeye.Api.Controllers { - [Route("rvr")]//v8 fetch license route + [Route("rvr")]//v8 TRIAL REQUEST HANDLER ROUTE [Produces("application/json")] public class RvrController : ControllerBase { diff --git a/server/Controllers/SubscriptionServerTrialRequestController.cs b/server/Controllers/SubscriptionServerTrialRequestController.cs new file mode 100644 index 0000000..a8c1fad --- /dev/null +++ b/server/Controllers/SubscriptionServerTrialRequestController.cs @@ -0,0 +1,154 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Routing; +using Microsoft.Extensions.Logging; +using Microsoft.EntityFrameworkCore; +using System.Linq; +using Sockeye.Models; +using Sockeye.Biz; +using Sockeye.Api.ControllerHelpers; +using System.ComponentModel.DataAnnotations; + +namespace Sockeye.Api.Controllers +{ + [ApiController] + [ApiVersion("8.0")] + [Route("subscription-server-trial-request")]//SUBSCRIPTION SERVER TRIAL REQUEST HANDLER ROUTE + [Produces("application/json")] + public class SubscriptionServerTrialRequestController : ControllerBase + { + + private readonly AyContext ct; + private readonly ILogger log; + private readonly ApiServerState serverState; + + /// + /// ctor + /// + /// + /// + /// + public SubscriptionServerTrialRequestController(AyContext dbcontext, ILogger logger, ApiServerState apiServerState) + { + ct = dbcontext; + log = logger; + serverState = apiServerState; + } + + public class dtoSubscriptionServerTrialRequest + { + [Required] + public string DataCenter { get; set; } + [Required, EmailAddress] + public string Email { get; set; } + [Required] + public string Company { get; set; } + [Required] + public string Name { get; set; } + } + + + + //######################################################### + //REQUEST ROUTE CALLED FROM CONTACT FORMS APP + //######################################################### + [HttpPost] + public async Task Post([FromBody] dtoSubscriptionServerTrialRequest r) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + if (!ModelState.IsValid) + { + return BadRequest(ModelState); + } + + + //Already a pending request? + if (await ct.SubscriptionServer.Where(z => z.ServerState == ServerState.Requested && z.TrialEmail == r.Email).AnyAsync()) + { + return Ok("Request awaiting approval"); + } + + //can't do this if there is an active server already in action + if (await ct.SubscriptionServer.Where(z => (z.ServerState != ServerState.Destroyed) && z.TrialEmail == r.Email).AnyAsync()) + { + return BadRequest("E1000 - Can't trial; there is already an active server for this email address"); + } + + + /* + new SelectListItem { Value = "SF", Text = "San Francisco" }, + new SelectListItem { Value = "NY", Text = "New York" }, + new SelectListItem { Value = "TOR", Text = "Toronto" }, + new SelectListItem { Value = "AMS", Text = "Amsterdam" }, + new SelectListItem { Value = "LON", Text = "London" }, + new SelectListItem { Value = "FFT", Text = "Frankfurt" }, + new SelectListItem { Value = "SNG", Text = "Singapore" }, + new SelectListItem { Value = "BNG", Text = "Bangalore" }, + new SelectListItem { Value = "SYD", Text = "Sydney Australia" } + */ + + + //Everything seems to be in order, save the request and return ok + var newObject = new SubscriptionServer(); + switch (r.DataCenter) + { + case "SF": + newObject.TimeZone = "America/Los_Angeles"; + break; + case "NY": + newObject.TimeZone = "America/New_York"; + break; + case "TOR": + newObject.TimeZone = "America/Toronto"; + break; + case "AMS": + newObject.TimeZone = "Europe/Amsterdam"; + break; + case "LON": + newObject.TimeZone = "Europe/London"; + break; + case "FFT": + newObject.TimeZone = "Europe/Berlin"; + break; + case "SNG": + newObject.TimeZone = "Asia/Singapore"; + break; + case "BNG": + newObject.TimeZone = "Asia/Kolkata"; + break; + case "SYD": + newObject.TimeZone = "Australia/Sydney"; + break; + } + + newObject.Name = "XXX.onayanova.com"; + newObject.ServerState = ServerState.Requested; + newObject.SubscriptionExpire = System.DateTime.UtcNow.AddDays(8); + newObject.Trial = true; + newObject.DataCenter = r.DataCenter; + newObject.TrialCompany = r.Company; + newObject.TrialContact = r.Name; + newObject.TrialEmail = r.Email; + + SubscriptionServerBiz biz = SubscriptionServerBiz.GetBiz(ct); + SubscriptionServer o = await biz.CreateAsync(newObject); + if (o == null) + { + var msg = ($"Unexpected error (code SE-555 was returned to customer) processing a new trial license request:{biz.GetErrorsAsString}"); + log.LogError(msg); + await NotifyEventHelper.AddOpsProblemEvent(msg); + return BadRequest($"E1000 - Error processing request code SE-555 contact support");//don't want to leak any info so need to check sockeye log if get this error + } + else + return Accepted(); + } + + + + //------------ + + + }//eoc +}//eons \ No newline at end of file