public async Task SaveNewFlag(ClaimsPrincipal claim, Trooper trooper, TrooperFlag flag) { var user = await _userManager.GetUserAsync(claim); if (_dbContext.Entry(trooper).State == EntityState.Detached) { _dbContext.Attach(trooper); } flag.AuthorId = user.Id; flag.CreatedOn = DateTime.UtcNow; trooper.Flags.Add(flag); await _dbContext.SaveChangesAsync(); }
public async Task <Trooper?> AddFlagAsync(Trooper t, TrooperFlag flag) { var scope = _services.CreateScope(); var db = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>(); var user = await db.FindAsync <Trooper>(t.Id); await db.Entry(user).Collection(i => i.Flags).LoadAsync(); if (user is null) { return(null); } user.Flags.Add(flag); db.Update(user); await db.SaveChangesAsync(); return(user); }
public async Task <Trooper?> RemoveFlagAsync(Trooper t, TrooperFlag flag) { var scope = _services.CreateScope(); var db = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>(); var user = await db.FindAsync <Trooper>(t.Id); if (user is null) { return(null); } await db.Entry(user).Collection(i => i.Flags).LoadAsync(); var toRemove = user.Flags.Where(x => x.FlagId == flag.FlagId).ToArray(); foreach (var f in toRemove) { user.Flags.Remove(f); } db.Update(user); await db.SaveChangesAsync(); return(user); }