public async Task <QueryResultList <VechicleList> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql        = $@"
                select 
                    v.id, v.year, v.board, v.color_name, v.color_hex,
                    v.brand_name, v.model_name, v.fuel_name
                from view_vehicles_list v
                left join announcements a on a.id_vehicle=v.id
                where a.date_sale is null
                    {(Year != null    ? "and v.year=@Year " : null)}
                    {(FuelId  != null ? "and v.fuel_id=@FuelId "   : null)}
                    {(ColorId != null ? "and v.color_id=@ColorId " : null)}
                    {(!string.IsNullOrWhiteSpace(ModelId) ? "and v.model_id=@ModelId " : null)}
                    {(!string.IsNullOrWhiteSpace(BrandId) ? "and v.brand_id=@BrandId " : null)}
                order by v.date_creation desc;
            ";
            var parameters = new
            {
                Year,
                ColorId,
                FuelId,
                ModelId,
                BrandId
            };
            var vehicles = await handler.DbConnection.QueryAsync <VechicleList>(sql, parameters);

            return(new QueryResultList <VechicleList>(vehicles));
        }
Exemple #2
0
 public async Task <QueryResultOne <ModelDetail> > ValidateAsync(VehicleQueriesHandler handler)
 {
     if (string.IsNullOrWhiteSpace(Id))
     {
         return(new QueryResultOne <ModelDetail>(EStatusCode.InvalidData, $"Parameter {nameof(Id)} is required"));
     }
     return(await Task.FromResult <QueryResultOne <ModelDetail> >(null));
 }
 public async Task <QueryResultList <AnnouncementReportList> > ValidateAsync(VehicleQueriesHandler handler)
 {
     if (StartDate > EndDate)
     {
         return(new QueryResultList <AnnouncementReportList>(EStatusCode.InvalidData, $"Paramenter {nameof(StartDate)} cannot be greater than the {nameof(EndDate)}"));
     }
     return(await Task.FromResult <QueryResultList <AnnouncementReportList> >(null));
 }
 public AuthenticationHandler(
     IOptionsMonitor <AuthenticationSchemeOptions> options,
     ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock,
     VehicleMutationsHandler mutationsHandler, VehicleQueriesHandler queriesHandler
     ) : base(options, logger, encoder, clock)
 {
     _mutationsHanlder = mutationsHandler;
     _queriesHanlder   = queriesHandler;
 }
Exemple #5
0
 public BaseTests(VehicleFixture fixture, string url)
 {
     Request            = fixture.Request;
     EntitiesFactory    = fixture.EntitiesFactory;
     MutationsDbContext = fixture.MutationsHandler.DbContext;
     MutationsHandler   = fixture.MutationsHandler;
     QueriesHandler     = fixture.QueriesHandler;
     Uri = new Uri($"{fixture.Client.BaseAddress}{url}");
 }
Exemple #6
0
        public async Task <QueryResultList <BrandList> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql    = @"
                select id, name
                from brands
                order by name;
            ";
            var brands = await handler.DbConnection.QueryAsync <BrandList>(sql);

            return(new QueryResultList <BrandList>(brands));
        }
Exemple #7
0
        public async Task <QueryResultList <ColorList> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql    = @"
                select 
                    c.id, c.name, c.hex as color_hex
                from colors c
                order by c.name asc;
            ";
            var colors = await handler.DbConnection.QueryAsync <ColorList>(sql);

            return(new QueryResultList <ColorList>(colors));
        }
