using System; using System.Linq; using System.Threading.Tasks; using System.Collections.Generic; using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; using EnumsNET; using AyaNova.Util; using AyaNova.Api.ControllerHelpers; using AyaNova.Biz; using AyaNova.Models; namespace AyaNova.Biz { /// /// Handle data seeding and other trial ops /// internal class TrialBiz : BizObject, IJobObject { internal TrialBiz(AyContext dbcontext, long currentUserId, AuthorizationRoles userRoles) { ct = dbcontext; UserId = currentUserId; CurrentUserRoles = userRoles; BizType = AyaType.TrialSeeder; } //////////////////////////////////////////////////////////////////////////////////////////////// //JOB / OPERATIONS // public async Task HandleJobAsync(OpsJob job) { //Hand off the particular job to the corresponding processing code //NOTE: If this code throws an exception the caller (JobsBiz::ProcessJobsAsync) will automatically set the job to failed and log the exeption so //basically any error condition during job processing should throw up an exception if it can't be handled //There might be future other job types so doing it like this for all biz job handlers for now switch (job.JobType) { case JobType.SeedTestData: await ProcessSeedTestDataAsync(job); // ProcessSeedTestData(job); break; default: throw new System.ArgumentOutOfRangeException($"TrialBiz.HandleJobAsync -> Invalid job type{job.JobType.ToString()}"); } } /// /// Handle the job /// /// private async Task ProcessSeedTestDataAsync(OpsJob job) {// //NOTE: If this code throws an exception the caller will automatically set the job to failed and log the exeption so //basically any error condition during job processing should throw up an exception if it can't be handled await JobsBiz.UpdateJobStatusAsync(job.GId, JobStatus.Running); await JobsBiz.LogJobAsync(job.GId, $"LT:StartJob"); JObject jobData = JObject.Parse(job.JobInfo); var seedLevel = (Seeder.Level.SeedLevel)jobData["seedLevel"].Value(); var timeZoneOffset = jobData["timeZoneOffset"].Value(); var e2e = jobData["e2e"].Value(); var forceEmail = jobData["forceEmail"].Value(); var appendPassword = jobData["appendPassword"].Value(); var seed = new Util.Seeder(); await seed.SeedDatabaseAsync(seedLevel, job.GId, timeZoneOffset,forceEmail,appendPassword, e2e); await JobsBiz.LogJobAsync(job.GId, "LT:JobCompleted"); await JobsBiz.UpdateJobStatusAsync(job.GId, JobStatus.Completed); } //Other job handlers here... ///////////////////////////////////////////////////////////////////// }//eoc }//eons