aboutsummaryrefslogtreecommitdiffstats
path: root/src/Pages/Produktar.cshtml.cs
blob: b0ba47039a85645c4cc694baf78612a1d2c6533f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System.Collections.Generic;
using System.IO;
using System.Linq;
using IOL.Helpers;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Options;
using VSH.Data.Miscellaneous;
using VSH.Data.Database;
using VSH.Data;
using VSH.Data.Enums;
using VSH.Data.Static;

namespace VSH.Pages;

public class Produktar : PageModel
{
	private readonly MainDbContext _context;
	private readonly IStringLocalizer<SharedPageResources> _localizer;
	private readonly IOptions<AppSettings.GeneralConfiguration> _options;

	public string ProductSlug { get; set; }
	public string CategorySlug { get; set; }
	public bool IsProduct { get; set; }
	public bool IsCategory { get; set; }
	public bool IsCategories { get; set; }
	public Product CurrentProduct { get; set; }

	public Produktar(
			MainDbContext context,
			IStringLocalizer<SharedPageResources> localizer,
			IOptions<AppSettings.GeneralConfiguration> options
	) {
		_context = context;
		_localizer = localizer;
		_options = options;
	}

	public List<Category> Categories { get; set; }

	public ActionResult OnGet(string categorySlug, string productSlug) {
		ProductSlug = productSlug;
		CategorySlug = categorySlug;

		if (ProductSlug.HasValue()) {
			CurrentProduct = _context.Products.Where(c => c.VisibilityState == ProductVisibility.DEFAULT)
									 .Include(c => c.Category)
									 .SingleOrDefault(p => p.Slug == ProductSlug);
			IsProduct = CurrentProduct != default;
			if (!IsProduct)
				return Page();
			var productImage = CurrentProduct != null && CurrentProduct.Images.Any()
					? CurrentProduct.Images.OrderBy(c => c.Order).FirstOrDefault()
					: default;

			ViewData["open_graph"] = new OpenGraphData {
					Description = CurrentProduct?.Description,
					Image = productImage != default
							? (HttpContext.Request.GetRequestHost()
							   + Path.Combine(AppPaths.ProductImages.WebPath, productImage.FileName))
							: default,
					Title = $"{CurrentProduct?.Name} {_localizer["frå"]} {_options.Value.StoreName}",
			};
		} else if (CategorySlug.HasValue()) {
			Categories = _context
						 .Categories.Where(c => c.Slug == CategorySlug
												&& c.VisibilityState == CategoryVisibility.DEFAULT)
						 .Include(c => c.Products)
						 .ToList();
			IsCategory = !IsProduct && Categories?.Count == 1;
		} else {
			Categories = _context.Categories.Where(c => c.VisibilityState == CategoryVisibility.DEFAULT)
								 .Include(c => c.Products)
								 .ToList();
			IsCategories = !IsProduct && Categories?.Count >= 1;
		}

		return Page();
	}
}