using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using YTManager; using YTManager.Models; using Hangfire.Storage; namespace YTManager.Controllers { [Produces("application/json")] [Route("api/Admin")] public class AdminController : Controller { // ID for mass update job, used to tell if the job is running or not. public static string Mass_Updater_ID { get; } = "2013066213"; // POST api/Admin/Trigger_Mass_Update // Trigger a mass channel update. [HttpPost("Trigger_Mass_Update")] public IActionResult Trigger_Mass_Update() { Hangfire.RecurringJob.Trigger(Mass_Updater_ID); return Ok(); } // POST api/Admin/Update/YTChannelID // Update the videos for a specific channel. [HttpPost("Update/{YoutubeID}")] public IActionResult Update([FromRoute] string YoutubeID) { Hangfire.BackgroundJob.Enqueue(() => Tasks.FetchVideos.ChannelUpdate(Startup.DBStr, YoutubeID)); return Ok(); } // POST api/Admin/Start_Updater // Ensures that the background YT Channel update API is running. [HttpPost("Start_Updater")] public IActionResult Start_Updater() { Hangfire.RecurringJob.AddOrUpdate( Mass_Updater_ID, () => Tasks.FetchVideos.MassUpdate(Startup.DBStr), Hangfire.Cron.Hourly); return Ok(); } // GET api/Admin/Updater // Check if the periodic update job is enqued. [HttpGet("Update")] public IActionResult Get_Update_Status() { bool exists = Hangfire.JobStorage.Current.GetConnection().GetRecurringJobs().Any(j => j.Id == Mass_Updater_ID); return Ok(exists ? "true" : "false"); } } }