Beispiel #1
0
        public ActionResult GetMedia(int id)
        {
            AdDbContext ctx   = new AdDbContext();
            var         media = ctx.Media.Find(id);

            return(File(media.FileContent, media.MimeType, media.OriginalFileName));
        }
Beispiel #2
0
        public ActionResult Index()
        {
            AdDbContext ctx   = new AdDbContext();
            var         model = ctx.Ads.ToList();

            return(View(model));
        }
        public ActionResult Edit(int id)
        {
            AdDbContext ctx   = new AdDbContext();
            var         model = ctx.Ads.Find(id);

            ViewBag.CategoryId = new SelectList(ctx.Categories.ToList(), "Id", "Title", model.CategoryId);
            ViewBag.AdType     = new SelectList(LookupHelper.GetAdTypesLookup(), "Value", "Text",
                                                model is SaleAd ? "sale" : "rent"
                                                );
            AdsEditViewModel viewModel = new AdsEditViewModel()
            {
                Id                 = model.Id,
                Title              = model.Title,
                CategoryId         = model.CategoryId,
                Age                = model.Age,
                Area               = model.Area,
                AdType             = model is SaleAd ? "sale" : "rent",
                UnitCount          = model.UnitCount,
                ThumbnailPhotoPath = model.ThumbnailPhotoPath,
            };

            if (model is SaleAd)
            {
                viewModel.PricePerUnit = ((SaleAd)model).PricePerUnit;
            }
            else
            {
                viewModel.Diposite = ((RentAd)model).Diposite;
                viewModel.Rent     = ((RentAd)model).Rent;
            }
            return(View(viewModel));
        }
Beispiel #4
0
        public ActionResult Details(int id)
        {
            AdDbContext ctx = new AdDbContext();
            var         ad  = ctx.Ads.Find(id);

            return(View(ad));
        }
Beispiel #5
0
        public ActionResult Create()
        {
            AdDbContext ctx = new AdDbContext();

            ViewBag.CategoryId = new SelectList(ctx.Categories.ToList(), "Id", "Title");
            ViewBag.AdType     = new SelectList(LookupHelper.GetAdTypesLookup(), "Value", "Text");
            return(View());
        }
        protected override async Task <IReadOnlyDictionary <int, Ad> > LoadBatchAsync(IReadOnlyList <int> keys, CancellationToken cancellationToken)
        {
            await using AdDbContext dbContext = _dbContextFactory.CreateDbContext();

            return(await dbContext.Ads
                   .Where(s => keys.Contains(s.Id))
                   .ToDictionaryAsync(t => t.Id, cancellationToken));
        }
        public ActionResult DeleteConfirmed(int id)
        {
            AdDbContext ctx = new AdDbContext();
            var         ad  = ctx.Ads.Find(id);

            TempData["Message"] = $"{ad.Title} با موفقیت حذف شد";
            ctx.Ads.Remove(ad);
            ctx.SaveChanges();

            return(RedirectToAction("Index"));
        }
Beispiel #8
0
        static void Main(string[] args)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();
            string             connection    = configuration.GetConnectionString("AdConnection");

            var articleContext = AdDbContext.Create(connection);

            if (articleContext.AllMigrationsApplied())
            {
                articleContext.Database.Migrate();
            }
        }
        public async Task <IEnumerable <Ad> > GetAdsAsync(Category category,
                                                          [Service] AdDbContext dbContext,
                                                          AdByIdDataLoader adById,
                                                          CancellationToken cancellationToken)
        {
            int[] adsId = await dbContext.Ads
                          .Where(s => s.Id == category.Id)
                          .Include(s => s.Categories)
                          .SelectMany(s => s.Categories.Select(t => t.CategoryId))
                          .ToArrayAsync(cancellationToken);

            return(await adById.LoadAsync(adsId, cancellationToken));
        }
Beispiel #10
0
        public async Task <Ad> Ad(AddAdPayload input, [Service] AdDbContext context)
        {
            context.Ads.Add(input.Ad);

            var result = await context.SaveEntitiesAsync();

            if (!result)
            {
                return(null);
            }

            return(input.Ad);
        }
Beispiel #11
0
        public async Task <IEnumerable <Category> > GetCategoriesAsync(
            Ad ad,
            [ScopedService] AdDbContext dbContext,
            CategoryByIdDataLoader categoryById,
            CancellationToken cancellationToken)
        {
            int[] categoriesId = await dbContext.Categories
                                 .Where(s => s.Id == ad.Id)
                                 .Include(s => s.Ads)
                                 .SelectMany(s => s.Ads.Select(t => t.CategoryId))
                                 .ToArrayAsync(cancellationToken);

            var entities = await categoryById.LoadAsync(categoriesId, cancellationToken);

            return(entities);
        }
