{"id":21056344,"url":"https://github.com/erengaygusuz/visitorbook","last_synced_at":"2026-04-12T13:38:46.229Z","repository":{"id":217609392,"uuid":"700710096","full_name":"erengaygusuz/VisitorBook","owner":"erengaygusuz","description":"ASP.Net Core 7 MVC Layered Web Project","archived":false,"fork":false,"pushed_at":"2024-01-17T11:29:18.000Z","size":32491,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-20T19:23:40.696Z","etag":null,"topics":["asp-net-core","asp-net-mvc","aspnetcore","best-practices","bootstrap","csharp","docker","docker-compose","dotnet-core","fluentvalidation","layered-architecture","multilanguage","web-application"],"latest_commit_sha":null,"homepage":"https://visitor-book.erengaygusuz.com.tr","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/erengaygusuz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-10-05T06:26:03.000Z","updated_at":"2024-07-09T12:24:41.000Z","dependencies_parsed_at":"2024-01-17T13:13:20.108Z","dependency_job_id":null,"html_url":"https://github.com/erengaygusuz/VisitorBook","commit_stats":null,"previous_names":["erengaygusuz/visitorbook"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erengaygusuz%2FVisitorBook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erengaygusuz%2FVisitorBook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erengaygusuz%2FVisitorBook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erengaygusuz%2FVisitorBook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/erengaygusuz","download_url":"https://codeload.github.com/erengaygusuz/VisitorBook/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243500787,"owners_count":20300775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asp-net-core","asp-net-mvc","aspnetcore","best-practices","bootstrap","csharp","docker","docker-compose","dotnet-core","fluentvalidation","layered-architecture","multilanguage","web-application"],"created_at":"2024-11-19T16:49:58.510Z","updated_at":"2026-04-12T13:38:46.223Z","avatar_url":"https://github.com/erengaygusuz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Visitor Book\n\n![Alt text](/screenshots/11-visitor-book.png)\n\n## Project Goal and Scope\n\n* Most people like to travel. We may forget the knowledge of the places we visit after a certain period of time. For example, which day and time did we visit the place we visited?\n* Let's assume that we need to save these places somewhere with time information.\n* Let's even imagine that people in a certain region want to record the information of their visitors and want to see various statistical data about their visitors.\n* Considering these needs, I developed a web-based application. Another reason why I developed the project was to gain new information and improve myself.\n\n* You can try the live version of the project at the following address:\n* Link: https://visitorbook.erengaygusuz.com.tr\n  \n* You can register the system as a Visitor, request for Visitor Recorder Account or try as an Admin with using information below\n  \n* Email: ``` admin@gmail.com ```\n* Password: ``` 12345 ```\n\n## User Types of the Project and the Transactions They Can Perform\n\n* There are 4 user types available in this application. These are:\n\n  - SuperAdmin\n  - Admin\n  - VisitorRecorder\n  - Visitor\n\n* The permissions of user types can be changed at run time.\n* For example, while the Admin's powers are greater than those of the Visitor, their powers can be reduced by an edit.\n* You can see the authorization table of user types in the system at below.\n\n![Alt text](/screenshots/visitor-book-user-authorization-table.png)\n\n## Project Architecture\n\n* There are 5 layers in the application part of the project. These are:\n\n  - VisitorBook.BL\n  - VisitorBook.Core\n  - VisitorBook.DAL\n  - VisitorBook.Test\n  - VisitorBook.UI\n \n* Additionally, the general architectural diagram of the project is shown in the image below:\n\n![Alt text](/screenshots/visitor-book.system-architecture.png)\n\n## General Technical Features of the Project\n\n* Layered Architecture with ASP.NET Core 7 MVC\n* Generic Repository and Service Pattern\n* UnitOfWork Pattern \n* Advanced Membership System with Identity\n* Advanced Role and Permission Based Authentication and Authorization\n* Sending Email with Html Email Template Files\n* Multi-Language Support (Including All Plugins Used in the Application)\n* Object Mapping with Automapper\n* Fake Data Generation with Bogus\n* Using DTOs in data transfer\n* Using View Models in Views\n* Logging Database Transactions with Audit Log\n* Error Management with Exception Handling Middleware\n* Logging of Errors\n* Listing Datas with Datatables (Paging, Searching, Filtering)\n* Datas Export in PDF Format\n* Listing Datas with MVC Grid (Paging, Searching, Filtering)\n* MS SQL Server Database\n* Using Entity Framework Core 7 ORM\n* Database Migration with Code First Approach\n* Server Side Validation with Fluent Validation\n* Client Side Validation with jQuery Validation Unobtrusive\n* Using Extension Methods\n* Minifying and Bundling Css and Js Files with Bundler Minifier\n* Notification with Toastr and SweetAlert\n* Docker and Docker Compose Support\n* Unit Test xUnit (Not completed yet)\n* Specflow BDD Test (Not completed yet)\n\n## Tools and Technologies Used in the Project\n\nThe list of all packages and tools used in the project is provided below, along with their version and web address information.\n\n* General Technologies\n  \n  - ASP.NET Core 7 MVC\n  - jQuery\n  - HTML5\n  - CSS3\n  - Javascript\n\n* Css and Javascript Packages\n  - Google Web Fonts\n  - Font Awesome 5.15.4\n  - iCheck Bootstrap 3.0.1\n  - AdminLTE 3.2.0\n  - BS Stepper 1.7.0\n  - Fancy Select\n  - Bootstrap Icons 1.11.3\n  - Animate 3.5.2\n  - Owl Carousel 2.2.1\n  - Customized Bootstrap Stylesheet 5.0.0\n  - Tempusdominus Bootstrap 4 5.39.0\n  - Select2 4.0.13\n  - Overlay Scrollbars 1.13.0\n  - DataTables 1.11.4\n  - Flag Icon\n  - SweetAlert2 11.4.0\n  - Toastr\n  - Mvc Grid 7.2.0\n  - jQuery 3.6.0\n  - Bootstrap 4.6.1\n  - Wow 1.3.0\n  - Easing 1.4.1\n  - Waypoints 4.0.1\n  - Counterup 2.1.0\n  - jQuery UI 1.11.4\n  - jQuery Validation 1.19.3\n  - Datetime Moment 1.7\n  - InputMask 5.0.7\n  - Pdf Make 0.2.4\n \n* Nuget Packages\n\n  - Auto Mapper 12.0.1\n  - Fluent Validation 11.9.0\n  - Bogus 35.3.0\n  - GeoTimeZone 5.3.0\n  - Microsoft.AspNetCore.Identity.EntityFrameworkCore 7.0.15\n  - Microsoft.AspNetCore.Localization 2.2.0\n  - Microsoft.AspNetCore.Mvc.ViewFeatures 2.2.0\n  - Microsoft.EntityFrameworkCore 7.0.15\n  - System.Device.Location.Portable 1.0.0\n  - System.Linq.Dynamic.Core 1.3.7\n  - TimeZoneConverter 6.1.0\n  - Microsoft.EntityFrameworkCore.SqlServer 7.0.15\n  - Microsoft.EntityFrameworkCore.Tools 7.0.15\n  - Microsoft.NET.Test.Sdk 17.6.0\n  - xunit 2.4.2\n  - xunit.runner.visualstudio 2.4.5\n  - coverlet.collector 3.2.0\n  - AspNetCoreHero.ToastNotification 1.1.0\n  - AutoMapper.Extensions.Microsoft.DependencyInjection 12.0.1\n  - BuildBundlerMinifier 3.2.449\n  - FluentValidation.AspNetCore 11.3.0\n  - FluentValidation.DependencyInjectionExtensions 11.9.0\n  - Microsoft.EntityFrameworkCore.Design 7.0.15\n  - Microsoft.VisualStudio.Web.CodeGeneration.Design 7.0.11\n  - NonFactors.Grid.Core.Mvc6 7.2.0\n  - NonFactors.Grid.Mvc6 7.2.0\n  - WebMarkupMin.AspNetCore7 2.15.2\n\n## Project Usage\n\nThere are some options to use this project.\n\n* If you would like to only run this project locally, you can do it with two options:\n\n  - Downloading and running its release package on IIS Server in Windows Machine\n    \n    - First, go to release section and dowload latest release from there.\n    - After that unzip the package. There are three ``` appsettings.json ``` files in this package.\n    - You should type your secrets there for environments. For example, you should add your database server connection string to ``` ConnectionString ``` section.\n    - You can use generic ``` appsettings.json ``` but if you want to use other environment please fill the releated one. For instance, for development use ``` appsettings.Development.json ```\n      \n  - (Suggested) Pulling its docker image from dockerhub and running it as a container with docker-compose (Windows or Linux Machine does not matter)\n \n    - First download the ``` docker-compose.yml ``` file from repository.\n    - After that you should override the paths for volumes.\n    - For SSL certificate, type the certificate file path instead of this path: ``` C:\\Users\\gaygu\\.aspnet\\https ```\n    - For Static Files, type static files path instead of this path: ``` E:\\DownloadedFiles\\StaticFiles ```\n    - Now you should override environments values.\n    - Choose the envrironment. Type Development or Production for ``` ASPNETCORE_ENVIRONMENT ```.\n    - Type your SSL certificate password for ``` ASPNETCORE_Kestrel__Certificates__Default__Password ```.\n    - Type your certificate filename with extension for ``` ASPNETCORE_Kestrel__Certificates__Default__Path ``` after /https/.\n    - Type your connection string for ``` ConnectionString ```.\n    - Type your credentils for ``` EmailSettings__Host ```, ``` EmailSettings__Port ```, ``` EmailSettings__Email ``` and ``` EmailSettings__Password ```.\n    - Type true or false for ``` EmailSettings__SSLCertificate ``` if your mail server has SSL or not.\n    - Now you are read to go. Open a terminal or commant prompt and run this command ``` docker-compose up ```\n    - After that your database will be created and also you can see the project by opening your browser and typing ``` https://localhost:{HTTPS_PORT} ```\n   \n* If you want to run project on Visual Studio\n  \n  - Clone the project using this command: ``` git clone https://github.com/erengaygusuz/VisitorBook.git ```\n  - After that you should add ``` appsettings.json ``` files to the project.\n  - Open ``` VisitorBook.UI ``` layer and create these 3 files. ``` appsettings.json ```, ``` appsettings.Development.json ``` and ``` appsettings.Production.json ```\n  - Copy and past the information below to all of them. Please do not forget the change values according to yours as I mention before.\n    \n  ```\n  {\n    \"ConnectionString\": \"TYPE_YOUR_DATABASE_CONNECTION_STRING\",\n    \"Logging\": {\n      \"LogLevel\": {\n        \"Default\": \"Information\",\n        \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  },\n    \"EmailSettings\": {\n      \"Host\": \"TYPE_YOUR_EMAIL_SERVER_URL\",\n      \"Port\": \"TYPE_YOUR_EMAIL_SERVER_PORT\",\n      \"Email\": \"TYPE_YOUR_SENDER_EMAIL\",\n      \"Password\": \"TYPE_YOUR_SENDER_PASSWORD\",\n      \"SSLCertificate\": TYPE_IF_YOUR_SERVER_HAS_SSL_CERTIFICATE_OR_NOT_AS_BOOLEAN_TRUE_OR_FALSE\n  },\n    \"StaticFilePath\": \"StaticFiles\" \n  }\n  ```\n\n  - Now open the project solution with Visual Studio 2022 Preview (You can also use VS Code or others)\n  - Run the project with https port option.\n  - You should see project that is running on your browser like ``` https://localhost:{HTTPS_PORT} ``` \n\n## Related Links\n\n* Youtube:\n* Docker Hub: https://hub.docker.com/r/erengaygusuz/visitor-book\n* Live Version: https://visitorbook.erengaygusuz.com.tr\n\n## License\n\nThe MIT License (MIT)\n\n## Screenshots\n\n![Alt text](/screenshots/01-visitor-book.png)\n\n![Alt text](/screenshots/02-visitor-book.png)\n\n![Alt text](/screenshots/03-visitor-book.png)\n\n![Alt text](/screenshots/04-visitor-book.png)\n\n![Alt text](/screenshots/05-visitor-book.png)\n\n![Alt text](/screenshots/06-visitor-book.png)\n\n![Alt text](/screenshots/07-visitor-book.png)\n\n![Alt text](/screenshots/08-visitor-book.png)\n\n![Alt text](/screenshots/09-visitor-book.png)\n\n![Alt text](/screenshots/10-visitor-book.png)\n\n![Alt text](/screenshots/11-visitor-book.png)\n\n![Alt text](/screenshots/12-visitor-book.png)\n\n![Alt text](/screenshots/13-visitor-book.png)\n\n![Alt text](/screenshots/14-visitor-book.png)\n\n![Alt text](/screenshots/15-visitor-book.png)\n\n![Alt text](/screenshots/16-visitor-book.png)\n\n![Alt text](/screenshots/17-visitor-book.png)\n\n![Alt text](/screenshots/18-visitor-book.png)\n\n![Alt text](/screenshots/19-visitor-book.png)\n\n![Alt text](/screenshots/20-visitor-book.png)\n\n![Alt text](/screenshots/21-visitor-book.png)\n\n![Alt text](/screenshots/22-visitor-book.png)\n\n![Alt text](/screenshots/23-visitor-book.png)\n\n![Alt text](/screenshots/24-visitor-book.png)\n\n![Alt text](/screenshots/25-visitor-book.png)\n\n![Alt text](/screenshots/26-visitor-book.png)\n\n![Alt text](/screenshots/27-visitor-book.png)\n\n![Alt text](/screenshots/28-visitor-book.png)\n\n![Alt text](/screenshots/29-visitor-book.png)\n\n![Alt text](/screenshots/30-visitor-book.png)\n\n![Alt text](/screenshots/31-visitor-book.png)\n\n![Alt text](/screenshots/32-visitor-book.png)\n\n![Alt text](/screenshots/33-visitor-book.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferengaygusuz%2Fvisitorbook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferengaygusuz%2Fvisitorbook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferengaygusuz%2Fvisitorbook/lists"}