public void PointsEarned(double points, MembershipPointsType type)
        {
            var @event = new MembershipPointsEarnedEvent(Id, points, type, DateTime.UtcNow, Version);

            ApplyEvent(@event);
            AppendEvent(@event);
        }
예제 #2
0
 public MembershipPointsEarnedEvent(Guid id, double amount, MembershipPointsType pointsType, DateTime earnedAt, int currentVersion)
 {
     Id             = id;
     Amount         = amount;
     PointsType     = pointsType;
     EarnedAt       = earnedAt;
     Timestamp      = DateTime.UtcNow;
     CurrentVersion = currentVersion;
     AppliedVersion = currentVersion + 1;
 }
        public async Task PointsEarned(Guid id, double points, MembershipPointsType type)
        {
            var entity = await GenericEntityFactory <Membership> .GetEntityAsync(_simpleEventStoreDbContext, id.ToString());

            entity.PointsEarned(points, type);

            await _simpleEventStoreDbContext.SavePendingEventsAsync(entity.PendingEvents, 1, "Sample");

            await _eventBusService.Publish(entity.PendingEvents);
        }
        public static MembershipPoint New(double amount, MembershipPointsType type, DateTime earnedAt)
        {
            var newPoint = new MembershipPoint(amount, type, earnedAt);

            return(newPoint);
        }
 protected MembershipPoint(double amount, MembershipPointsType type, DateTime earnedAt)
 {
     Amount   = amount;
     Type     = type;
     EarnedAt = earnedAt;
 }
예제 #6
0
        public async Task EarnPoints_ShouldReturn_Ok(string customerUsername, int pointsToAdd, MembershipPointsType membershipPointsType)
        {
            var readModelContext = (ReadModelDbContext)_fixture.Services.GetService(typeof(ReadModelDbContext));

            var customer = (await readModelContext.Customers.FirstOrDefaultAsync(c => c.Username == customerUsername));
            var member   = (await readModelContext.Memberships.FirstOrDefaultAsync(m => m.CustomerId == customer.Id));

            var currentPoint   = member.TotalPoints;
            var currentVersion = member.Version;
            var request        = new EarnPointsAggregateMembershipCommand(member.Id, membershipPointsType, pointsToAdd);
            var response       = await _client.PutRequestAsStringContent("/Membership/points", request);

            response.EnsureSuccessStatusCode();
            var content = await response.Content.ReadAsStringAsync();

            _output.WriteLine(content);

            var jsonObject = JObject.Parse(content);

            jsonObject.ShouldContainKeyAndValue("totalPoints", pointsToAdd + (int)currentPoint);
            jsonObject.ShouldContainKey("version");
            var newVersion = (int)jsonObject.GetValue("version");

            newVersion.ShouldBeGreaterThan(currentVersion);
        }
예제 #7
0
 public MembershipPointReadModel(double amount, MembershipPointsType type, DateTime earnedAt)
 {
     Amount   = amount;
     Type     = type;
     EarnedAt = earnedAt;
 }