public Task UpdateFarmer(Repository.Interfaces.Models.FarmerModel farmerToUpdate)
 {
     return(Task.Run(() =>
     {
         PerformInsertUpdate(farmerToUpdate, true);
     }));
 }
        public Task UpdateFarmer(Repository.Interfaces.Models.FarmerModel farmerToUpdate)
        {
            var existingFarmer = (from f in _mockFarmers
                                  where f.Id == farmerToUpdate.Id
                                  select f).FirstOrDefault();

            if (existingFarmer != null)
            {
                _mockFarmers.Remove(existingFarmer);
            }
            _mockFarmers.Add(farmerToUpdate);

            return(Task.FromResult <object>(null));
        }
        private void PerformInsertUpdate(Repository.Interfaces.Models.FarmerModel farmerToUpdate, bool needsSync)
        {
            var updateCmdSql = string.Empty;

            using (var queryFarmerCmd = Connection.Prepare("SELECT * FROM Farmer WHERE Id = @Id"))
            {
                queryFarmerCmd.Bind("@Id", farmerToUpdate.Id);
                if (queryFarmerCmd.Step() == SQLiteResult.ROW)
                {
                    updateCmdSql = "UPDATE Farmer " +
                                   " SET Firstname = @Firstname, " +
                                   "     Lastname = @Lastname, " +
                                   "     Speciality = @Speciality, " +
                                   "     Country = @Country, " +
                                   "     HasAnimals = @HasAnimals, " +
                                   "     HasWineyards = @HasWineyards, " +
                                   "     HasWholeGrainFields = @HasWholeGrainFields, " +
                                   "     NeedsSync = @NeedsSync" +
                                   " WHERE Id = @Id";
                }
                else
                {
                    updateCmdSql = "INSERT INTO Farmer(Id, Firstname, Lastname, Speciality, Country, HasAnimals, HasWineyards, HasWholeGrainFields, NeedsSync) " +
                                   "VALUES(@Id, @Firstname, @Lastname, @Speciality, @Country, @HasAnimals, @HasWineyards, @HasWholeGrainFields, @NeedsSync)";
                }
            }

            using (var updateCmd = Connection.Prepare(updateCmdSql))
            {
                updateCmd.Bind("@Id", farmerToUpdate.Id);
                updateCmd.Bind("@Firstname", farmerToUpdate.Firstname);
                updateCmd.Bind("@Lastname", farmerToUpdate.Lastname);
                updateCmd.Bind("@Speciality", farmerToUpdate.Speciality);
                updateCmd.Bind("@Country", farmerToUpdate.Country);
                updateCmd.Bind("@HasAnimals", farmerToUpdate.HasAnimals ? 1 : 0);
                updateCmd.Bind("@HasWineyards", farmerToUpdate.HasWineyards ? 1 : 0);
                updateCmd.Bind("@HasWholeGrainFields", farmerToUpdate.HasWholeGrainFields ? 1 : 0);
                updateCmd.Bind("@NeedsSync", needsSync ? 1 : 0);

                var result = updateCmd.Step();
                if (result != SQLiteResult.DONE)
                {
                    throw new Exception(string.Format("Unable to insert/update record with the following result: {0}", result.ToString()));
                }
            }
        }