public async Task <IActionResult> RemoveItemFromCollection([FromBody] ODataActionParameters parameters) { if (!ModelState.IsValid) { foreach (var value in ModelState.Values) { foreach (var err in value.Errors) { System.Diagnostics.Debug.WriteLine(err.Exception?.Message); } } return(BadRequest(ModelState)); } String user = (String)parameters["User"]; String usrId = ControllerUtil.GetUserID(this); if (String.IsNullOrEmpty(usrId) || user != usrId) { throw new Exception("Failed ID"); } int collid = (int)parameters["ID"]; int refid = (int)parameters["RefID"]; TagRefType reftype = (TagRefType)parameters["RefType"]; if (String.IsNullOrEmpty(user) || refid <= 0) { return(BadRequest("Invalid input")); } // Check collection header var collcnt = (from collheader in this._context.UserCollections where collheader.ID == collid && collheader.User == user select collheader.ID).Count(); if (collcnt != 1) { return(BadRequest("Invalid collection")); } // Check existence of item var nitem = _context.UserCollectionItems.SingleOrDefault(p => p.RefType == reftype && p.RefID == refid && p.ID == collid); if (nitem == null) { return(Ok(false)); } _context.UserCollectionItems.Remove(nitem); await _context.SaveChangesAsync(); return(Ok(true)); }
public async Task <IActionResult> AddItemToCollection([FromBody] ODataActionParameters parameters) { if (!ModelState.IsValid) { foreach (var value in ModelState.Values) { foreach (var err in value.Errors) { System.Diagnostics.Debug.WriteLine(err.Exception?.Message); } } return(BadRequest(ModelState)); } String user = (String)parameters["User"]; String usrId = ControllerUtil.GetUserID(this); if (String.IsNullOrEmpty(usrId) || user != usrId) { throw new Exception("Failed ID"); } int collid = (int)parameters["ID"]; int refid = (int)parameters["RefID"]; TagRefType reftype = (TagRefType)parameters["RefType"]; var createAtValue = parameters["CreatedAt"]; DateTime? createdAt = null; if (createAtValue != null) { createdAt = ((DateTimeOffset)createAtValue).DateTime; } else { createdAt = DateTime.Today; } if (String.IsNullOrEmpty(user) || refid <= 0) { return(BadRequest("Invalid input")); } // Check collection header var collcnt = (from collheader in this._context.UserCollections where collheader.ID == collid && collheader.User == user select collheader.ID).Count(); if (collcnt != 1) { return(BadRequest("Invalid collection")); } // Check existence of item var itemcnt = (from collitem in this._context.UserCollectionItems where collitem.RefType == reftype && collitem.RefID == refid && collitem.ID == collid select collitem.ID).Count(); if (itemcnt > 0) { return(NoContent()); } // Check existence of ref. id switch (reftype) { case TagRefType.KnowledgeItem: break; case TagRefType.ExerciseItem: default: { var refcnt = (from exec in _context.ExerciseItems where exec.ID == refid select exec.ID).Count(); if (refcnt != 1) { return(BadRequest("Invalid refence ID")); } } break; } var nitem = new UserCollectionItem(); nitem.ID = collid; nitem.RefID = refid; nitem.RefType = reftype; nitem.CreatedAt = createdAt; this._context.UserCollectionItems.Add(nitem); await this._context.SaveChangesAsync(); return(Ok(nitem)); }