From c27eff938fe624866604795460f641ac62316efd Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Sat, 13 Feb 2021 23:35:01 +0300 Subject: [PATCH] Added wishlist --- .../Admin/Controllers/WishlistController.cs | 43 ++++++ .../Areas/Admin/Views/Shared/Wishlist.cshtml | 48 +++++++ .../MyWebsite/Controllers/HomeController.cs | 4 + .../Models/Databases/DatabaseContext.cs | 1 + MyWebsite/MyWebsite/Models/WishlistModel.cs | 24 ++++ .../Resources/Views/Shared/Wishlist.ru.resx | 129 ++++++++++++++++++ .../MyWebsite/ViewModels/WishlistViewModel.cs | 19 +++ MyWebsite/MyWebsite/Views/Admin/Index.cshtml | 3 +- .../MyWebsite/Views/Shared/Wishlist.cshtml | 30 ++++ 9 files changed, 300 insertions(+), 1 deletion(-) create mode 100644 MyWebsite/MyWebsite/Areas/Admin/Controllers/WishlistController.cs create mode 100644 MyWebsite/MyWebsite/Areas/Admin/Views/Shared/Wishlist.cshtml create mode 100644 MyWebsite/MyWebsite/Models/WishlistModel.cs create mode 100644 MyWebsite/MyWebsite/Resources/Views/Shared/Wishlist.ru.resx create mode 100644 MyWebsite/MyWebsite/ViewModels/WishlistViewModel.cs create mode 100644 MyWebsite/MyWebsite/Views/Shared/Wishlist.cshtml diff --git a/MyWebsite/MyWebsite/Areas/Admin/Controllers/WishlistController.cs b/MyWebsite/MyWebsite/Areas/Admin/Controllers/WishlistController.cs new file mode 100644 index 0000000..0c4a5df --- /dev/null +++ b/MyWebsite/MyWebsite/Areas/Admin/Controllers/WishlistController.cs @@ -0,0 +1,43 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using MyWebsite.Controllers; +using MyWebsite.Models; +using MyWebsite.Models.Databases; +using System; +using System.Linq; + +namespace MyWebsite.Areas.Admin.Controllers +{ + [Authorize] + [Area("Admin")] + public class WishlistController : ExtendedController + { + private const string ViewPath = "Areas/Admin/Views/Shared/Wishlist.cshtml"; + public WishlistController(DatabaseContext context) : base(context) { } + + [HttpGet] + public IActionResult Index() => + View(ViewPath, Database.Wishlist.FirstOrDefault()); + + [HttpPost] + public IActionResult Index(WishlistModel model) + { + if (model == null) + throw new ArgumentNullException(nameof(model)); + + if (!ModelState.IsValid) + { + ModelState.AddModelError("Error", "Invalid data"); + return View(ViewPath, model); + } + + model.LastUpdated = DateTime.Now; + + Database.Wishlist.RemoveRange(Database.Wishlist); + Database.Wishlist.Add(model); + Database.SaveChanges(); + + return RedirectToAction("Index", "Admin"); + } + } +} \ No newline at end of file diff --git a/MyWebsite/MyWebsite/Areas/Admin/Views/Shared/Wishlist.cshtml b/MyWebsite/MyWebsite/Areas/Admin/Views/Shared/Wishlist.cshtml new file mode 100644 index 0000000..6b1ca00 --- /dev/null +++ b/MyWebsite/MyWebsite/Areas/Admin/Views/Shared/Wishlist.cshtml @@ -0,0 +1,48 @@ +@model WishlistModel +@{ + ViewData["Title"] = "Wishlist"; +} + +
+  Back to the list +

Edit wishlist

+

+ Previously updated on @Model?.LastUpdated +

