public void RaiseSalary(EmployeeId id, decimal amount) { var employee = _data[id]; _data[id] = new Employee( employee.Id, employee.Name, employee.HomeAddress, employee.Salary + amount ); }
public void UpdateHomeAddress(EmployeeId id, Address homeAddress) { var employee = _data[id]; _data[id] = new Employee( employee.Id, employee.Name, homeAddress, employee.Salary ); }
public void CreateEmployee(EmployeeId id, FullName name, decimal initialSalary) { using (var session = _store.OpenSession()) { var employee = new Employee(id, name, Address.NotInformed, initialSalary ); session.Store(employee); session.SaveChanges(); } }
public void Save(Employee employee) { foreach (var evt in employee.PendingEvents) { _events.Add(new KeyValuePair<Guid, IVersionedEvent<Guid>>( employee.Id, evt )); Bus.RaiseEvent(evt); } }
public void Save(Employee employee) { var head = GetHead(employee.Id); var storedVersion = GetStoredVersionOf(head); if (storedVersion != (employee.Version - employee.PendingEvents.Count())) throw new InvalidOperationException("Invalid object state."); if (head == null) { SaveNewEmployee(employee); } else { SaveEmployeeEvents(employee); } foreach (var evt in employee.PendingEvents) Bus.RaiseEvent(evt); }
private void SaveEmployeeEvents( Employee employee ) { var patches = new List<PatchRequest>(); foreach (var evt in employee.PendingEvents) { patches.Add(new PatchRequest { Type = PatchCommandType.Add, Name = "Events", Value = RavenJObject.FromObject(evt, _serializer) }); } var localId = $"employees/{employee.Id}"; var addEmployeeEvents = new PatchCommandData() { Key = localId, Patches = patches.ToArray() }; var updateMetadata = new ScriptedPatchCommandData() { Key = localId, Patch = new ScriptedPatchRequest { Script = $"this['@metadata']['{EmployeeEntityVersion}'] = {employee.Version}; " } }; _store.DatabaseCommands.Batch(new ICommandData[] { addEmployeeEvents, updateMetadata }); }
private void SaveNewEmployee(Employee employee) { using (var session = _store.OpenSession()) { var document = new EmployeeEvents( employee.Id, employee.PendingEvents ); session.Store(document); session.Advanced.GetMetadataFor(document) .Add(EmployeeEntityVersion, employee.Version); session.SaveChanges(); } }