https://github.com/profjordanov/jj-online-store
A sample online store app with Microsoft .NET Core Stack.
https://github.com/profjordanov/jj-online-store
asp-net-core asp-net-core-mvc css either entity-framework-core html javascript jquery razor sql-server
Last synced: 2 months ago
JSON representation
A sample online store app with Microsoft .NET Core Stack.
- Host: GitHub
- URL: https://github.com/profjordanov/jj-online-store
- Owner: profjordanov
- License: mit
- Created: 2018-09-10T17:03:20.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-07-13T21:34:51.000Z (about 2 years ago)
- Last Synced: 2025-04-10T20:06:56.053Z (6 months ago)
- Topics: asp-net-core, asp-net-core-mvc, css, either, entity-framework-core, html, javascript, jquery, razor, sql-server
- Language: HTML
- Homepage: https://softunikum.azurewebsites.net/
- Size: 12.4 MB
- Stars: 7
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# JJ Online Store
A product catalog website with custom design.# Features
What's special about this specific implementation is that it employs a different approach on error handling and propagation. It uses the **Maybe** and **Either** monads to enable very explicit function declarations and allow us to abstract the conditionals and validations into the type itself.
This allows you to do cool stuff like:
```csharp
public Task> LoginAsync(CredentialsModel model) =>
GetUser(u => u.Email == model.Email)
.FilterAsync(user => UserManager.CheckPasswordAsync(user, model.Password), "Invalid credentials.".ToError())
.MapAsync(async user =>
{
var result = Mapper.Map(user);
await SignInManager.SignInAsync(user, isPersistent: false);
return result;
});
```You can read more about **Maybe** and **Either** [here](https://devadventures.net/2018/04/17/forget-object-reference-not-set-to-an-instance-of-an-object-functional-adventures-in-c/) and [here](https://devadventures.net/2018/09/20/real-life-examples-of-functional-c-sharp-either/).
## Architecture:
- [x] AutoMapper
- [x] EntityFramework Core with SQL Server and ASP.NET Identity
- [x] File logging with Serilog
- [x] Neat folder structure```
├───Web
│ ├───JjOnlineStore.Web
│ └───JjOnlineStore.Web.Infrastructure
├───Services
│ ├───JjOnlineStore.Services.Business
│ ├───JjOnlineStore.Services.Data
│ └───JjOnlineStore.Services.Core
├───Data
│ ├───JjOnlineStore.Data.EF
│ ├───JjOnlineStore.Data.Entities
│ └───JjOnlineStore.Data
├───JjOnlineStore.Common
├───JjOnlineStore.Extensions
└───Tests
└───JjOnlineStore.Tests
```
- [x] Thin Controllers```csharp
/// POST: /Account/Login
///
/// Login.
///
[HttpPost]
public async Task Login(CredentialsModel model)
=> (await _usersService.LoginAsync(model))
.Match(RedirectToLocal, ErrorLogin);
```- [x] Database Transactions
- [x] Database Triggers
- [x] Using Azure Websites and Azure Blob Storage
- [x] Integrated Azure Enterprise Productivity Chatbot
- [x] Integrated Azure SendGrid Email Service
### User Interface and User Experience (UI & UX)
- [x] Mobile-First Responsive Design
- [x] Using custom web design
- [x] Followed the best practices for high-quality HTML and CSS: good formatting, good code structure, consistent naming, semantic HTML, correct usage of classes, etc.
- [x] Works correctly in the latest HTML5-compatible browsers: Chrome, Firefox, Edge, Opera, Safari
- [x] Preloader### Test Suite
- [x] xUnit
- [x] Autofixture
- [x] Moq
- [x] Shouldly
- [x] Arrange Act Assert Pattern
## Achievements- Excellent grade in C# MVC Frameworks - ASP.NET Core course with trainer : Nikolai Kostov.
