示例#1
0
        public async Task <IActionResult> Index(CancellationToken token)
        {
            if (!Request.Query.ContainsKey("companyId") || !Request.Query.ContainsKey("filmSessionId"))
            {
                return(NotFound());
            }

            Request.Query.TryGetValue("companyId", out var companyId);
            var company = await _companyRepository.FindByIdAsync(long.Parse(companyId), token);

            Request.Query.TryGetValue("filmSessionId", out var filmSessionId);
            var currentFilmSession = await _filmSessionRepository.FindByIdAsync(long.Parse(filmSessionId), token);

            var poster = _blobRepository.Get(currentFilmSession.Film.Id);

            var tickets          = (await _ticketRepository.FindByFilmSessionIdAsync(currentFilmSession.Id, token)).ToArray();
            var unavailableSeats = new long[tickets.Length][];

            for (var i = 0; i < tickets.Length; i++)
            {
                unavailableSeats[i] = new[] { tickets[i].Row, tickets[i].Column };
            }


            var viewModel = new BookingViewModel
            {
                Company          = company,
                Film             = currentFilmSession.Film,
                FilmSession      = currentFilmSession,
                Poster           = poster,
                UnavailableSeats = JsonConvert.SerializeObject(unavailableSeats)
            };

            return(View(viewModel));
        }
        public async Task WhenContainer_FullLiveCycle_ShouldPass()
        {
            var container = new BlobRepository(_blobStore);

            await container.CreateContainer(_workContext);

            IReadOnlyList <string> filePaths = await container.List(_workContext, "*");

            await filePaths.ForEachAsync(x => container.Delete(_workContext, x));

            const string filePath = "testBlob";
            const string data     = "This is data";
            await container.Set(_workContext, filePath, data);

            filePaths = await container.List(_workContext, "*");

            filePaths.Should().NotBeNull();
            filePaths.Count.Should().Be(1);
            filePaths[0].Should().Be(filePath);

            string readData = await container.Get(_workContext, filePath);

            readData.Should().NotBeNullOrWhiteSpace();
            readData.Should().Be(data);

            await container.Delete(_workContext, filePath);

            filePaths = await container.List(_workContext, "*");

            filePaths.Should().NotBeNull();
            filePaths.Count.Should().Be(0);
        }
示例#3
0
        public async Task <IActionResult> Index(CancellationToken token)
        {
            if (!Request.Query.ContainsKey("companyId") || !Request.Query.ContainsKey("filmId"))
            {
                return(NotFound());
            }

            Request.Query.TryGetValue("companyId", out var companyId);
            var company = await _companyRepository.FindByIdAsync(long.Parse(companyId), token);

            Request.Query.TryGetValue("filmId", out var filmId);
            var currentFilm = await _filmRepository.FindByIdAsync(long.Parse(filmId), token);

            var poster = _blobRepository.Get(currentFilm.Id);

            var posters       = new Dictionary <long, string>();
            var upcomingFilms = (await _filmRepository.FindByCompanyIdAsync(company.Id, token))
                                .Where(p => p.IsActive && p.ReleaseDate > DateTime.Now).ToList();

            foreach (var film in upcomingFilms)
            {
                posters[film.Id] = _blobRepository.Get(film.Id);
            }

            var filmSessions = (await _filmSessionRepository.FindByFilmIdAsync(currentFilm.Id, token))
                               .Where(p => p.StartTime > DateTime.Now);

            var groupedSessions = filmSessions.GroupBy(p => p.Hall.Cinema.Name);

            var viewModel = new FilmViewModel
            {
                Company         = company,
                Film            = currentFilm,
                Poster          = poster,
                GroupedSessions = groupedSessions.ToList(),
                UpcomingFilms   = upcomingFilms,
                Posters         = posters
            };

            return(View(viewModel));
        }
