Beispiel #1
0
        public async void CreateAnnouncement(
            EStatusCode expectedStatus,
            CreateAnnouncement mutation,
            bool?withVehicle = false
            )
        {
            if (withVehicle.Value)
            {
                EntitiesFactory.NewVehicle(id: mutation.VehicleId).Save();
            }
            var result = await MutationsHandler.Handle(mutation);

            Assert.Equal(expectedStatus, result.Status);
            if (expectedStatus == EStatusCode.Success)
            {
                var announcementDb = await MutationsDbContext.Announcements
                                     .Where(a => a.Id == mutation.Id)
                                     .FirstOrDefaultAsync();

                Assert.NotNull(announcementDb);
                Assert.Equal(mutation.PricePurchase, announcementDb.PricePurchase);
                Assert.Equal(mutation.PriceSale, announcementDb.PriceSale);
                Assert.Equal(mutation.VehicleId, announcementDb.Vehicle.Id);
                Assert.Null(announcementDb.DateSale);
            }
        }
        public HttpResponseMessage Post([FromBody] AnnouncementModel model)
        {
            var createAnnouncementAction = new CreateAnnouncement(model.ToEntity());
            var result = PerformAction <CreateAnnouncement, Announcement>(createAnnouncementAction);

            return(Request.CreateResponse(result.ValidationResult.GetStatusCode(HttpStatusCode.Created),
                                          new ActionReponse <AnnouncementConfirmationModel>(new AnnouncementConfirmationModel(createAnnouncementAction.NumberOfUsersEmailed), result.ValidationResult)));
        }
Beispiel #3
0
        void PropagateToCo(CreateAnnouncement request)
        {
            var client = new RestClient(request.Cooperator);

            var requestToSend = new RestRequest($"topics/{request.TopicName}/announcements", Method.POST);

            requestToSend.AddParameter("Content", request.Content);
            requestToSend.AddParameter("CreationTime", request.CreationTime);

            client.Execute(requestToSend);
        }
Beispiel #4
0
        void Create(IDbConnection connection, CreateAnnouncement request)
        {
            var announcement = new Announcement
            {
                Content      = request.Content,
                CreationTime = request.CreationTime.HasValue ? DateTime.FromBinary(request.CreationTime.Value) : DateTime.UtcNow
            };

            connection.Insert(announcement);
            if (!string.IsNullOrEmpty(request.Cooperator))
            {
                request.CreationTime = announcement.CreationTime.ToBinary();
                Propagators.ScheduleTopicOperation(request.TopicName, () => PropagateToCo(request));
            }
        }
Beispiel #5
0
        public void Create(CreateAnnouncement request)
        {
            var topicLock = Locks.TakeTopicLock(request.TopicName);

            lock (topicLock)
            {
                if (Locks.TopicsRecoveryLocks.ContainsKey(request.TopicName))
                {
                    throw new Exception($"Topic {request.TopicName} is inconsistent");
                }

                using (var connection = Connections.ConnectToInitializedTopic(request.TopicName))
                {
                    Create(connection, request);
                    Monitor.PulseAll(topicLock);
                }
            }
        }
Beispiel #6
0
 public async Task <ActionResult <MutationResult> > CreateAsync([FromBody] CreateAnnouncement mutation)
 {
     return(GetResult(await _mutationsHanlder.Handle(mutation)));
 }