Beispiel #1
0
        public async Task <CommandResult> ExecuteAsync(CashbackCommandsHandler handler)
        {
            var obj = new Sale(Id, CustomerName);

            foreach (var item in Items)
            {
                var album = await handler.DbContext
                            .Albums
                            .Include(i => i.Genre)
                            .ThenInclude(t => t.Cashbacks)
                            .Where(w => w.Id == item.AlbumId)
                            .FirstOrDefaultAsync();

                if (album == null)
                {
                    return(await Task.FromResult(new CommandResult(ErrorCode.NotFound, $"Album with id {item.AlbumId} was not found")));
                }
                var saleItem = new SaleItem(obj.Id, album.Id);
                saleItem.Sale  = obj;
                saleItem.Album = album;
                saleItem.CalcCashback();
                obj.AddItem(saleItem);
            }

            obj.TotalValue    = obj.Items.Sum(s => s.Album.Value);
            obj.TotalCashback = obj.Items.Sum(s => s.CashbackValue);

            await handler.DbContext.Sales.AddAsync(obj);

            await handler.DbContext.SaleItems.AddRangeAsync(obj.Items);

            var rows = await handler.DbContext.SaveChangesAsync();

            return(await Task.FromResult(new CommandResult(rows, ErrorCode.None)));
        }
Beispiel #2
0
 public async Task <CommandResult> GetErrorAsync(CashbackCommandsHandler handler)
 {
     if (Items == null || Items.Length == 0)
     {
         return(await Task.FromResult(new CommandResult(ErrorCode.InvalidParameters, "There are no items for this sale")));
     }
     if (string.IsNullOrWhiteSpace(CustomerName))
     {
         return(await Task.FromResult(new CommandResult(ErrorCode.InvalidParameters, "Parameter customerName is required")));
     }
     return(await Task.FromResult(new CommandResult(ErrorCode.None)));
 }
        public Empty_DbContextFixture()
        {
            var builder1 = new DbContextOptionsBuilder <CashbackDbContext>()
                           .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString())
                           .EnableSensitiveDataLogging()
                           .ConfigureWarnings(warnings => warnings
                                              .Throw(CoreEventId.IncludeIgnoredWarning)
                                              .Throw(RelationalEventId.QueryClientEvaluationWarning));

            DbContext = new CashbackDbContext(builder1.Options);

            CommandsHandler = new CashbackCommandsHandler(DbContext);

            CashbackStartup.Configure(null);
        }
        public async Task <CommandResult> ExecuteAsync(CashbackCommandsHandler handler)
        {
            var obj = await handler.DbContext.Genres.Where(w => w.Id == Id).FirstOrDefaultAsync();

            if (obj != null)
            {
                return(await Task.FromResult(new CommandResult(0, ErrorCode.DuplicateUniqueIdentifier)));
            }

            obj = new Models.Genre(Id, Name);
            foreach (var item in Cashback)
            {
                obj.AddCashbackConfig(new Models.Cashback(item.Id, obj.Id, item.DayOfWeek, item.Percent));
            }

            await handler.DbContext.Genres.AddAsync(obj);

            await handler.DbContext.Cashbacks.AddRangeAsync(obj.Cashbacks);

            var rows = await handler.DbContext.SaveChangesAsync();

            return(await Task.FromResult(new CommandResult(rows, ErrorCode.None)));
        }
        public async Task <CommandResult> ExecuteAsync(CashbackCommandsHandler handler)
        {
            var obj = await handler.DbContext.Albums.Where(w => w.Id == Id).FirstOrDefaultAsync();

            if (obj != null)
            {
                return(await Task.FromResult(new CommandResult(0, ErrorCode.DuplicateUniqueIdentifier)));
            }

            var objGenre = await handler.DbContext.Genres.Where(w => w.Id == GenreId).FirstOrDefaultAsync();

            if (objGenre == null)
            {
                return(await Task.FromResult(new CommandResult(0, ErrorCode.NotFound, "Genre with id was not found")));
            }

            obj = new Album(Id, SpotifyId, Name, objGenre.Id);

            await handler.DbContext.Albums.AddAsync(obj);

            var rows = await handler.DbContext.SaveChangesAsync();

            return(await Task.FromResult(new CommandResult(rows, ErrorCode.None)));
        }
Beispiel #6
0
 public GenresController(CashbackCommandsHandler commandsHandler, CashbackQueriesHandler queriesHandler)
 {
     _commandsHandler = commandsHandler;
     _queriesHandler  = queriesHandler;
 }
