Exemplo n.º 1
0
 public void RaiseSalary(EmployeeId id, decimal amount)
 {
     var employee = _data[id];
     _data[id] = new Employee(
         employee.Id,
         employee.Name,
         employee.HomeAddress,
         employee.Salary + amount
         );
  }
Exemplo n.º 2
0
 public void UpdateHomeAddress(EmployeeId id, Address homeAddress)
 {
     var employee = _data[id];
     _data[id] = new Employee(
         employee.Id,
         employee.Name,
         homeAddress,
         employee.Salary
         );
 }
Exemplo n.º 3
0
 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();
     }
 }
Exemplo n.º 4
0
        public void Save(Employee employee)
        {
            foreach (var evt in employee.PendingEvents)
            {
                _events.Add(new KeyValuePair<Guid, IVersionedEvent<Guid>>(
                    employee.Id,
                    evt
                    ));

                Bus.RaiseEvent(evt);
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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
            });
        }
Exemplo n.º 7
0
        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();
            }
        }