Beispiel #12
0
        public async Task <IEnumerable <Metric> > GetMetricsAsync(
            Ad ad,
            [ScopedService] AdDbContext dbContext,
            MetricByIdDataLoader metricById,
            CancellationToken cancellationToken)
        {
            int[] metricsId = await dbContext.Metrics
                              .Where(s => s.Id == ad.Id)
                              .Include(s => s.Ads)
                              .SelectMany(s => s.Ads.Select(t => t.MetricId))
                              .ToArrayAsync(cancellationToken);

            var entities = await metricById.LoadAsync(metricsId, cancellationToken);

            return(entities);
        }
Beispiel #13
0
        public ActionResult Create(AdsCreateViewModel viewModel)
        {
            var extension = "";

            if (viewModel.ThumbnailFile != null)
            {
                extension = Path.GetExtension(viewModel.ThumbnailFile.FileName).ToLower();


                if (viewModel.ThumbnailFile.ContentLength / 1024 >= 150)
                {
                    ModelState.AddModelError("ThumbnailFile", "سایز فایل باید کمتر از ۱۵۰ کیلو بایت باشد");
                    ModelState.AddModelError("", "این خطای فرم نمونه است");
                }
                if (
                    !(extension == ".jpg" || extension == ".jpeg" ||
                      extension == ".png" || extension == ".gif")
                    )
                {
                    ModelState.AddModelError("ThumbnailFile", "فرمت تصویر مورد قبول نیست");
                }
            }
            AdDbContext ctx = new AdDbContext();

            if (ModelState.IsValid)
            {
                var fileName = $"{Guid.NewGuid().ToString()}{extension}";
                var fullPath = Path.Combine(Server.MapPath("~/images/thumbnails"), fileName);
                viewModel.ThumbnailFile.SaveAs(fullPath);
                var thumbnailClientPath = $"/images/thumbnails/{fileName}";

                Ad ad;
                if (viewModel.AdType == "sale")
                {
                    ad = new SaleAd()
                    {
                        Age                = viewModel.Age,
                        Area               = viewModel.Area,
                        CategoryId         = viewModel.CategoryId,
                        Title              = viewModel.Title,
                        UnitCount          = viewModel.UnitCount,
                        PricePerUnit       = viewModel.PricePerUnit,
                        ThumbnailPhotoPath = thumbnailClientPath
                    };
                }
                else
                {
                    ad = new RentAd()
                    {
                        Age                = viewModel.Age,
                        Area               = viewModel.Area,
                        CategoryId         = viewModel.CategoryId,
                        Title              = viewModel.Title,
                        UnitCount          = viewModel.UnitCount,
                        ThumbnailPhotoPath = thumbnailClientPath,
                        Diposite           = viewModel.Diposite ?? 0,
                        Rent               = viewModel.Rent ?? 0
                    };
                }

                if (viewModel.MediaFile1 != null)
                {
                    AddMedia(viewModel.MediaFile1, ad);
                }
                if (viewModel.MediaFile2 != null)
                {
                    AddMedia(viewModel.MediaFile2, ad);
                }
                if (viewModel.MediaFile3 != null)
                {
                    AddMedia(viewModel.MediaFile3, ad);
                }

                ctx.Ads.Add(ad);
                ctx.SaveChanges();

                TempData["Message"] = "ثبت با موفقیت انجام شد.";
                return(RedirectToAction("Index", "Ads"));
            }
            TempData["Message"]      = "خطایی رخ داده";
            TempData["MessageClass"] = "danger";
            ViewBag.CategoryId       = new SelectList(ctx.Categories.ToList(), "Id", "Title");
            ViewBag.AdType           = new SelectList(LookupHelper.GetAdTypesLookup(), "Value", "Text");
            return(View(viewModel));
        }
        public ActionResult Edit(AdsEditViewModel viewModel)
        {
            AdDbContext ctx       = new AdDbContext();
            var         model     = ctx.Ads.Find(viewModel.Id);
            var         extension = "";

            if (viewModel.ThumbnailFile != null)
            {
                extension = Path.GetExtension(viewModel.ThumbnailFile.FileName).ToLower();


                if (viewModel.ThumbnailFile.ContentLength / 1024 >= 150)
                {
                    ModelState.AddModelError("ThumbnailFile", "سایز فایل باید کمتر از ۱۵۰ کیلو بایت باشد");
                    ModelState.AddModelError("", "این خطای فرم نمونه است");
                }
                if (
                    !(extension == ".jpg" || extension == ".jpeg" ||
                      extension == ".png" || extension == ".gif")
                    )
                {
                    ModelState.AddModelError("ThumbnailFile", "فرمت تصویر مورد قبول نیست");
                }
            }


            if (ModelState.IsValid)
            {
                model.Title      = viewModel.Title;
                model.Age        = viewModel.Age;
                model.Area       = viewModel.Area;
                model.CategoryId = viewModel.CategoryId;

                if (viewModel.ThumbnailFile != null)
                {
                    var fileName = $"{Guid.NewGuid().ToString()}{extension}";
                    var fullPath = Path.Combine(Server.MapPath("~/images/thumbnails"), fileName);
                    viewModel.ThumbnailFile.SaveAs(fullPath);
                    var thumbnailClientPath = $"/images/thumbnails/{fileName}";

                    model.ThumbnailPhotoPath = thumbnailClientPath;
                }

                if (viewModel.MediaFile1 != null)
                {
                    AddMedia(viewModel.MediaFile1, model);
                }
                if (viewModel.MediaFile2 != null)
                {
                    AddMedia(viewModel.MediaFile2, model);
                }
                if (viewModel.MediaFile3 != null)
                {
                    AddMedia(viewModel.MediaFile3, model);
                }

                ctx.SaveChanges();

                TempData["Message"] = "ویرایش با موفقیت انجام شد";
                return(RedirectToAction("Index"));
            }
            ViewBag.CategoryId = new SelectList(ctx.Categories.ToList(), "Id", "Title", viewModel.CategoryId);
            ViewBag.AdType     = new SelectList(LookupHelper.GetAdTypesLookup(), "Value", "Text",
                                                viewModel.AdType
                                                );
            TempData["Message"]      = "ویرایش با خطا مواجه شد";
            TempData["MessageClass"] = "danger";
            return(View(viewModel));
        }
        public ActionResult Index()
        {
            AdDbContext ctx = new AdDbContext();

            return(View(ctx.Ads.ToList()));
        }
