public async Task <IActionResult> DeleteProvider(string token, int animeId, int crossRefType) { try { SessionInfoWithError s = await VerifyTokenAsync(token); if (s.Error != null) { return(s.Error); } Models.Database.WebCache_CrossRef_AniDB_Provider r = await _db.CrossRef_AniDB_Providers.FirstOrDefaultAsync(a => a.AniDBUserId == s.AniDBUserId && a.AnimeID == animeId && a.CrossRefType == (CrossRefType)crossRefType); if (r == null) { return(StatusCode(404, "CrossRef Not Found")); } _db.Remove(r); await _db.SaveChangesAsync(); return(Ok()); } catch (Exception e) { _logger.LogError(e, $"DELETEPROVIDER with Token={token} AnimeId={animeId} CrossRefType={(CrossRefType)crossRefType}"); return(StatusCode(500)); } }
public async Task <IActionResult> ProviderManage(string token, int id, bool approve) { try { SessionInfoWithError s = await VerifyTokenAsync(token); if (s.Error != null) { return(s.Error); } if ((s.Role & WebCache_RoleType.Admin) == 0) { return(StatusCode(403, "Admin Only")); } //Exists already? Models.Database.WebCache_CrossRef_AniDB_Provider r = await _db.CrossRef_AniDB_Providers.FirstOrDefaultAsync(a => a.WebCache_AniDB_ProviderID == id); if (r == null) { return(StatusCode(404, "CrossRef Not Found")); } if (approve) { r.Approved = WebCache_RoleType.Admin; List <Models.Database.WebCache_CrossRef_AniDB_Provider> reset_admins = await _db.CrossRef_AniDB_Providers.Where(a => a.AnimeID == r.AnimeID && a.CrossRefType == r.CrossRefType && a.AniDBUserId != s.AniDBUserId && a.Approved == WebCache_RoleType.Admin && a.WebCache_AniDB_ProviderID != r.WebCache_AniDB_ProviderID).ToListAsync(); foreach (Models.Database.WebCache_CrossRef_AniDB_Provider w in reset_admins) { w.Approved = WebCache_RoleType.None; } } else { r.Approved = WebCache_RoleType.None; } r.AniDBUserId = s.AniDBUserId; await _db.SaveChangesAsync(); return(Ok()); } catch (Exception e) { _logger.LogError(e, $"PROVIDERMANAGE with Token={token} Id={id} Approval:{approve}"); return(StatusCode(500)); } }
private async Task <IActionResult> GetProviderInternal(SessionInfoWithError s, int animeId, CrossRefType crossRefType) { List <WebCache_CrossRef_AniDB_Provider> results = new List <WebCache_CrossRef_AniDB_Provider>(); //First check for admin approved link Models.Database.WebCache_CrossRef_AniDB_Provider r = await _db.CrossRef_AniDB_Providers.FirstOrDefaultAsync(a => a.Approved == WebCache_RoleType.Admin && a.AnimeID == animeId && a.CrossRefType == crossRefType); if (r != null) { results.Add(r.ToWebCache(WebCache_ReliabilityType.AdminVerified, 0)); if ((s.Role & WebCache_RoleType.Admin) == 0) { return(new JsonResult(results)); } //If not Admin, early exit, otherwise other admin might want to evaluate } //Second Check for Moderator Approved Link List <Models.Database.WebCache_CrossRef_AniDB_Provider> rl = await _db.CrossRef_AniDB_Providers.Where(a => a.Approved == WebCache_RoleType.Moderator && a.AnimeID == animeId && a.CrossRefType == crossRefType).ToListAsync(); if (rl.Count > 0) { results.AddRange(rl.Select(a => a.ToWebCache(WebCache_ReliabilityType.ModeratorVerified, 0))); } //Then The user link r = await _db.CrossRef_AniDB_Providers.FirstOrDefaultAsync(a => a.AniDBUserId == s.AniDBUserId && a.AnimeID == animeId && a.CrossRefType == crossRefType); if (r != null) { results.Add(r.ToWebCache(WebCache_ReliabilityType.User, 0)); } //And Now, the popular ones. var res = await _db.CrossRef_AniDB_Providers.Where(a => a.AnimeID == animeId && a.CrossRefType == crossRefType && a.Approved == WebCache_RoleType.None).GroupBy(a => new { a.CrossRefID, a.EpisodesOverrideData }).Select(a => new { Count = a.Count(), Result = a.First() }).OrderByDescending(a => a.Count).Take(5).ToListAsync(); foreach (var n in res) { results.Add(n.Result.ToWebCache(WebCache_ReliabilityType.Popular, n.Count)); } if (results.Count > 0) { return(new JsonResult(results)); } return(StatusCode(404, "CrossRef Not Found")); }
private async Task AddProviderInternal(SessionInfoWithError s, WebCache_CrossRef_AniDB_Provider cross, bool?approve) { Models.Database.WebCache_CrossRef_AniDB_Provider r = await _db.CrossRef_AniDB_Providers.FirstOrDefaultAsync(a => a.AniDBUserId == s.AniDBUserId && a.AnimeID == cross.AnimeID && a.CrossRefType == cross.CrossRefType); if (r == null) { r = new Models.Database.WebCache_CrossRef_AniDB_Provider(); _db.Add(r); } WebCache_RoleType rt = GetRole(s.AniDBUserId); r.FillWith(cross); //If user is Admin, and this come with approve flag, let approve it, and clean any other approval from the db if ((rt & WebCache_RoleType.Admin) > 0 && approve.HasValue && approve.Value) { r.Approved = WebCache_RoleType.Admin; List <Models.Database.WebCache_CrossRef_AniDB_Provider> reset_admins = await _db.CrossRef_AniDB_Providers.Where(a => a.AnimeID == cross.AnimeID && a.CrossRefType == cross.CrossRefType && a.AniDBUserId != s.AniDBUserId && a.Approved == WebCache_RoleType.Admin).ToListAsync(); foreach (Models.Database.WebCache_CrossRef_AniDB_Provider w in reset_admins) { w.Approved = WebCache_RoleType.None; } } //If moderator, simple tag it. else if ((rt & WebCache_RoleType.Moderator) > 0) { r.Approved = WebCache_RoleType.Moderator; } else { r.Approved = WebCache_RoleType.None; } r.AniDBUserId = s.AniDBUserId; }