public ActionResult GetMedia(int id) { AdDbContext ctx = new AdDbContext(); var media = ctx.Media.Find(id); return(File(media.FileContent, media.MimeType, media.OriginalFileName)); }
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)); }
public ActionResult Details(int id) { AdDbContext ctx = new AdDbContext(); var ad = ctx.Ads.Find(id); return(View(ad)); }
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")); }
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)); }
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); }
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); }
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); }
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())); }
public IQueryable <Category> GetCategories([ScopedService] AdDbContext context) { return(context.Categories .AsNoTracking()); }
public IQueryable <Ad> GetAds([ScopedService] AdDbContext context) { return(context.Ads .AsNoTracking()); }
//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))); }