Example #1
0
        public async Task <IHttpActionResult> Post(PosStaffModel newPosStaff)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (newPosStaff.UserName == null)
            {
                logger.Info("'UserName' is null from post request");
                return(BadRequest("'UserName' should not be null"));
            }

            if (dbContext.PosStaffModels.FirstOrDefault(f => f.UserName == newPosStaff.UserName) != null)
            {
                logger.Info("Duplicate Name: " + newPosStaff.UserName);
                return(Conflict());
            }

            dbContext.PosStaffModels.Add(newPosStaff);
            try
            {
                await dbContext.SaveChangesAsync();
            }
            catch (DbUpdateException ex)
            {
                var _            = ex.InnerException as UpdateException;
                var sqlException = _?.InnerException as SqlException;
                if (sqlException != null && sqlException.Errors.OfType <SqlError>()
                    .Any(se => se.Number == 2601 || se.Number == 2627 /* PK/UKC violation */))
                {
                    // quite sure it's the duplicate key exception, no need to cancel.
                    logger.Error(
                        "Duplicate key inserting was detected, will respond with 'HttpStatusCode.Conflict', the posted detail: " +
                        newPosStaff);
                    return(StatusCode(HttpStatusCode.Conflict));
                }
                // it's something else...
                throw;
            }

            return(Ok(newPosStaff));
        }
Example #2
0
        /// <summary>
        /// update target People
        /// </summary>
        /// <param name="id">target people id</param>
        /// <param name="updateStaff">replace with this entity</param>
        /// <returns>succeed or not.</returns>
        public async Task <IHttpActionResult> Put(int id, PosStaffModel updateStaff)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != updateStaff.Id)
            {
                return(BadRequest("Unmatched id between url parameter and posted entity"));
            }

            //if (updateStaff.Detail.Id == 0)
            //{
            //    dbContext.Entry(updateStaff.Detail).State = EntityState.Added;
            //}
            //else
            //{
            //    dbContext.Entry(updateStaff.Detail).State = EntityState.Modified;
            //}

            dbContext.Entry(updateStaff).State = EntityState.Modified;
            try
            {
                await dbContext.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                // someone else is updating concurrently.
            }
            catch (Exception exx)
            {
                return(StatusCode(HttpStatusCode.NotAcceptable));
            }
            return(StatusCode(HttpStatusCode.NoContent));
        }