Beispiel #16
0
 public IQueryable <Category> GetCategories([ScopedService] AdDbContext context)
 {
     return(context.Categories
            .AsNoTracking());
 }
Beispiel #17
0
 public IQueryable <Ad> GetAds([ScopedService] AdDbContext context)
 {
     return(context.Ads
            .AsNoTracking());
 }
Beispiel #18
0
        //https://dzone.com/articles/using-the-angular-material-paginator-with-aspnet-c
        // https://github.com/dncuug/X.PagedList
        //https://docs.microsoft.com/en-us/aspnet/core/data/ef-rp/sort-filter-page?view=aspnetcore-2.1
        //https://docs.microsoft.com/en-us/sql/relational-databases/search/query-with-full-text-search?view=sql-server-2017
        //https://github.com/uber-asido/backend/blob/e32bf1ddabe500002d835228993707503449e06c/src/Uber.Module.Search.EFCore/Store/SearchItemStore.cs
        //https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/blob/42c335ceac6d93d1c0487ef45fc992810c07fd9d/upstream/EFCore.Upstream.FunctionalTests/Query/DbFunctionsMySqlTest.cs
        public dynamic SearchAds(AdSearchDto options)
        {
            IQueryable <Share.Models.Ad.Entities.Ad> query = _adRepository.Entities.AsNoTracking().Where(w => w.IsPublished && w.IsActivated && !w.IsDeleted);

            // implemented and chosen FreeText from 4 options: 1.FreeText 2.Contains 3.ContainsTable 4.FreeTextTable
            // figure out later: SqlServerDbFunctionsExtensions
            if (options.IsValidSearchText)
            {
                //query = query.Where(ft => EF.Functions.FreeText(ft.AdContent, options.SearchText));
                query = query.Where(ft => EF.Functions.FreeText(ft.AdTitle, options.SearchText));
            }

            string      connection    = "Server=localhost;Database=Ad;Trusted_Connection=True;";
            var         optionBuilder = new DbContextOptionsBuilder <AdDbContext>().UseSqlServer(connection, ya => ya.UseNetTopologySuite());
            AdDbContext context       = new AdDbContext(optionBuilder.Options);

            IQueryable <Share.Models.Ad.Entities.Ad> query12 = context.Ads.Where(w => w.IsPublished && w.IsActivated && !w.IsDeleted);
            var sfsfs = query12.ToList();

            IQueryable <Share.Models.Ad.Entities.Ad> query1 = context.Ads.Where(ft => EF.Functions.Contains(ft.AdTitle, "title", 1033));
            var aaa = query1.ToList();
            //query1 = query1.Where(ft => EF.Functions.FreeText(ft.AdTitle, "title", 1033));  // 0: newtral, 1033: english

            string sql = query1.ToSql <Share.Models.Ad.Entities.Ad>();


            if (options.IsValidCategory)
            {
                query = query.Where(q => q.AdCategoryId == options.CategoryId);
            }
            if (options.IsValidCondition)
            {
                query = query.Where(q => q.ItemConditionId == options.ConditionId);
            }
            if (options.IsValidCountryCode)
            {
                query = query.Where(q => q.AddressCountryCode.Trim().ToUpper() == options.CountryCode);
            }
            if (options.IsValidCurrencyCode)
            {
                query = query.Where(q => q.ItemCurrencyCode.Trim().ToUpper() == options.CurrencyCode);
            }
            if (options.IsValidCityName)
            {
                query = query.Where(q => q.AddressCity.Trim().ToLower() == options.CityName);
            }
            if (options.IsValidZipCode)
            {
                query = query.Where(q => q.AddressZipCode.Trim().ToLower() == options.ZipCode);
            }

            if (options.IsValidPrice)
            {
                query = query.Where(q => q.ItemCost >= options.ItemCostMin && q.ItemCost <= options.ItemCostMax);
            }
            else if (options.IsValidMinPrice)
            {
                query = query.Where(q => q.ItemCost >= options.ItemCostMin);
            }
            else if (options.IsValidMinPrice)
            {
                query = query.Where(q => q.ItemCost <= options.ItemCostMax);
            }


            if (options.IsValidSortOption)
            {
                switch ((SortOptionsBy)options.SortOptionsId)
                {
                case SortOptionsBy.ClosestFirst:
                    // handled below in same function , ref : line #73
                    break;

                case SortOptionsBy.NewestFirst:
                    query = query.OrderByDescending(o => o.UpdatedDateTime);
                    break;

                case SortOptionsBy.PriceHighToLow:
                    query = query.OrderByDescending(o => o.ItemCost);
                    break;

                case SortOptionsBy.PriceLowToHigh:
                    query = query.OrderBy(o => o.ItemCost);
                    break;

                default:
                    break;
                }
            }

            if ((SortOptionsBy)options.SortOptionsId == SortOptionsBy.ClosestFirst && options.IsValidLocation)
            {
                if (options.IsValidMileOption)
                {
                    if ((MileOptionsBy)options.SortOptionsId == MileOptionsBy.Maximum)
                    {
                        query = query.OrderBy(o => o.AddressLocation.Distance(options.MapLocation));
                    }
                    else
                    {
                        query = query.OrderBy(o => o.AddressLocation.Distance(options.MapLocation) < options.Miles);
                    }
                }
                else
                {
                    query = query.OrderBy(o => o.AddressLocation.Distance(options.MapLocation));
                }
            }
            else if (options.IsValidMileOption && options.IsValidLocation)
            {
                if ((MileOptionsBy)options.SortOptionsId == MileOptionsBy.Maximum)
                {
                    query = query.OrderBy(o => o.AddressLocation.Distance(options.MapLocation));
                }
                else
                {
                    query = query.OrderBy(o => o.AddressLocation.Distance(options.MapLocation) < options.Miles);
                }
            }

            List <Share.Models.Ad.Entities.Ad> a = query.ToList();

            //paging
            query = query.Take(options.DefaultPageSize);

            // select columns:
            List <AdDto> adDtos = query.Select(s => new AdDto()
            {
                AdId    = s.AdId.ToString(),
                AdTitle = s.AdTitle,
                UpdatedDateTimeString = s.UpdatedDateTime.TimeAgo(),
                UserIdOrEmail         = s.UserIdOrEmail,
            }).ToList <AdDto>();



            return(new { records = adDtos, options = options });
        }
        public ActionResult Delete(int id)
        {
            AdDbContext ctx = new AdDbContext();

            return(View(ctx.Ads.Find(id)));
        }