Exemple #8
0
        public async Task <QueryResultList <FuelList> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql   = @"
                select 
                    f.id, f.name
                from fuels f
                order by f.name asc;
            ";
            var fuels = await handler.DbConnection.QueryAsync <FuelList>(sql);

            return(new QueryResultList <FuelList>(fuels));
        }
        public async Task <QueryResultList <AnnouncementSelectList> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql           = $@"
                select a.id, a.vehicle_name as name
                from view_announcements_list a
                where a.date_sale is null
                {(!IncludeReserved ? " and not exists(select r.id from reservations r where r.id_announcement=a.id)" : null)}
                order by a.vehicle_name asc;
            ";
            var announcements = await handler.DbConnection.QueryAsync <AnnouncementSelectList>(sql);

            return(new QueryResultList <AnnouncementSelectList>(announcements));
        }
        public async Task <QueryResultList <ModelSelectList> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql    = $@"
                select m.id, m.name
                from models m
                where 1=1
                {(!string.IsNullOrWhiteSpace(BrandId) ? "and m.id_brand=@BrandId" : null)}
                order by m.name asc;
            ";
            var models = await handler.DbConnection.QueryAsync <ModelSelectList>(sql, new { BrandId });

            return(new QueryResultList <ModelSelectList>(models));
        }
Exemple #11
0
        public async Task <QueryResultList <ReservationList> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql          = @"
                select 
                    r.id, r.contact_name, r.contact_phone,
                    r.vehicle_model_name, r.vehicle_brand_name
                from view_reservations_list r
                where r.date_sale is null
                order by r.date_creation asc;
            ";
            var reservations = await handler.DbConnection.QueryAsync <ReservationList>(sql);

            return(new QueryResultList <ReservationList>(reservations));
        }
        public async Task <QueryResultList <VehicleSelectList> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql      = $@"
                select v.id, v.name 
                from view_vehicles_list v
                where 1=1
                {(!IncludeAnnouncements ? "and not exists(select a.id from announcements a where a.id_vehicle=v.id)" : null)}
                {(!string.IsNullOrWhiteSpace(ModelId) ? "and v.model_id=@ModelId" : null)}
                order by v.name asc;
            ";
            var vehicles = await handler.DbConnection.QueryAsync <VehicleSelectList>(sql, new { ModelId });

            return(new QueryResultList <VehicleSelectList>(vehicles));
        }
Exemple #13
0
        public async Task <QueryResultOne <VehiclePhoto> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var fileName  = $"{Id}.jpg";
            var fileBytes = await Base64.LoadFileAsync(EPath.Photos, fileName);

            if (fileBytes == null)
            {
                return(new QueryResultOne <VehiclePhoto>(EStatusCode.NotFound, $"File with {nameof(Id)}: {Id} does not exists"));
            }
            var fileResult = new VehiclePhoto {
                Bytes = fileBytes, FileName = fileName
            };

            return(new QueryResultOne <VehiclePhoto>(fileResult));
        }
Exemple #14
0
        public async Task <QueryResultOne <BrandDetail> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql   = @"
                select b.id, b.name 
                from brands b
                where b.id=@Id;
            ";
            var brand = await handler.DbConnection.QueryFirstOrDefaultAsync <BrandDetail>(sql, new { Id });

            if (brand == null)
            {
                return(new QueryResultOne <BrandDetail>(EStatusCode.NotFound, $"Brand with id: {Id} does not exists"));
            }
            return(new QueryResultOne <BrandDetail>(brand));
        }
