{"id":15039424,"url":"https://github.com/fritzthecat9/freakfightsfan","last_synced_at":"2026-02-12T04:36:19.283Z","repository":{"id":224829925,"uuid":"686318927","full_name":"FritzTheCat9/FreakFightsFan","owner":"FritzTheCat9","description":"The \"FreakFightsFan\" application contains information and statistics about federations, events, fights and fighters of freak fight federations. I created this application because I wanted to practice building Full Stack applications with .NET technology.","archived":false,"fork":false,"pushed_at":"2024-11-20T22:01:06.000Z","size":37483,"stargazers_count":1,"open_issues_count":16,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-13T15:17:14.378Z","etag":null,"topics":["api","blazor","blazor-client","blazor-webassembly","c-sharp","c-sharp-12","cqrs","csharp","dot-net","dot-net-9","dotnet","entity-framework-core","fluent-validation","jwt","mediatr","minimal-api","minimalapi","mudblazor","serilog","vertical-slice-architecture"],"latest_commit_sha":null,"homepage":"","language":"C#","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/FritzTheCat9.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-02T11:52:52.000Z","updated_at":"2024-11-20T22:01:10.000Z","dependencies_parsed_at":"2024-11-12T21:21:23.909Z","dependency_job_id":"42247e3f-2dee-4c8d-8a4f-86e8760fa7ab","html_url":"https://github.com/FritzTheCat9/FreakFightsFan","commit_stats":{"total_commits":127,"total_committers":1,"mean_commits":127.0,"dds":0.0,"last_synced_commit":"fad4e6b82f834ae90e0d5bcdb3d71601a7399092"},"previous_names":["fritzthecat9/freakfightsfan"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FritzTheCat9%2FFreakFightsFan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FritzTheCat9%2FFreakFightsFan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FritzTheCat9%2FFreakFightsFan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FritzTheCat9%2FFreakFightsFan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FritzTheCat9","download_url":"https://codeload.github.com/FritzTheCat9/FreakFightsFan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243428436,"owners_count":20289317,"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":["api","blazor","blazor-client","blazor-webassembly","c-sharp","c-sharp-12","cqrs","csharp","dot-net","dot-net-9","dotnet","entity-framework-core","fluent-validation","jwt","mediatr","minimal-api","minimalapi","mudblazor","serilog","vertical-slice-architecture"],"created_at":"2024-09-24T20:42:46.091Z","updated_at":"2026-02-12T04:36:19.200Z","avatar_url":"https://github.com/FritzTheCat9.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FreakFightsFan\n\nThe \"FreakFightsFan\" application contains information and statistics about federations, events, fights and fighters of\nfreak fight federations. I created this application because I wanted to practice building Full Stack applications with\n.NET technology. (C#, .NET, Minimal API, Blazor WebAssembly, MudBlazor, Entity Framework Core and Vertical Slices\nArchitecture)\n\n## Table of contents\n\n* [Launch](#launch)\n* [Presentation](#presentation)\n* [Technologies](#technologies)\n* [Architecture](#architecture)\n* [Project types and references](#project-types-and-references)\n* [Projects content](#projects-content)\n* [Packages](#packages)\n* [Features](#features)\n* [Roles](#roles)\n* [Project status](#project-status)\n\n## Launch\n\nRun application with one command (setup all docker containers, create database, apply migrations):\n\n```\ncd C:\\Users\\bartl\\source\\repos\\FreakFightsFan\ndocker compose up --build -d\n```\n\nCreated containers:\n\n- C# Web API backend:\n\n```\nhttp://localhost:5000\n```\n\n- Blazor WASM frontend:\n\n```\nhttp://localhost:7000\n```\n\n- MSSQL database:\n\n```\nHost: localhost \nPort: 1433 \nDatabase/Schema: FreakFightsFan\nUsername: sa\nPassword: Password1!\nServer: freakfightsfan.database\n```\n\n- Seq Api logs:\n\n```\nhttp://localhost:8081\n```\n\nLogin credentials:\n\n```\nSuperAdmin:\n- Email: freakfightsfan@gmail.com\n- Password: Asd123!\nAdmin:\n- Email: freakfightsfan1@gmail.com\n- Password: Asd123!\nUser:\n- Email: freakfightsfan2@gmail.com\n- Password: Asd123!\n```\n\n## Presentation\n\nFederations view:\n![Federations image](./images/1_federations.png)\n\nEvents view:\n![Events image](./images/2_events.png)\n\nFights view:\n![Fights image](./images/3_fights.png)\n\nCreate fight dialog:\n![Create fight image](./images/4_create_fight_dialog.png)\n\nFighters view:\n![Fighters image](./images/5_fighters.png)\n\nFighter profile view:\n![Fighter profile image](./images/6_fighter_profile.png)\n\nUsers view:\n![Users image](./images/7_users.png)\n\nDictionaries view:\n![Dictionaries image](./images/8_dictionaries.png)\n\nDictionary items view:\n![Dictionary items image](./images/9_dictionary_items.png)\n\nImages view:\n![Images image](./images/10_images.png)\n\nSettings view:\n![Settings image](./images/11_settings.png)\n\n## Technologies\n\n- C# 12\n- .NET 9.0\n- Blazor WebAssembly\n- Angular 17.1.1\n\n## Architecture\n\nBlazor WebAssembly frontend with .NET Minimal API connecting to the MSSQL database. Monolithic architecture with\nVertical Slices. Code separated by feature.\n\n![Algorithm schema](./diagrams/FFF_ArchitectureCommunication.png)\n\n## Project types and references\n\n- FreakFightsFan.Api - ASP .NET Core Web API (Backend)\n- FreakFightsFan.Blazor - Blazor WebAssembly Standalone App (Frontend)\n- FreakFightsFan.FeatureGenerator - Console App (Code generation for feature)\n- FreakFightsFan.IntegrationTests - xUnit Test Project (Integration Tests)\n- FreakFightsFan.Shared - Class Library (Backend and Frontend shared code)\n- FreakFightsFan.UnitTests - xUnit Test Project (Unit Tests)\n- freak-fights-fan - Angular Project (Frontend 2)\n\n![Algorithm schema](./diagrams/FFF_ArchitectureReferences.png)\n\n## Projects content\n\nTechnical features in projects.\n\n![Algorithm schema](./diagrams/FFF_UniqueFeatures.png)\n\n## Packages\n\nNuget packages and libraries used in projects.\n\n- Api\n    - [EntityFrameworkCore](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer) - ORM for connecting\n      to the database\n    - [MediatR](https://www.nuget.org/packages/MediatR/) - CQRS, Vertical Slices (code separated by Features)\n    - [FluentValidation](https://www.nuget.org/packages/FluentValidation) - Commands, Queries and server side logic\n      validation\n    - [FluentEmail](https://www.nuget.org/packages/FluentEmail.Razor) - Sending registration confirmation email and\n      registration succeeded email\n    - [Serilog](https://www.nuget.org/packages/Serilog/3.1.2-dev-02097) - Logging to console, file and Seq\n    - [JwtBearer](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.JwtBearer) - Jwt Token\n      Authentication\n    - [Swagger](https://www.nuget.org/packages/Swashbuckle.AspNetCore) - Manual Api testing\n    - [Selenium](https://www.nuget.org/packages/OpenQA.Selenium.Chrome.ChromeDriverExtensions) - Fighter images import\n      from Instagram (web scraping)\n- Blazor\n    - [MudBlazor](https://www.nuget.org/packages/MudBlazor) - Blazor UI library\n    - [Blazored.FluentValidation](https://www.nuget.org/packages/Blazored.FluentValidation) - Frontend validation +\n      Backend validation\n    - [Blazored.LocalStorage](https://www.nuget.org/packages/Blazored.LocalStorage) - store Jwt Token and selected\n      language in local storage\n    - [Localization](https://www.nuget.org/packages/Microsoft.Extensions.Localization) - Validation errors and pages\n      translations\n- Integration Tests\n    - [xunit](https://www.nuget.org/packages/xunit) - Testing library\n    - [FluentAssertions](https://www.nuget.org/packages/FluentAssertions/7.0.0-alpha.3) - Assertions library\n    - [Testcontainers](https://www.nuget.org/packages/Testcontainers) - Api integration tests with docker\n- Angular\n    - [Angular Material](https://material.angular.io/) - Angular UI library\n\n## Features\n\n- Dictionaries\n    - Create dictionary\n    - Delete dictionary\n    - Update dictionary\n    - Get all dictionaries (paginated, sorted and filtered)\n    - Get selected dictionary\n- Dictionary items\n    - Create dictionary item\n    - Delete dictionary item\n    - Update dictionary item\n    - Get all dictionary items by code (paginated, sorted and filtered)\n    - Get all dictionary item (paginated, sorted and filtered)\n    - Get selected dictionary item\n- Events\n    - Create federation event\n    - Delete federation event\n    - Update federation event\n    - Get all federation events (paginated, sorted and filtered)\n    - Get selected federation event\n- Federations\n    - Create federation\n    - Delete federation\n    - Update federation\n    - Get all federations (paginated, sorted and filtered)\n    - Get selected federation\n- Fighters\n    - Create fighter\n    - Delete fighter\n    - Update fighter\n    - Get all fighters (paginated, sorted and filtered)\n    - Get selected fighter\n- Fights\n    - Create event fight\n    - Delete event fight\n    - Move fight (upwards or downwards the fight card)\n    - Update event fight\n    - Get all event fights (paginated, ordered)\n    - Get fighter profile (selected fighter fights and statistics)\n    - Get selected fighter\n- Images\n    - Create image (save image file on server)\n    - Delete image\n    - Import federation images\n    - Import fighters images from their Instagram profiles\n    - Update image\n    - Get all images (paginated and sorted)\n    - Get selected image\n- Teams\n    - Get all teams (paginated)\n    - Get selected team\n- Users\n    - Confirm user registration and send registration success email\n    - Degrade selected user (Admin -\u003e User)\n    - Login user if email is confirmed\n    - Promote selected user (User -\u003e Admin)\n    - Refresh Jwt Token\n    - Register new user and send confirmation email\n    \u003c!-- - Update user image --\u003e\n    - Update user theme\n    - Get all users (paginated, sorted and filtered)\n    - Get selected user\n\n## Roles\n\n- SuperAdmin - ony one user have SuperUser role (can promote and degrade other users)\n- Admin - can do CRUD operations across website, access to Admin Panel\n- User - can view website data\n- Anonymous - can view website data\n\n## Project status\n\nWeb Api and Blazor frontend are working. I am currently adding more features and improvements.\n\nPlanned features and updates:\n\n- Request CorrelationId visible on frontend page with error (user can give error correlationId to admin and ask for\n  help)\n- Blazor logging\n- Fix bug with validation on create / update fight modal\n- Api Health Checks\n- Fight Types (MMA, BOXING, K1, ...)\n- Fight Result (KO, TKO, ...)\n- Fight description (special rules etc.)\n- Fighter nationality (as dictionary item)\n- GitHub actions\n- App deployment\n- Update user image feature\n- Resend email confirmation email\n- Send fight card email to users before incoming event\n- Fix Feature Generator\n- More integration tests\n- Unit tests\n- Working Angular frontend\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffritzthecat9%2Ffreakfightsfan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffritzthecat9%2Ffreakfightsfan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffritzthecat9%2Ffreakfightsfan/lists"}