Skip to content

gozdemogus/edu-platform-project

Repository files navigation

Up School .NET Development Graduation Project

This repo includes my project I developed as Up School graduation project.

About

An education aimed web app similar to Udemy, where users can access educational content in various categories, add courses to the cart and purchase, view the profiles of content producers and filter courses accordingly.

In addition, adding courses with the admin panel, assigning courses to content producers, adding categories, creating campaigns, displaying notifications, displaying data via instant dashboard, creating a to-do list and performing CRUD operations on this list, creating user documents in Excel and also as PDF, consume APIs and with the help of APIs doing translations or searching the internet.

Also, creating a role, assigning a role to users, viewing the communication messages received on the site and replying to them by e-mail, getting informed automatically when a new contact message received.

HomePage.mov

Intro

The project topic selection is left to the individuals, however, the desired and completed features in the project content are as follows:

Built With

  • C#
  • .NET Core 5.0
  • N Tier Architecture
  • Entity Framework
  • Fluent API
  • JSON Web Token
  • SignalR
  • HTML, CSS
  • JavaScript, Ajax, jQuery
  • External API's
  • Fluent Validation
  • Auto Mapper
  • Repository Design Pattern
  • Unit of Work
  • CQRS

Division

The Showcase

Which is offered to the end user, where operations such as course listing, enrollment and purchasing are carried out.

MainUsage.mov

Admin Panel

With dynamic dashboard where operations such as adding courses, managing, assigning roles, user document operations are done.

I used SignalR in order to get instant data on charts and analysis at widgets and used jQuery and Ajax for updating To-Do's. Also, an API is consumed in order to get instant Bitcoin rate. The data exchange interval especially kept this short in order to show the instant change.

Dashboard.mov

Project Layers

In project I used N Tier architecture and also all of the required layers are provided.

image

(back to top)

Identity

Project contains Identity framework. User can:

  • Register
  • Sign In
  • Sign Out
  • E-Mail Confirm
  • Forgot Password operations
  • Reset Password via user page
  • Access role based pages

image

image

image

All forms input fields are able to validate the inputs.

image

image

(back to top)

DI Container

image

(back to top)

Reporting

At Admin Panel, admin can list the users and get the user list data as Excel and download their individual info as PDF. iTextSharp and. ClosedXml are used. image image image

(back to top)

Dynamic Schedule (To-Do List)

In this part, I benefited heavily from jQuery and Ajax technologies. The user can update the status, view the details of the list items and delete the list item by performing the requests without refreshing the page. image

(back to top)

SignalR - Instant Dashboard

With SignalR, I transferred various analysis and statistical data to the dashboard instantly and pulled the instant Bitcoin data through an API and displayed it on the screen. image

(back to top)

CQRS - Unit Of Work

I did all the operations in the Course entity with CQRS.

Ekran Resmi 2023-02-05 20 16 05

image

I carried out the approval processes in the payment system with Unit of Work. I assigned a SuperAdmin user as default and when user wants to buy the course credits passing into the SuperAdmin's balance.

image

image

(back to top)

Dynamic API Consume

With the translator API that I have integrated, translation can be made in the desired target language and web search results can be accessed via the search engine API. image image

(back to top)

SQL Trigger

I created a trigger that allows records to be posted to the Notifications table when a record is sent to the Contacts table, and inserts parameters from the contacts table there.

CREATE TRIGGER NotificationTrigger ON Contacts
AFTER INSERT
AS BEGIN TRY
  SET NOCOUNT ON;
  INSERT INTO Notifications (Message, DateTime, MessageWriter)
  SELECT 'A new contact message received', GETDATE(), ISNULL(inserted.UserName, 'Unknown User')
  FROM inserted;
END TRY
BEGIN CATCH
      ROLLBACK TRANSACTION;
      THROW;
END CATCH

image

(back to top)

JSON Web Token

I included JSON Web Token in API-Campaign layer and used it in campaigns access service. I set token duration as 5 minutes and after accessing the token, I saved it over the cookies for future requests. image

   Response.Cookies.Append("access_token", (string)token, new CookieOptions
                    {
                        HttpOnly = true,
                        Secure = true, // set to true if you're using https
                        Expires = DateTime.Now.AddMinutes(5)
                   });
                   

image

image

(back to top)

API Layer

I developed Campaign entities in API layer and provided all the CRUD operations via API requests. image

image

(back to top)

DTO Layer

image

AutoMapper is used for DTO mapping image

(back to top)

Fluent Validation

Fluent Validation is used in input fields. image

(back to top)

Courses

Courses are listed dynamically and be filtered by instructor. image image

(back to top)

Cart

Users can add the courses they want to buy to the cart, see the total amount in the cart and buy them. In addition, the undesired courses can be removed from the cart, the updated new amount is reflected in the cart.

image

Contacts

Contact messages can be sent by anonymous or logged in user. Admin can view them to see if they have replied before, replies are sent via e-mail via the admin panel.

image

image

image

Error Pages

404 - Not Found image 403 - Unauthorized image

(back to top)

About

My graduation project for Up School .NET Development Program πŸŽ“ πŸ’™

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published