diff --git a/FakePieShop/Controllers/ContactController.cs b/FakePieShop/Controllers/ContactController.cs new file mode 100644 index 0000000..c98f7a6 --- /dev/null +++ b/FakePieShop/Controllers/ContactController.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Mvc; + +namespace FakePieShop.Controllers +{ + public class ContactController : Controller + { + public IActionResult Index() + { + return View(); + } + } +} diff --git a/FakePieShop/Controllers/OrderController.cs b/FakePieShop/Controllers/OrderController.cs new file mode 100644 index 0000000..5ddc521 --- /dev/null +++ b/FakePieShop/Controllers/OrderController.cs @@ -0,0 +1,22 @@ +using FakePieShop.Models; +using Microsoft.AspNetCore.Mvc; + +namespace BethanysPieShop.Controllers +{ + public class OrderController : Controller + { + private readonly IOrderRepository _orderRepository; + private readonly IShoppingCart _shoppingCart; + + public OrderController(IOrderRepository orderRepository, IShoppingCart shoppingCart) + { + _orderRepository = orderRepository; + _shoppingCart = shoppingCart; + } + + public IActionResult Checkout() + { + return View(); + } + } +} diff --git a/FakePieShop/Migrations/20231103202102_AddOrderSupport.Designer.cs b/FakePieShop/Migrations/20231103202102_AddOrderSupport.Designer.cs new file mode 100644 index 0000000..6cca431 --- /dev/null +++ b/FakePieShop/Migrations/20231103202102_AddOrderSupport.Designer.cs @@ -0,0 +1,266 @@ +// +using System; +using FakePieShop.Models; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace FakePieShop.Migrations +{ + [DbContext(typeof(FakePieShopDbContext))] + [Migration("20231103202102_AddOrderSupport")] + partial class AddOrderSupport + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.13") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("FakePieShop.Models.Category", b => + { + b.Property("CategoryId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("CategoryId")); + + b.Property("CategoryName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.HasKey("CategoryId"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("FakePieShop.Models.Order", b => + { + b.Property("OrderId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("OrderId")); + + b.Property("AddressLine1") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("AddressLine2") + .HasColumnType("nvarchar(max)"); + + b.Property("City") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Country") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("OrderPlaced") + .HasColumnType("datetime2"); + + b.Property("OrderTotal") + .HasColumnType("decimal(18,2)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("State") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ZipCode") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("OrderId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("FakePieShop.Models.OrderDetail", b => + { + b.Property("OrderDetailId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("OrderDetailId")); + + b.Property("Amount") + .HasColumnType("int"); + + b.Property("OrderId") + .HasColumnType("int"); + + b.Property("PieId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("decimal(18,2)"); + + b.HasKey("OrderDetailId"); + + b.HasIndex("OrderId"); + + b.HasIndex("PieId"); + + b.ToTable("OrderDetails"); + }); + + modelBuilder.Entity("FakePieShop.Models.Pie", b => + { + b.Property("PieId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("PieId")); + + b.Property("AllergyInformation") + .HasColumnType("nvarchar(max)"); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("ImageThumbnailUrl") + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .HasColumnType("nvarchar(max)"); + + b.Property("InStock") + .HasColumnType("bit"); + + b.Property("IsPieOfTheWeek") + .HasColumnType("bit"); + + b.Property("LongDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Price") + .HasColumnType("decimal(18,2)"); + + b.Property("ShortDescription") + .HasColumnType("nvarchar(max)"); + + b.HasKey("PieId"); + + b.HasIndex("CategoryId"); + + b.ToTable("Pies"); + }); + + modelBuilder.Entity("FakePieShop.Models.ShoppingCartItem", b => + { + b.Property("ShoppingCartItemId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ShoppingCartItemId")); + + b.Property("Amount") + .HasColumnType("int"); + + b.Property("PieId") + .HasColumnType("int"); + + b.Property("ShoppingCartId") + .HasColumnType("nvarchar(max)"); + + b.HasKey("ShoppingCartItemId"); + + b.HasIndex("PieId"); + + b.ToTable("ShoppingCartItems"); + }); + + modelBuilder.Entity("FakePieShop.Models.OrderDetail", b => + { + b.HasOne("FakePieShop.Models.Order", "Order") + .WithMany("OrderDetails") + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FakePieShop.Models.Pie", "Pie") + .WithMany() + .HasForeignKey("PieId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Order"); + + b.Navigation("Pie"); + }); + + modelBuilder.Entity("FakePieShop.Models.Pie", b => + { + b.HasOne("FakePieShop.Models.Category", "Category") + .WithMany("Pies") + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + }); + + modelBuilder.Entity("FakePieShop.Models.ShoppingCartItem", b => + { + b.HasOne("FakePieShop.Models.Pie", "Pie") + .WithMany() + .HasForeignKey("PieId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Pie"); + }); + + modelBuilder.Entity("FakePieShop.Models.Category", b => + { + b.Navigation("Pies"); + }); + + modelBuilder.Entity("FakePieShop.Models.Order", b => + { + b.Navigation("OrderDetails"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/FakePieShop/Migrations/20231103202102_AddOrderSupport.cs b/FakePieShop/Migrations/20231103202102_AddOrderSupport.cs new file mode 100644 index 0000000..faf8a51 --- /dev/null +++ b/FakePieShop/Migrations/20231103202102_AddOrderSupport.cs @@ -0,0 +1,87 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace FakePieShop.Migrations +{ + /// + public partial class AddOrderSupport : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Orders", + columns: table => new + { + OrderId = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + FirstName = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + LastName = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + AddressLine1 = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false), + AddressLine2 = table.Column(type: "nvarchar(max)", nullable: true), + ZipCode = table.Column(type: "nvarchar(10)", maxLength: 10, nullable: false), + City = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + State = table.Column(type: "nvarchar(10)", maxLength: 10, nullable: true), + Country = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + PhoneNumber = table.Column(type: "nvarchar(25)", maxLength: 25, nullable: false), + Email = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + OrderTotal = table.Column(type: "decimal(18,2)", nullable: false), + OrderPlaced = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Orders", x => x.OrderId); + }); + + migrationBuilder.CreateTable( + name: "OrderDetails", + columns: table => new + { + OrderDetailId = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + OrderId = table.Column(type: "int", nullable: false), + PieId = table.Column(type: "int", nullable: false), + Amount = table.Column(type: "int", nullable: false), + Price = table.Column(type: "decimal(18,2)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_OrderDetails", x => x.OrderDetailId); + table.ForeignKey( + name: "FK_OrderDetails_Orders_OrderId", + column: x => x.OrderId, + principalTable: "Orders", + principalColumn: "OrderId", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_OrderDetails_Pies_PieId", + column: x => x.PieId, + principalTable: "Pies", + principalColumn: "PieId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_OrderDetails_OrderId", + table: "OrderDetails", + column: "OrderId"); + + migrationBuilder.CreateIndex( + name: "IX_OrderDetails_PieId", + table: "OrderDetails", + column: "PieId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "OrderDetails"); + + migrationBuilder.DropTable( + name: "Orders"); + } + } +} diff --git a/FakePieShop/Migrations/FakePieShopDbContextModelSnapshot.cs b/FakePieShop/Migrations/FakePieShopDbContextModelSnapshot.cs index 60c7de3..6c5070f 100644 --- a/FakePieShop/Migrations/FakePieShopDbContextModelSnapshot.cs +++ b/FakePieShop/Migrations/FakePieShopDbContextModelSnapshot.cs @@ -1,4 +1,5 @@ // +using System; using FakePieShop.Models; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -41,6 +42,101 @@ namespace FakePieShop.Migrations b.ToTable("Categories"); }); + modelBuilder.Entity("FakePieShop.Models.Order", b => + { + b.Property("OrderId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("OrderId")); + + b.Property("AddressLine1") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("AddressLine2") + .HasColumnType("nvarchar(max)"); + + b.Property("City") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Country") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("OrderPlaced") + .HasColumnType("datetime2"); + + b.Property("OrderTotal") + .HasColumnType("decimal(18,2)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("State") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ZipCode") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("OrderId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("FakePieShop.Models.OrderDetail", b => + { + b.Property("OrderDetailId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("OrderDetailId")); + + b.Property("Amount") + .HasColumnType("int"); + + b.Property("OrderId") + .HasColumnType("int"); + + b.Property("PieId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("decimal(18,2)"); + + b.HasKey("OrderDetailId"); + + b.HasIndex("OrderId"); + + b.HasIndex("PieId"); + + b.ToTable("OrderDetails"); + }); + modelBuilder.Entity("FakePieShop.Models.Pie", b => { b.Property("PieId") @@ -111,6 +207,25 @@ namespace FakePieShop.Migrations b.ToTable("ShoppingCartItems"); }); + modelBuilder.Entity("FakePieShop.Models.OrderDetail", b => + { + b.HasOne("FakePieShop.Models.Order", "Order") + .WithMany("OrderDetails") + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FakePieShop.Models.Pie", "Pie") + .WithMany() + .HasForeignKey("PieId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Order"); + + b.Navigation("Pie"); + }); + modelBuilder.Entity("FakePieShop.Models.Pie", b => { b.HasOne("FakePieShop.Models.Category", "Category") @@ -137,6 +252,11 @@ namespace FakePieShop.Migrations { b.Navigation("Pies"); }); + + modelBuilder.Entity("FakePieShop.Models.Order", b => + { + b.Navigation("OrderDetails"); + }); #pragma warning restore 612, 618 } } diff --git a/FakePieShop/Models/FakePieShopDbContext.cs b/FakePieShop/Models/FakePieShopDbContext.cs index a1e94bd..62cb5a7 100644 --- a/FakePieShop/Models/FakePieShopDbContext.cs +++ b/FakePieShop/Models/FakePieShopDbContext.cs @@ -12,5 +12,7 @@ namespace FakePieShop.Models public DbSet Categories { get; set; } public DbSet Pies { get; set; } public DbSet ShoppingCartItems { get; set; } + public DbSet Orders { get; set; } + public DbSet OrderDetails { get; set; } } } diff --git a/FakePieShop/Models/IOrderRepository.cs b/FakePieShop/Models/IOrderRepository.cs new file mode 100644 index 0000000..3929aec --- /dev/null +++ b/FakePieShop/Models/IOrderRepository.cs @@ -0,0 +1,7 @@ +namespace FakePieShop.Models +{ + public interface IOrderRepository + { + void CreateOrder(Order order); + } +} diff --git a/FakePieShop/Models/Order.cs b/FakePieShop/Models/Order.cs new file mode 100644 index 0000000..b9c47ad --- /dev/null +++ b/FakePieShop/Models/Order.cs @@ -0,0 +1,66 @@ +using Microsoft.AspNetCore.Mvc.ModelBinding; +using System.ComponentModel.DataAnnotations; + +namespace FakePieShop.Models +{ + public class Order + { + [BindNever] + public int OrderId { get; set; } + + public List? OrderDetails { get; set; } + + [Required(ErrorMessage = "Please enter your first name")] + [Display(Name = "First name")] + [StringLength(50)] + public string FirstName { get; set; } = string.Empty; + + [Required(ErrorMessage = "Please enter your last name")] + [Display(Name = "Last name")] + [StringLength(50)] + public string LastName { get; set; } = string.Empty; + + [Required(ErrorMessage = "Please enter your address")] + [StringLength(100)] + [Display(Name = "Address Line 1")] + public string AddressLine1 { get; set; } = string.Empty; + + [Display(Name = "Address Line 2")] + public string? AddressLine2 { get; set; } + + [Required(ErrorMessage = "Please enter your zip code")] + [Display(Name = "Zip code")] + [StringLength(10, MinimumLength = 4)] + public string ZipCode { get; set; } = string.Empty; + + [Required(ErrorMessage = "Please enter your city")] + [StringLength(50)] + public string City { get; set; } = string.Empty; + + [StringLength(10)] + public string? State { get; set; } + + [Required(ErrorMessage = "Please enter your country")] + [StringLength(50)] + public string Country { get; set; } = string.Empty; + + [Required(ErrorMessage = "Please enter your phone number")] + [StringLength(25)] + [DataType(DataType.PhoneNumber)] + [Display(Name = "Phone number")] + public string PhoneNumber { get; set; } = string.Empty; + + [Required] + [StringLength(50)] + [DataType(DataType.EmailAddress)] + [RegularExpression(@"(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|""(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*"")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])", + ErrorMessage = "The email address is not entered in a correct format")] + public string Email { get; set; } = string.Empty; + + [BindNever] + public decimal OrderTotal { get; set; } + + [BindNever] + public DateTime OrderPlaced { get; set; } + } +} diff --git a/FakePieShop/Models/OrderDetail.cs b/FakePieShop/Models/OrderDetail.cs new file mode 100644 index 0000000..187d510 --- /dev/null +++ b/FakePieShop/Models/OrderDetail.cs @@ -0,0 +1,13 @@ +namespace FakePieShop.Models +{ + public class OrderDetail + { + public int OrderDetailId { get; set; } + public int OrderId { get; set; } + public int PieId { get; set; } + public int Amount { get; set; } + public decimal Price { get; set; } + public Pie Pie { get; set; } = default!; + public Order Order { get; set; } = default!; + } +} diff --git a/FakePieShop/Models/OrderRepository.cs b/FakePieShop/Models/OrderRepository.cs new file mode 100644 index 0000000..41981e4 --- /dev/null +++ b/FakePieShop/Models/OrderRepository.cs @@ -0,0 +1,40 @@ +namespace FakePieShop.Models +{ + public class OrderRepository : IOrderRepository + { + private readonly FakePieShopDbContext _fakePieShopDbContext; + private readonly IShoppingCart _shoppingCart; + + public OrderRepository(FakePieShopDbContext fakePieShopDbContext, IShoppingCart shoppingCart) + { + _fakePieShopDbContext = fakePieShopDbContext; + _shoppingCart = shoppingCart; + } + + public void CreateOrder(Order order) + { + order.OrderPlaced = DateTime.Now; + + List? shoppingCartItems = _shoppingCart.ShoppingCartItems; + order.OrderTotal = _shoppingCart.GetShoppingCartTotal(); + + order.OrderDetails = new List(); + + foreach (ShoppingCartItem? shoppingCartItem in shoppingCartItems) + { + var orderDetail = new OrderDetail + { + Amount = shoppingCartItem.Amount, + PieId = shoppingCartItem.Pie.PieId, + Price = shoppingCartItem.Pie.Price + }; + + order.OrderDetails.Add(orderDetail); + } + + _fakePieShopDbContext.Orders.Add(order); + + _fakePieShopDbContext.SaveChanges(); + } + } +} diff --git a/FakePieShop/Program.cs b/FakePieShop/Program.cs index 3ddd9d8..22033f4 100644 --- a/FakePieShop/Program.cs +++ b/FakePieShop/Program.cs @@ -8,6 +8,7 @@ WebApplicationBuilder builder = WebApplication.CreateBuilder(args); // add services to application builder.Services.AddScoped(); builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddScoped(services => ShoppingCart.GetCart(services)); // include support for sessions and http context diff --git a/FakePieShop/TagHelpers/EmailTagHelper.cs b/FakePieShop/TagHelpers/EmailTagHelper.cs new file mode 100644 index 0000000..596067a --- /dev/null +++ b/FakePieShop/TagHelpers/EmailTagHelper.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.Razor.TagHelpers; + +namespace FakePieShop.TagHelpers +{ + public class EmailTagHelper : TagHelper + { + public string? Address { get; set; } + public string? Content { get; set; } + public override void Process(TagHelperContext context, TagHelperOutput output) + { + output.TagName = "a"; + output.Attributes.SetAttribute("href", $"mailto:{Address}"); + output.Content.SetContent(Content); + + //base.Process(context, output); + } + } +} diff --git a/FakePieShop/Views/Contact/Index.cshtml b/FakePieShop/Views/Contact/Index.cshtml new file mode 100644 index 0000000..29e6c5b --- /dev/null +++ b/FakePieShop/Views/Contact/Index.cshtml @@ -0,0 +1,14 @@ +

+ Contact Us +

+ +
+ +
+

We'd love to hear from you

+
+ Please send us your comments, questions, or feedback. +
+ +
+
\ No newline at end of file diff --git a/FakePieShop/Views/Order/Checkout.cshtml b/FakePieShop/Views/Order/Checkout.cshtml new file mode 100644 index 0000000..b522599 --- /dev/null +++ b/FakePieShop/Views/Order/Checkout.cshtml @@ -0,0 +1,79 @@ +@model Order + +
+

+ You're just one step away from your delicious pies. +

+ +
+ +
+
+
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+
+ +
+
+ +
+
+
+
diff --git a/FakePieShop/Views/Shared/Components/CategoryMenu/Default.cshtml b/FakePieShop/Views/Shared/Components/CategoryMenu/Default.cshtml index 5c9b882..5231946 100644 --- a/FakePieShop/Views/Shared/Components/CategoryMenu/Default.cshtml +++ b/FakePieShop/Views/Shared/Components/CategoryMenu/Default.cshtml @@ -2,22 +2,21 @@