public async Task <ActionResult <Data.Models.Store> > PatchStore(string storeId, JsonPatchDocument <Data.Models.StoreForUpdate> patchDocument)
        {
            try
            {
                Data.Entities.Store dbStore = await _repository.GetStoreAsync(storeId);

                if (dbStore == null)
                {
                    return(NotFound());
                }

                var updatedStore = _mapper.Map <Data.Models.StoreForUpdate>(dbStore);
                patchDocument.ApplyTo(updatedStore, ModelState);

                _mapper.Map(updatedStore, dbStore);

                if (await _repository.SaveChangesAsync())
                {
                    Data.Models.Store savedStore = _mapper.Map <Data.Models.Store>(await _repository.GetStoreAsync(storeId));
                    return(Ok(savedStore));
                }
                else
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, "Unable to save to database"));
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Unable to patch store " + ex.Message));
            }
        }
        public async Task <ActionResult <Data.Models.Store> > CreateNewStore(Data.Models.StoreForCreate newStore)
        {
            Data.Entities.Store dbNewStore = null;
            try
            {
                dbNewStore = _mapper.Map <Data.Entities.Store>(newStore);
            }
            catch (Exception ex)
            {
                return(BadRequest("Input is in invalid format: " + ex.Message));
            }

            if (dbNewStore == null)
            {
                return(BadRequest("Input is in invalid format"));
            }

            await _repository.AddAsync <Data.Entities.Store>(dbNewStore);

            await _repository.SaveChangesAsync();

            Data.Models.Store addedStore = _mapper.Map <Data.Models.Store>(dbNewStore);

            var url = _linkgenerator.GetPathByAction(HttpContext, "GetStoreByStoreId", "Stores", addedStore);

            return(this.Created(url, addedStore));
        }
        public async Task <ActionResult <Data.Models.Store> > UpdateStore(string storeId, Data.Models.StoreForUpdate updatedStore)
        {
            try
            {
                Data.Entities.Store dbStore = await _repository.GetStoreAsync(storeId);

                if (dbStore == null)
                {
                    return(NotFound());
                }

                _mapper.Map(updatedStore, dbStore);
                if (await _repository.SaveChangesAsync())
                {
                    Data.Models.Store savedStore = _mapper.Map <Data.Models.Store>(dbStore);
                    return(Ok(savedStore));
                }
                else
                {
                    return(BadRequest("Failed to update."));
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Database exception: " + ex.Message));
            }
        }