Beispiel #1
0
        private async Task <IActionResult> BulkOperation(BoxUpdateModel model, bool clear)
        {
            if (!CanPost(model.Id))
            {
                return(Unauthorized());
            }
            var box = await DbContext.Boxes.SingleOrDefaultAsync(x => x.Id == model.Id);

            if (box == null)
            {
                return(BadRequest("Box not found."));
            }
            model.Added   = model.Added ?? Enumerable.Empty <int>();
            model.Removed = model.Removed ?? Enumerable.Empty <int>();
            model.Updated = model.Updated ?? Enumerable.Empty <BoxUnitUpdateModel>();
            if (model.Added.Any() || model.Removed.Any() || model.Updated.Any())
            {
                if (clear)
                {
                    await DbContext.BoxUnits.Where(x => x.BoxId == model.Id && !model.Added.Contains(x.UnitId)).DeleteAsync();
                }
                else if (model.Removed.Any())
                {
                    await DbContext.BoxUnits.Where(x => x.BoxId == model.Id && model.Removed.Contains(x.UnitId)).DeleteAsync();
                }
                if (model.Added.Any())
                {
                    var existing = box.BoxUnits.Select(x => x.UnitId).ToList();
                    var real     = await DbContext.Units.Where(x => model.Added.Contains(x.Id)).Select(x => x.Id).ToListAsync();

                    var actual = real.Except(existing);
                    if (actual.Any())
                    {
                        var newItems = actual.Select(x => new BoxUnit
                        {
                            BoxId  = model.Id,
                            UnitId = x
                        });
                        DbContext.BoxUnits.AddRange(newItems);
                    }
                }
                if (model.Updated.Any())
                {
                    foreach (var item in model.Updated)
                    {
                        await DbContext.BoxUnits.Where(x => x.BoxId == model.Id && x.UnitId == item.Id).UpdateAsync(x => new BoxUnit {
                            Flags = item.Flags
                        });
                    }
                }
                await DbContext.SaveChangesSafe();
            }
            return(Ok(1));
        }
Beispiel #2
0
 public async Task <IActionResult> Flags([FromBody] BoxUpdateModel model)
 {
     return(await BulkOperation(model, false));
 }
Beispiel #3
0
 public async Task <IActionResult> Set([FromBody] BoxUpdateModel model)
 {
     return(await BulkOperation(model, true));
 }