Exemple #15
0
        public async Task <QueryResultList <AnnouncementList> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sortColumnIndex = Array.IndexOf(columnsSort, SortColumn) + 1;
            var sortOrderStr    = SortOrder == EOrder.Asc ? "asc" : "desc";
            var sqlBody         = $@"
                from view_announcements_list a
                where 1=1
                    {(!IncludeReserved? $" and not exists(select r.id from reservations r where r.id_announcement=a.id)" : null)}
                    {(!IncludeSold && DateSale == null ? $" and a.date_sale is null" : null)}
                    {(DateSale != null ? $" and date_format(a.date_sale,'%Y-%m-%d')=@DataSale" : null)}
                    {(Year != null ? $" and a.vehicle_year=@Year" : null)}
                    {(ColorId != null ? $" and a.color_id=@ColorId" : null)}
                    {(BrandId != null ? $" and a.brand_id=@BrandId" : null)}
                    {(ModelId != null ? $" and a.model_id=@ModelId" : null)}
            ";

            var sqlResult = $@"
                -- paginate rows
                select
                    a.id, a.date_creation, a.date_sale, a.price_purchase, a.price_sale,
                    a.vehicle_id, a.vehicle_year, a.vehicle_model_name, a.vehicle_brand_name, a.vehicle_fuel_name,
                    a.vehicle_color_name, a.vehicle_color_hex, a.photo_date as vehicle_photo_date
                {sqlBody}
                order by {sortColumnIndex} {sortOrderStr}
                limit @Offset, @Limit;
            
                -- count rows
                select count(a.id) as total {sqlBody};
            ";

            var parameters = new {
                Year,
                ColorId,
                BrandId,
                ModelId,
                DataSale = DateSale?.ToString("yyyy-MM-dd"),
                Offset   = (Page - 1) * Limit,
                Limit,
            };

            var data = await handler.DbConnection.QueryMultipleAsync(sqlResult, parameters);

            var announcements = await data.ReadAsync <AnnouncementList>();

            var totalRows = await data.ReadFirstAsync <Int64>();

            return(new QueryResultList <AnnouncementList>(announcements, totalRows));
        }
Exemple #16
0
        public async Task <QueryResultOne <ModelDetail> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql   = @"
                select m.id, m.name, b.id as brand_id, b.name as brand_name
                from models m
                join brands b on b.id=m.id_brand
                where m.id=@Id;
            ";
            var model = await handler.DbConnection.QueryFirstOrDefaultAsync <ModelDetail>(sql, new { Id });

            if (model == null)
            {
                return(new QueryResultOne <ModelDetail>(EStatusCode.NotFound, $"Model with id: {Id} is not found"));
            }
            return(new QueryResultOne <ModelDetail>(model));
        }
Exemple #17
0
        public async Task <QueryResultList <AnnouncementList> > ValidateAsync(VehicleQueriesHandler handler)
        {
            if (Page <= 0)
            {
                return(new QueryResultList <AnnouncementList>(EStatusCode.InvalidData, $"Parameter {nameof(Page)} require postive"));
            }
            if (Limit <= 0)
            {
                return(new QueryResultList <AnnouncementList>(EStatusCode.InvalidData, $"Paramter {nameof(Limit)} require positive"));
            }
            if (!columnsSort.Contains(SortColumn))
            {
                return(new QueryResultList <AnnouncementList>(EStatusCode.InvalidData, $"Parameter {nameof(SortColumn)} require in {string.Join(", ", columnsSort)}"));
            }

            return(await Task.FromResult <QueryResultList <AnnouncementList> >(null));
        }
        public async Task <QueryResultOne <ReservationDetail> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql         = @"
                select 
                    r.id, r.contact_name, r.contact_phone,
                    r.announcement_id, r.announcement_name
                from view_reservations_list r 
                where r.id=@Id
            ";
            var reservation = await handler.DbConnection.QueryFirstOrDefaultAsync <ReservationDetail>(sql, new { Id });

            if (reservation == null)
            {
                return(new QueryResultOne <ReservationDetail>(EStatusCode.NotFound, $"Reservation with id: {Id} does not exists"));
            }
            return(new QueryResultOne <ReservationDetail>(reservation));
        }
        public async Task <QueryResultOne <AnnouncementDetail> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql          = @"
                select
                    a.id, a.price_purchase, a.price_sale, 
                    a.date_sale, a.vehicle_id, a.vehicle_name,
                    a.brand_id, a.vehicle_brand_name as brand_name, 
                    a.model_id, a.vehicle_model_name as model_name
                from view_announcements_list a
                where a.id=@Id
            ";
            var announcement = await handler.DbConnection.QueryFirstOrDefaultAsync <AnnouncementDetail>(sql, new { Id });

            if (announcement == null)
            {
                return(new QueryResultOne <AnnouncementDetail>(EStatusCode.NotFound, $"Announcement with id: {Id} does not exists"));
            }
            return(new QueryResultOne <AnnouncementDetail>(announcement));
        }
