예제 #1
0
        public IActionResult Update(InputChannelEvent model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Model is incomplete"));
            }

            var bearerValid = IsBearerValid(Request, model.Name);

            if (!bearerValid)
            {
                return(BadRequest("Authorisation Error"));
            }

            try
            {
                var newStatusContent = _updateStatusContent.AddOrUpdate(model);

                UpdateIsFreeSocket(newStatusContent);

                return(Ok(newStatusContent.Weight));
            }
            catch (ApplicationException)
            {
                return(new StatusCodeResult(500));
            }
            catch (NotImplementedException)
            {
                return(BadRequest("Name does not exist"));
            }
        }
예제 #2
0
        public ChannelEvent AddOrUpdate(InputChannelEvent inputChannelEventContent)
        {
            if (IsUserInDatabase(inputChannelEventContent.Name))
            {
                var channelUserId          = GetChannelUserIdByUrlSafeName(inputChannelEventContent.Name, true);
                var userid                 = channelUserId.NameId;
                var getLastMinuteContent   = GetLastMinute(userid);
                var lastMinuteContent      = getLastMinuteContent.ToList();
                var firstLastMinuteContent = lastMinuteContent.FirstOrDefault();



                if (!lastMinuteContent.Any())
                {
                    var newStatusContent = new ChannelEvent
                    {
                        ChannelUserId = userid,
                        Status        = inputChannelEventContent.Status,
                        DateTime      = DateTime.UtcNow,
                        Weight        = 1
                    };
                    _context.ChannelEvent.Add(newStatusContent);
                    _context.SaveChanges();

                    // update isfree cache
                    CacheIsFreeUpdateItem(channelUserId.NameId, newStatusContent);

                    return(newStatusContent);
                }

                if (firstLastMinuteContent == null)
                {
                    throw new ApplicationException("", new Exception("request from database went wrong"));
                }

                firstLastMinuteContent.Weight++;
                firstLastMinuteContent.DateTime = DateTime.UtcNow;
                _context.Attach(firstLastMinuteContent).State = EntityState.Modified;
                _context.SaveChanges();

                // update isfree cache
                CacheIsFreeUpdateItem(channelUserId.NameId, firstLastMinuteContent);

                return(firstLastMinuteContent);
            }
            else
            {
                throw new NotImplementedException("", new Exception("fail"));
            }
        }
예제 #3
0
        public void IsFreeFalseRecentCallTest()
        {
            var userid = AddTestAccountUserAndGetId();

            var newUpdateStatus = new InputChannelEvent
            {
                Status = 1,
                Name   = "testaccount"
            };

            _sqlStatus.AddOrUpdate(newUpdateStatus);

            var isFreeNow = _sqlStatus.IsFree(userid);

            Assert.AreEqual(isFreeNow.IsFree, false);
        }
예제 #4
0
        public ApiControllerTest()
        {
            var builder = new DbContextOptionsBuilder <AppDbContext>();

            builder.UseInMemoryDatabase(nameof(ApiControllerTest));
            var options = builder.Options;

            var provider = new ServiceCollection()
                           .AddMemoryCache()
                           .BuildServiceProvider();

            _memoryCache = provider.GetService <IMemoryCache>();


            var services = new ServiceCollection();

            // services.AddSingleton<IHubClients, FakeIHubClients>();
            // services.AddSingleton<IHubContext<DataHub>, FakeDataHub>();

            _context   = new AppDbContext(options);
            _sqlStatus = new SqlUpdateStatus(_context, _memoryCache);

            var serviceProvider = services.BuildServiceProvider();

            // _hubClients = serviceProvider.GetRequiredService<IHubClients>();
            // _dataHubContext = serviceProvider.GetRequiredService<IHubContext<DataHub>>();


            // Add example data
            var existAccount = _sqlStatus.GetChannelUserIdByUrlSafeName("testaccount", true);

            if (existAccount != null)
            {
                return;
            }

            _sqlStatus.AddUser("Test Account");

            var newUpdateStatus = new InputChannelEvent
            {
                Status = 1,
                Name   = "testaccount",
            };

            _sqlStatus.AddOrUpdate(newUpdateStatus);
        }
예제 #5
0
        public void IsFreeTrueEventLongTimeAgoTest()
        {
            var userid = AddTestAccountUserAndGetId();

            var newUpdateStatus = new InputChannelEvent
            {
                Status = 1,
                Name   = "testaccount"
            };
            var newAddedObject = _sqlStatus.AddOrUpdate(newUpdateStatus);

            newAddedObject.DateTime = new DateTime(2015, 01, 01, 00, 00, 00);
            _sqlStatus.Update(newAddedObject);

            var isFreeNow = _sqlStatus.IsFree(userid);

            Assert.AreEqual(isFreeNow.IsFree, true);
        }
예제 #6
0
        public void AddOrUpdateTest()
        {
            AddTestAccountUserAndGetId();

            var newUpdateStatus = new InputChannelEvent()
            {
                Status = 1,
                Name   = "testaccount"
            };

            _sqlStatus.AddOrUpdate(newUpdateStatus);
            var countItemsInDatabase = _context.ChannelEvent.OrderBy(r => r.Id).Count();

            Assert.AreEqual(countItemsInDatabase, 1);

            _sqlStatus.AddOrUpdate(newUpdateStatus);
            countItemsInDatabase = _context.ChannelEvent.OrderBy(r => r.Id).Count();
            Assert.AreEqual(countItemsInDatabase, 1);
        }