Beispiel #7
0
 public GenresTests(Empty_DbContextFixture fixture)
 {
     Fixture         = fixture;
     DbContext       = fixture.DbContext;
     CommandsHandler = fixture.CommandsHandler;
 }
 public Task <CommandResult> GetErrorAsync(CashbackCommandsHandler handler)
 {
     return(Task.FromResult(new CommandResult(ErrorCode.None)));
 }
Beispiel #9
0
        public async Task <CommandResult> ExecuteAsync(CashbackCommandsHandler handler)
        {
            if (handler.DbContext.Genres != null && handler.DbContext.Genres.Count() > 0)
            {
                return(await Task.FromResult(new CommandResult(ErrorCode.None)));
            }

            if (string.IsNullOrEmpty(AccessToken))
            {
                Authorize();
            }

            IList <GenreViewModel> result = new List <GenreViewModel>();
            var defaultCashback           = new DefaultCashback();

            HttpClient httpClient = new HttpClient();
            var        genresUrls = new[] {
                "browse/categories/pop?country=BR",
                "browse/categories/mpb?country=BR",
                "browse/categories/classical?country=BR",
                "browse/categories/rock?country=BR"
            };

            var rows = 0;

            HttpResponseMessage response = null;

            foreach (var url in genresUrls)
            {
                httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", AccessToken);
                response = await httpClient.GetAsync("https://api.spotify.com/v1/" + url);

                var json = JsonConvert.DeserializeObject <GenreViewModel>(await response.Content.ReadAsStringAsync());

                if (response.IsSuccessStatusCode && !result.Any(c => c.Name == json.Name))
                {
                    result.Add(json);
                }
            }

            foreach (var item in result)
            {
                var id       = RandomId.NewId();
                var cashback = new List <CashbackCommand>();
                var lst      = defaultCashback.GetDefaultCashback(id, item.Name);
                lst.ForEach(f => cashback.Add(new CashbackCommand()
                {
                    Id = f.Id, GenreId = f.GenreId, DayOfWeek = f.DayOfWeek, Percent = f.Percent
                }));

                var cmd = new CreateGenreCommand()
                {
                    Id       = id,
                    Name     = item.Name,
                    Cashback = cashback
                };

                var rs = await handler.Handle(cmd);

                rows += rs.Rows;
            }

            return(await Task.FromResult(new CommandResult(rows, ErrorCode.None)));
        }
        public async Task <CommandResult> ExecuteAsync(CashbackCommandsHandler handler)
        {
            if (handler.DbContext.Albums.Count() > 0)
            {
                return(await Task.FromResult(new CommandResult(ErrorCode.None)));
            }

            var genres = handler.DbContext.Genres;

            if (genres == null || genres.Count() == 0)
            {
                await handler.Handle(new PopulateGenresCommand());
            }

            if (string.IsNullOrEmpty(AccessToken))
            {
                Authorize();
            }

            IList <AlbumViewModel> result = new List <AlbumViewModel>();

            HttpClient httpClient = new HttpClient();
            var        rows       = 0;

            HttpResponseMessage response = null;

            foreach (var genre in genres)
            {
                var baseUrl = "search?query={genre}&type=album&market=BR&offset=0&limit=50";
                httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", AccessToken);
                response = await httpClient.GetAsync("https://api.spotify.com/v1/" + baseUrl.Replace("{genre}", genre.Name.ToLower()));

                if (response.IsSuccessStatusCode)
                {
                    var json = JsonConvert.DeserializeAnonymousType(await response.Content.ReadAsStringAsync(),
                                                                    new
                    {
                        albums = new
                        {
                            href  = string.Empty,
                            items = new[]
                            {
                                new {
                                    id   = string.Empty,
                                    name = string.Empty
                                }
                            }
                        }
                    });

                    foreach (var item in json.albums.items)
                    {
                        result.Add(new AlbumViewModel()
                        {
                            Name    = item.name,
                            GenreId = genre.Id,
                            Id      = item.id
                        });
                    }
                }
            }

            foreach (var item in result)
            {
                var id  = RandomId.NewId();
                var cmd = new CreateAlbumCommand()
                {
                    Id        = id,
                    SpotifyId = item.Id,
                    GenreId   = item.GenreId,
                    Name      = item.Name
                };

                var rs = await handler.Handle(cmd);

                rows += rs.Rows;
            }

            return(await Task.FromResult(new CommandResult(rows, ErrorCode.None)));
        }