Exemple #20
0
        private void ConfigureServices(IServiceCollection services)
        {
            var contentRoot = GetProjectPath();

            var manager = new ApplicationPartManager
            {
                ApplicationParts =
                {
                    new AssemblyPart(typeof(Startup).GetTypeInfo().Assembly)
                },
                FeatureProviders =
                {
                    new ControllerFeatureProvider(),
                    new ViewComponentFeatureProvider()
                }
            };

            services.AddDbContext <VehicleMutationsDbContext>(options => options
                                                              .UseMySql(Configuration.GetConnectionString("VehicleMutations"))
                                                              .EnableDetailedErrors()
                                                              );

            services.AddDbContext <VehicleQueriesDbContext>(options => options
                                                            .UseMySql(Configuration.GetConnectionString("VehicleQueries"))
                                                            .EnableDetailedErrors()
                                                            );

            var scope = services
                        .BuildServiceProvider()
                        .CreateScope();

            var scopedServices = scope.ServiceProvider;

            MutationsDbContext = scopedServices.GetRequiredService <VehicleMutationsDbContext>();
            QueriesDbContext   = scopedServices.GetRequiredService <VehicleQueriesDbContext>();
            MutationsHandler   = new VehicleMutationsHandler(MutationsDbContext);
            QueriesHandler     = new VehicleQueriesHandler(QueriesDbContext);
            EntitiesFactory    = new EntitiesFactory(MutationsDbContext);
            MutationsDbContext.Database.EnsureCreated();
            services.AddSingleton(manager);
        }
        public async Task <QueryResultList <AnnouncementReportList> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql = $@"
                select 
                    a.id, a.date_sale, a.vehicle_model_name, 
                    a.vehicle_brand_name, a.profit
                from view_announcements_list a
                where a.date_sale is not null
                    {(StartDate != null ? " and a.date_sale>=@StartDate" : null)}
                    {(EndDate != null ? " and a.date_sale<=@EndDate" : null)}
                order by a.date_creation desc;
            ";

            var parameters = new {
                StartDate = StartDate?.ToString("yyyy-MM-dd"),
                EndDate   = EndDate?.ToString("yyyy-MM-dd")
            };
            var announcements = await handler.DbConnection.QueryAsync <AnnouncementReportList>(sql, parameters);

            return(new QueryResultList <AnnouncementReportList>(announcements));
        }
Exemple #22
0
        public async Task <QueryResultOne <VehicleDetail> > ExecuteAsync(VehicleQueriesHandler handler)
        {
            var sql     = @"
                select 
                    v.id, v.year, v.color_id, v.color_name, v.color_hex, photo_date,
                    v.fuel_id, v.fuel_name, v.brand_id, v.brand_name, v.model_id, v.model_name
                from view_vehicles_list v
                where v.id=@Id
            ";
            var vehicle = await handler.DbConnection.QueryFirstOrDefaultAsync <VehicleDetail>(sql, new { Id });

            if (vehicle == null)
            {
                return(new QueryResultOne <VehicleDetail>(EStatusCode.NotFound, $"Vehicle with {nameof(Id)} does not exists"));
            }
            if (vehicle.PhotoDate != null)
            {
                vehicle.ImageBase64 = await Base64.LoadBase64Async(EPath.Photos, $"{vehicle.Id}.jpg");
            }
            return(new QueryResultOne <VehicleDetail>(vehicle));
        }
Exemple #23
0
 public VehiclesController(VehicleMutationsHandler mutationsHandler, VehicleQueriesHandler queriesHandler)
 {
     _mutationsHanlder = mutationsHandler;
     _queriesHanlder   = queriesHandler;
 }
Exemple #24
0
 public async Task <QueryResultList <BrandList> > ValidateAsync(VehicleQueriesHandler handler)
 {
     return(await Task.FromResult <QueryResultList <BrandList> >(null));
 }