public async Task <IActionResult> AddProvider([FromBody] WebCache_CrossRef_AniDB_Provider cross, string token, bool?approve) { try { SessionInfoWithError s = await VerifyTokenAsync(token); if (s.Error != null) { return(s.Error); } if (approve.HasValue && approve.Value && (s.Role & WebCache_RoleType.Admin) == 0) { return(StatusCode(403, "Admin Only")); } //Exists already? await AddProviderInternal(s, cross, approve); await _db.SaveChangesAsync(); return(Ok()); } catch (Exception e) { _logger.LogError(e, $"ADDPROVIDER with Token={token}"); return(StatusCode(500)); } }
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; }