+ + // Open wishlist +
+ +
+
+
+ +
+ + + + +
+ + + + +
+ +
+
+ +@section Imports +{ + +} \ No newline at end of file diff --git a/MyWebsite/MyWebsite/Controllers/HomeController.cs b/MyWebsite/MyWebsite/Controllers/HomeController.cs index affaa67..811c062 100644 --- a/MyWebsite/MyWebsite/Controllers/HomeController.cs +++ b/MyWebsite/MyWebsite/Controllers/HomeController.cs @@ -67,5 +67,9 @@ namespace MyWebsite.Controllers return Redirect(Extensions.CheckNullOrWhitespace(Request.Headers["Referer"], "/")); } + + [Route("Wishlist")] + public IActionResult Wishlist() => + View(new WishlistViewModel(Database, CultureInfo.CurrentUICulture)); } } \ No newline at end of file diff --git a/MyWebsite/MyWebsite/Models/Databases/DatabaseContext.cs b/MyWebsite/MyWebsite/Models/Databases/DatabaseContext.cs index bde2171..9533749 100644 --- a/MyWebsite/MyWebsite/Models/Databases/DatabaseContext.cs +++ b/MyWebsite/MyWebsite/Models/Databases/DatabaseContext.cs @@ -12,6 +12,7 @@ namespace MyWebsite.Models.Databases public DbSet Resume { get; set; } public DbSet ShortLinks { get; set; } public DbSet CustomData { get; set; } + public DbSet Wishlist { get;set; } public DatabaseContext(DbContextOptions options) : base(options) => Database.EnsureCreated(); diff --git a/MyWebsite/MyWebsite/Models/WishlistModel.cs b/MyWebsite/MyWebsite/Models/WishlistModel.cs new file mode 100644 index 0000000..aa9cf03 --- /dev/null +++ b/MyWebsite/MyWebsite/Models/WishlistModel.cs @@ -0,0 +1,24 @@ +using System; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace MyWebsite.Models +{ + public class WishlistModel + { + [Key] + [Required] + public Guid Id { get; set; } = Guid.NewGuid(); + [Required] + [Column(TypeName = "text")] + [DisplayName("English list")] + + public string EnglishContent { get; set; } + [Column(TypeName = "text")] + [DisplayName("Russian list")] + public string RussianContent { get;set; } + [DisplayName("Last chagnge")] + public DateTime LastUpdated { get; set; } + } +} \ No newline at end of file diff --git a/MyWebsite/MyWebsite/Resources/Views/Shared/Wishlist.ru.resx b/MyWebsite/MyWebsite/Resources/Views/Shared/Wishlist.ru.resx new file mode 100644 index 0000000..c9ae481 --- /dev/null +++ b/MyWebsite/MyWebsite/Resources/Views/Shared/Wishlist.ru.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Список желаемого + + + На тот случай, если вы не знаете что мне подарить + + + Последнее обновление + + \ No newline at end of file diff --git a/MyWebsite/MyWebsite/ViewModels/WishlistViewModel.cs b/MyWebsite/MyWebsite/ViewModels/WishlistViewModel.cs new file mode 100644 index 0000000..d35b2f7 --- /dev/null +++ b/MyWebsite/MyWebsite/ViewModels/WishlistViewModel.cs @@ -0,0 +1,19 @@ +using MyWebsite.Models; +using MyWebsite.Models.Databases; +using System.Globalization; +using System.Linq; + +namespace MyWebsite.ViewModels +{ + public class WishlistViewModel : ViewModelBase + { + public WishlistModel Wishlist { get; } + public string Content { get; } + public WishlistViewModel(DatabaseContext context, CultureInfo language) : base(context) + { + Wishlist = context.Wishlist.FirstOrDefault(); + Content = language?.TwoLetterISOLanguageName == "ru" ? Wishlist?.RussianContent : Wishlist?.EnglishContent; + Content ??= Wishlist?.EnglishContent; + } + } +} \ No newline at end of file diff --git a/MyWebsite/MyWebsite/Views/Admin/Index.cshtml b/MyWebsite/MyWebsite/Views/Admin/Index.cshtml index 96d97ea..e1df5f8 100644 --- a/MyWebsite/MyWebsite/Views/Admin/Index.cshtml +++ b/MyWebsite/MyWebsite/Views/Admin/Index.cshtml @@ -12,7 +12,8 @@ // Projects
// Badges
// Resume
- // Contact links + // Contact links
+ // Wishlist

// Link shortener & Files diff --git a/MyWebsite/MyWebsite/Views/Shared/Wishlist.cshtml b/MyWebsite/MyWebsite/Views/Shared/Wishlist.cshtml new file mode 100644 index 0000000..2fe027a --- /dev/null +++ b/MyWebsite/MyWebsite/Views/Shared/Wishlist.cshtml @@ -0,0 +1,30 @@ +@model WishlistViewModel +@{ + ViewData["Title"] = Localizer["My wishlist"]; +} + +@section OpenGraph +{ + + + + + + + + + + + + +} + +

+

@Localizer["My wishlist"]

+

@Localizer["In case you don't know what to give me"]

+

@Localizer["Last update"]: @Model?.Wishlist?.LastUpdated

+
+ +
+ @Html.Raw(Model?.Content) +
\ No newline at end of file