public void UpdatePoints(TechTreePointType pointType, Func <int, int> pointsUpdater) { var record = Db.Query().CommandText("select top 1 id,amount from techtreepoints (UPDLOCK) where owner = @owner and pointType = @pointType") .SetParameter("@owner", _owner) .SetParameter("@pointType", (int)pointType) .ExecuteSingleRow(); var id = 0; var currentPoints = 0; if (record != null) { id = record.GetValue <int>(0); currentPoints = record.GetValue <int>("amount"); } var updatedPoints = pointsUpdater(currentPoints); if (updatedPoints < 0) { updatedPoints = 0; } if (updatedPoints == currentPoints) { return; } if (id > 0) { Db.Query().CommandText("update techtreepoints set amount = @amount where id = @id") .SetParameter("@id", id) .SetParameter("@amount", updatedPoints) .ExecuteNonQuery().ThrowIfEqual(0, ErrorCodes.SQLUpdateError); } else { Db.Query().CommandText("insert into techtreepoints (owner,pointType,amount) values (@owner,@pointType,@amount)") .SetParameter("@owner", _owner) .SetParameter("@pointType", (int)pointType) .SetParameter("@amount", updatedPoints) .ExecuteNonQuery().ThrowIfEqual(0, ErrorCodes.SQLInsertError); } }
public Points(TechTreePointType type, int amount) { this.type = type; this.amount = amount; }