示例#4
0
        public async Task <IActionResult> Index(CancellationToken token)
        {
            if (!Request.Query.ContainsKey("companyId"))
            {
                return(NotFound());
            }

            Request.Query.TryGetValue("companyId", out var companyId);
            var company = await _companyRepository.FindByIdAsync(long.Parse(companyId), token);

            var posters = new Dictionary <long, string>();

            var currentFilms = (await _filmRepository.FindByCompanyIdAsync(company.Id, token))
                               .Where(p => p.IsActive && p.ReleaseDate < DateTime.Now).ToList();

            foreach (var film in currentFilms)
            {
                posters[film.Id] = _blobRepository.Get(film.Id);
            }

            var upcomingFilms = (await _filmRepository.FindByCompanyIdAsync(company.Id, token))
                                .Where(p => p.IsActive && p.ReleaseDate > DateTime.Now).ToList();

            foreach (var film in upcomingFilms)
            {
                posters[film.Id] = _blobRepository.Get(film.Id);
            }

            var viewModel = new HomeViewModel
            {
                Company       = company,
                CurrentFilms  = currentFilms,
                UpcomingFilms = upcomingFilms,
                Posters       = posters
            };

            return(View(viewModel));
        }
        public async Task GivenFileDoesNotExist_WhenGet_ShouldThrow()
        {
            var container = new BlobRepository(_blobStore);

            await container.CreateContainer(_workContext);

            IReadOnlyList <string> filePaths = await container.List(_workContext, "*");

            await filePaths.ForEachAsync(x => container.Delete(_workContext, x));

            const string filePath = "testBlob";
            Func <Task>  act      = async() => await container.Get(_workContext, filePath);

            await act.Should().ThrowAsync <RequestFailedException>();
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger LyricCreatorFunction processed a request.");

            // Can call function to warm it up
            if (!string.IsNullOrEmpty(req.Query["warmup"]))
            {
                return(new OkObjectResult("OK"));
            }

            int lines;

            if (!int.TryParse(req.Query["lines"], out lines))
            {
                lines = 10;
            }

            var suffix = string.Empty;

            if (string.IsNullOrEmpty(req.Query["profanities"]) || req.Query["profanities"] == "false")
            {
                suffix = "Clean";
            }

            var prefix = string.Empty;

            if (!string.IsNullOrEmpty(req.Query["genre"]))
            {
                var genres = (Genre[])Enum.GetValues(typeof(Genre));

                if (genres.Any(g => g.ToString() == req.Query["genre"]))
                {
                    prefix = req.Query["genre"];
                }
            }

            var chain1Name         = $"{prefix}MarkovChainOrder1{suffix}";
            var chain2Name         = $"{prefix}MarkovChainOrder2{suffix}";
            var lineLengthDistName = $"{prefix}LineLengthDistribution";

            var output = new List <string>();

            log.LogInformation("Loading Markov Data");
            var markovModel = await BlobRepository <MarkovChain> .Get(chain1Name);

            var markovOrder2Model = await BlobRepository <MarkovChain> .Get(chain2Name);

            var lineLengthDistribution = await BlobRepository <LineLengthDistribution> .Get(lineLengthDistName);

            for (int i = 0; i < Math.Min(lines, 200); i++)
            {
                var lyricLine = new List <string>();

                var    rand      = new Random();
                string pred1     = null;
                var    pred2     = Word.StartOfLine;
                string successor = null;

                var endOfLine = false;

                log.LogInformation("Building lyric");

                while (!endOfLine)
                {
                    var lineEndProbability = lineLengthDistribution.GetLineEndProbability(lyricLine.Count);

                    // Use first order markov for beginning
                    if (pred1 == null)
                    {
                        successor = GetNextSuccessor(rand, markovModel, pred2, lineEndProbability);
                    }
                    else
                    {
                        // Use 2nd order markov
                        successor = GetNextSuccessor(rand, markovOrder2Model, $"{pred1} {pred2}", lineEndProbability);

                        // if 2nd order fails, fall back to first order
                        if (string.IsNullOrEmpty(successor))
                        {
                            successor = GetNextSuccessor(rand, markovModel, pred2, lineEndProbability);
                        }
                    }

                    if (successor == Environment.NewLine || lyricLine.Count > 50)
                    {
                        endOfLine = true;
                    }
                    else
                    {
                        lyricLine.Add(successor);
                        pred1 = pred2;
                        pred2 = successor.ToLowerInvariant();
                    }
                }

                output.Add(string.Join(" ", lyricLine));
            }

            return(new JsonResult(output));
        }