public async Task <Guid> Create(ServiceRequest request) { var Service = ServiceAggregate.CreateFromRequest(request); await _repo.Add(Service); return(Service.Id); }
public async Task Handle(AddServiceCommand message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } ServiceAggregateOccurrence occurrence = null; if (message.Occurrence != null) { occurrence = new ServiceAggregateOccurrence { Id = Guid.NewGuid().ToString(), Days = message.Occurrence.Days, StartDate = message.Occurrence.StartDate, EndDate = message.Occurrence.EndDate, StartTime = message.Occurrence.StartTime, EndTime = message.Occurrence.EndTime }; } var service = new ServiceAggregate { Id = message.Id, Name = message.Name, Description = message.Description, PartialImagesUrl = message.Images, Price = message.Price, Tags = message.Tags, ShopId = message.ShopId, CreateDateTime = message.CreateDateTime, UpdateDateTime = message.UpdateDateTime, TotalScore = 0, AverageScore = 0, Occurrence = occurrence }; if (!await _serviceRepository.Add(service)) { return; } _eventPublisher.Publish(new ServiceAddedEvent { Id = message.Id, Name = message.Name, Description = message.Description, Price = message.Price, ShopId = message.ShopId, CreateDateTime = message.CreateDateTime, UpdateDateTime = message.UpdateDateTime, CommonId = message.CommonId }); }
public void ServiceAggregate_ShouldBeDeleted() { //Arrange var request = AggregatesRequestBuilder.CreateRandomServiceRequest(); var service = ServiceAggregate.CreateFromRequest(request); //Act service.MarkAsDeleted(); //Assert service.IsDeleted.Should().BeTrue(); }
public void ServiceAggregate_CreateRandomFromRequest() { //Arrange var request = AggregatesRequestBuilder.CreateRandomServiceRequest(); //Act var service = ServiceAggregate.CreateFromRequest(request); // Assert service.Name.Should().Be(request.Name); service.IsDeleted.Should().BeFalse(); }
public void ServiceAggregate_UpdateRandomFromRequest() { //Arrange var createRequest = AggregatesRequestBuilder.CreateRandomServiceRequest(); var service = ServiceAggregate.CreateFromRequest(createRequest); var updateRequest = AggregatesRequestBuilder.CreateRandomServiceRequest(); //Act service.UpdateFromRequest(updateRequest); // Assert service.Name.Should().Be(updateRequest.Name); }
public void Enrich(IHalResponseBuilder halResponseBuilder, ServiceAggregate service) { if (halResponseBuilder == null) { throw new ArgumentNullException(nameof(halResponseBuilder)); } if (service == null) { throw new ArgumentNullException(nameof(service)); } halResponseBuilder.AddEmbedded(e => e.AddObject(_responseBuilder.GetService(service), (l) => { l.AddOtherItem("shop", new Dtos.Link("/" + Constants.RouteNames.Shops + "/" + service.ShopId)).AddSelf(Constants.RouteNames.Services + "/" + service.Id); })); }
public static Service ToModel(this ServiceAggregate aggregate) { if (aggregate == null) { throw new ArgumentNullException(nameof(aggregate)); } return(new Service { Id = aggregate.Id, Name = aggregate.Name, Description = aggregate.Description, Price = aggregate.Price, ShopId = aggregate.ShopId, UpdateDateTime = aggregate.UpdateDateTime, TotalScore = aggregate.TotalScore, AverageScore = aggregate.AverageScore, CreateDateTime = aggregate.CreateDateTime }); }
public async Task <AddCommentValidationResult> Validate(AddServiceCommentCommand command) { if (command == null) { throw new ArgumentNullException(nameof(command)); } var validationResult = Validate(command.ServiceId, command.Content, command.Score, Constants.DtoNames.Comment.ServiceId); if (!validationResult.IsValid) { return(validationResult); } ServiceAggregate service = null; // Check shop exists && 1 comment. if (!string.IsNullOrWhiteSpace(command.ServiceId)) { service = await _serviceRepository.Get(command.ServiceId); if (service == null) { return(new AddCommentValidationResult(ErrorDescriptions.TheServiceDoesntExist)); } var comments = await _serviceRepository.Search(new SearchServiceCommentParameter { ServiceId = service.Id, Subject = command.Subject }); if (comments.TotalResults > 0) { return(new AddCommentValidationResult(ErrorDescriptions.TheCommentAlreadyExists)); } } return(new AddCommentValidationResult()); }
public async Task <bool> Add(ServiceAggregate serviceAggregate) { if (serviceAggregate == null) { throw new ArgumentNullException(nameof(serviceAggregate)); } using (var transaction = await _context.Database.BeginTransactionAsync().ConfigureAwait(false)) { try { var record = serviceAggregate.ToModel(); var tags = new List <Models.ServiceTag>(); if (serviceAggregate.Tags != null && serviceAggregate.Tags.Any()) // Add tags { var tagNames = serviceAggregate.Tags; var connectedTags = _context.Tags.Where(t => tagNames.Any(tn => t.Name == tn)); foreach (var connectedTag in connectedTags) { tags.Add(new Models.ServiceTag { Id = Guid.NewGuid().ToString(), TagName = connectedTag.Name, ServiceId = serviceAggregate.Id }); } var connectedTagNames = (await connectedTags.Select(t => t.Name).ToListAsync().ConfigureAwait(false)); foreach (var notExistingTagName in tagNames.Where(tn => !connectedTagNames.Contains(tn))) { var newTag = new Models.Tag { Name = notExistingTagName, Description = notExistingTagName }; _context.Tags.Add(newTag); tags.Add(new Models.ServiceTag { Id = Guid.NewGuid().ToString(), TagName = notExistingTagName, ServiceId = serviceAggregate.Id, Tag = newTag }); } } if (serviceAggregate.PartialImagesUrl != null && serviceAggregate.PartialImagesUrl.Any()) // Add images { record.Images = serviceAggregate.PartialImagesUrl.Select(i => new Models.ServiceImage { Id = Guid.NewGuid().ToString(), PartialPath = i } ).ToList(); } if (serviceAggregate.Occurrence != null) // Add occurrence. { var days = new List <Models.ServiceOccurrenceDay>(); if (serviceAggregate.Occurrence.Days != null) { days = serviceAggregate.Occurrence.Days.Select(d => new Models.ServiceOccurrenceDay { Id = Guid.NewGuid().ToString(), DayId = ((int)d).ToString() }).ToList(); } record.Occurrence = new Models.ServiceOccurrence { Id = serviceAggregate.Occurrence.Id, StartDate = serviceAggregate.Occurrence.StartDate, EndDate = serviceAggregate.Occurrence.EndDate, StartTime = serviceAggregate.Occurrence.StartTime, EndTime = serviceAggregate.Occurrence.EndTime, Days = days }; } record.Tags = tags; _context.Services.Add(record); await _context.SaveChangesAsync().ConfigureAwait(false); transaction.Commit(); return(true); } catch (Exception ex) { transaction.Rollback(); return(false); } } }
public async Task <bool> Update(ServiceAggregate serviceAggregate) { if (serviceAggregate == null) { throw new ArgumentNullException(nameof(serviceAggregate)); } using (var transaction = await _context.Database.BeginTransactionAsync().ConfigureAwait(false)) { try { var record = await _context.Services.Include(s => s.Comments).FirstOrDefaultAsync(s => s.Id == serviceAggregate.Id).ConfigureAwait(false); if (record == null) { transaction.Rollback(); return(false); } record.AverageScore = serviceAggregate.AverageScore; record.Description = serviceAggregate.Description; record.Name = serviceAggregate.Name; record.Price = serviceAggregate.Price; record.ShopId = serviceAggregate.ShopId; record.TotalScore = serviceAggregate.TotalScore; record.UpdateDateTime = serviceAggregate.UpdateDateTime; var comments = serviceAggregate.Comments == null ? new List <ServiceComment>() : serviceAggregate.Comments; var commentIds = comments.Select(c => c.Id); if (record.Comments != null) // Update the comments. { var commentsToUpdate = record.Comments.Where(c => commentIds.Contains(c.Id)); var commentsToRemove = record.Comments.Where(c => !commentIds.Contains(c.Id)); var existingCommentIds = record.Comments.Select(c => c.Id); var commentsToAdd = comments.Where(c => !existingCommentIds.Contains(c.Id)); foreach (var commentToUpdate in commentsToUpdate) { var comment = comments.First(c => c.Id == commentToUpdate.Id); commentToUpdate.Score = comment.Score; commentToUpdate.Subject = comment.Subject; commentToUpdate.UpdateDateTime = comment.UpdateDateTime; commentToUpdate.Content = comment.Content; } foreach (var commentToRemove in commentsToRemove) { _context.Comments.Remove(commentToRemove); } foreach (var commentToAdd in commentsToAdd) { var rec = new Models.Comment { Id = commentToAdd.Id, Content = commentToAdd.Content, Score = commentToAdd.Score, CreateDateTime = commentToAdd.CreateDateTime, ServiceId = serviceAggregate.Id, UpdateDateTime = commentToAdd.UpdateDateTime, Subject = commentToAdd.Subject }; _context.Comments.Add(rec); } } var tags = new List <Models.ServiceTag>(); if (serviceAggregate.Tags != null && serviceAggregate.Tags.Any()) // Update the tags. { var tagNames = serviceAggregate.Tags; var connectedTags = _context.Tags.Where(t => tagNames.Any(tn => t.Name == tn)); foreach (var connectedTag in connectedTags) { tags.Add(new Models.ServiceTag { Id = Guid.NewGuid().ToString(), TagName = connectedTag.Name, ServiceId = serviceAggregate.Id }); } var connectedTagNames = (await connectedTags.Select(t => t.Name).ToListAsync().ConfigureAwait(false)); foreach (var notExistingTagName in tagNames.Where(tn => !connectedTagNames.Contains(tn))) { var newTag = new Models.Tag { Name = notExistingTagName, Description = notExistingTagName }; _context.Tags.Add(newTag); tags.Add(new Models.ServiceTag { Id = Guid.NewGuid().ToString(), TagName = notExistingTagName, ServiceId = serviceAggregate.Id, Tag = newTag }); } } if (serviceAggregate.PartialImagesUrl != null && serviceAggregate.PartialImagesUrl.Any()) // Update the images. { record.Images = serviceAggregate.PartialImagesUrl.Select(i => new Models.ServiceImage { Id = Guid.NewGuid().ToString(), PartialPath = i } ).ToList(); } if (serviceAggregate.Occurrence != null) // Update the occurrence. { var days = new List <Models.ServiceOccurrenceDay>(); if (serviceAggregate.Occurrence.Days != null) { days = serviceAggregate.Occurrence.Days.Select(d => new Models.ServiceOccurrenceDay { Id = Guid.NewGuid().ToString(), DayId = ((int)d).ToString() }).ToList(); } record.Occurrence = new Models.ServiceOccurrence { Id = serviceAggregate.Occurrence.Id, StartDate = serviceAggregate.Occurrence.StartDate, EndDate = serviceAggregate.Occurrence.EndDate, StartTime = serviceAggregate.Occurrence.StartTime, EndTime = serviceAggregate.Occurrence.EndTime, Days = days }; } record.Tags = tags; await _context.SaveChangesAsync().ConfigureAwait(false); transaction.Commit(); return(true); } catch { transaction.Rollback(); return(false); } } }
public async Task Update(ServiceAggregate item) { _context.Services.Update(item); await _context.SaveChangesAsync(); }
public async Task Add(ServiceAggregate item) { await _context.Services.AddAsync(item); await _context.SaveChangesAsync(); }
protected void GivenAServiceAggregate() { _aggregate = new ServiceAggregate <IInstrumentService>( new IInstrumentService[] { new Service1(), new Service2(), new Service2() }); }