What are the three games that define you as a gamer?
๐ For Evaluators: Admin credentials, database setup, and RAWG API demo key are provided in the Setup & Running Locally section below.
The Big Three is a community-driven ASP.NET Core web application where gamers curate and share their ultimate three-game collections โ the games that shaped them, defined them, or simply brought them the most joy. Discover what others have chosen, give stars to collections you love, and leave your mark on the community.
| Community Hub | Collection Details |
|---|---|
![]() |
![]() |
| Player Profile | Game Info Modal |
|---|---|
![]() |
![]() |
| Stats Page | Admin Panel |
|---|---|
![]() |
![]() |
A full walkthrough of The Big Three โ features, RAWG API integration, Admin panel, and more.
- Browse all curated collections in a beautiful card-based layout
- Search by collection title or curator name
- Filter by game genre
- Sort by newest or most starred
- Pagination for easy browsing
- Every registered user can create exactly one "Big Three" collection โ their three defining games
- Each game slot includes a title, cover image, genre, and personal description
- Full edit and delete functionality for your own collection
- Star/unstar collections from other curators
- Autocomplete โ start typing a game title in the Add/Edit form and get live suggestions from the RAWG database, complete with cover thumbnails, release year, and rating
- Game Details Modal โ click any game cover on a collection page to open a cinematic modal showing Metacritic score, release date, developer, platforms, genres, and a full screenshot gallery
- Screenshot Lightbox โ click any screenshot to view it full size with prev/next navigation
- Graceful degradation โ the app works fully without an API key; RAWG features are silently hidden
- Public profile pages for every user โ viewable by anyone
- Private dashboard showing your own collection, starred collections, rank, and stats
- Custom avatar via URL
- Collector Rank system based on stars earned
| Stars Earned | Rank |
|---|---|
| 100+ | ๐ฅ Legendary Collector |
| 30+ | ๐ Superstar Collector |
| 10+ | ๐ฅ Popular Collector |
| 5+ | โฌ๏ธ Rising Star |
| 1+ | ๐ฑ Novice Collector |
| 0 | ๐ Newcomer |
- Community-wide statistics: total collections, members, stars, comments
- Top 3 collections podium
- Most popular genres bar chart
- Top 10 collectors and commenters leaderboard
- Leave comments on any collection
- Delete your own comments
- Admins can moderate all comments
- Full user management: view, search, delete users
- Promote users to Administrator or demote them back to User
- Collection management: view and delete any collection
- Admin dashboard with community overview
The project follows a clean N-Tier architecture split across 7 projects:
TheBigThree/ โ ASP.NET Core Web (MVC)
โโโ TheBigThree.Data/ โ DbContext, Migrations, Repository
โโโ TheBigThree.Data.Models/ โ Entity classes
โโโ TheBigThree.GCommon/ โ Shared helpers (RankHelper)
โโโ TheBigThree.Services/ โ Service implementations
โโโ TheBigThree.Services.Core/ โ Service interfaces, IRepository<T>
โโโ TheBigThree.Web.ViewModels/ โ ViewModels for all views
โโโ TheBigThree.Tests/ โ NUnit unit tests
| Layer | Project | Responsibility |
|---|---|---|
| Presentation | TheBigThree | Controllers, Views, Areas, wwwroot |
| Application | TheBigThree.Services | Business logic, service implementations |
| Contracts | TheBigThree.Services.Core | Interfaces, Repository abstraction |
| Data | TheBigThree.Data | EF Core DbContext, migrations, generic repository |
| Domain | TheBigThree.Data.Models | Entity classes (Collection, Game, Genre, Like, Comment, ApplicationUser) |
| Shared | TheBigThree.GCommon | Cross-cutting helpers (RankHelper) |
| ViewModels | TheBigThree.Web.ViewModels | Data transfer objects for views |
All data access goes through IRepository<T>:
public interface IRepository<T>
{
Task<T?> GetByIdAsync(int id);
Task<IEnumerable<T>> GetAllAsync();
Task AddAsync(T entity);
Task UpdateAsync(T entity);
Task DeleteAsync(int id);
Task SaveChangesAsync();
IQueryable<T> All();
}ApplicationUser โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Id, UserName, Email, AvatarUrl, CreatedOn โ
โ โ
โโโ< Collection >โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Id, Title, TotalStars, CreatedOn, UserId โ
โ โ โ
โ โโโ< Game >โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Id, Title, ImageUrl, โ
โ โ Description, GenreId โ
โ โ โ โ
โ โ โโโ< Genre > โ
โ โ Id, Name โ
โ โ โ
โ โโโ< Comment >โโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Id, Content, CreatedOn, โ
โ UserId, CollectionId โ
โ โ
โโโ< Like >โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโ
UserId (PK), CollectionId (PK)
[Many-to-Many junction table]
| Service | Responsibilities |
|---|---|
CollectionService |
CRUD for collections, search, filter, pagination, star system |
CommentService |
Add and delete comments with authorization checks |
LikeService |
Star/unstar collections, fetch starred collections |
ProfileService |
User profile data, own collection preview, public profiles |
StatsService |
Community statistics, top collections, leaderboard data |
AdminService |
User and collection management, promote/demote roles |
RawgService |
RAWG API integration โ game search and detail fetching |
- All form inputs validated with Data Annotations
[Required],[StringLength],[RegularExpression]on ViewModels- Custom business logic validation in services (e.g., one collection per user)
- Authorization checks in service layer (not just controller)
- AntiForgeryToken on all POST forms
- jQuery Unobtrusive Validation on all forms
- Inline error messages per field
- Required fields enforced at schema level
- Foreign key constraints
- Composite primary key on
Likes(UserId + CollectionId)
The application seeds the following on first run:
- 2 roles:
User,Administrator - 7 users including 1 admin (
CommanderShepard) - 19 genres (Action, RPG, Horror, Strategy, etc.)
- 7 collections with 3 games each, complete with cover images
Admin credentials for testing:
Username: CommanderShepard
Email: shepard@normandy.com
Password: Spectre123!
| Threat | Mitigation |
|---|---|
| SQL Injection | EF Core parameterized queries โ no raw SQL |
| XSS | Razor auto-encodes all output; HTML tags escaped |
| CSRF | [AutoValidateAntiforgeryToken] globally applied |
| Unauthorized access | [Authorize] on all controllers; service-layer ownership checks |
| Account lockout | 3 failed attempts triggers 5-minute lockout |
| Secure cookies | HttpOnly, SecurePolicy.Always, SameSite.Strict |
| Parameter tampering | Ownership verified server-side before any mutation |
The Big Three integrates with the RAWG Video Games Database API to power:
- Game autocomplete when adding/editing a collection
- Game details modal with Metacritic scores, platforms, developers, and screenshots
- Create a free account at rawg.io
- Go to rawg.io/apidocs and register your app
- Copy your API key
The API key is stored using ASP.NET User Secrets and is never committed to the repository.
From the project root (where TheBigThree.csproj lives):
dotnet user-secrets set "RawgApi:ApiKey" "YOUR_API_KEY_HERE" --project TheBigThree.csprojNote: Without an API key, the application works fully โ RAWG features (autocomplete and game details modal) are silently disabled. No errors will occur.
- .NET 8 SDK
- Visual Studio 2022 or later
- SQL Server LocalDB (included with Visual Studio)
- Clone the repository
git clone https://github.com/krasimir-paunov/TheBigThree.git
cd TheBigThree-
Open in Visual Studio
- Open
TheBigThree.sln
- Open
-
Configure the database connection string
Open
appsettings.jsonand update the connection string to match your local SQL Server instance:{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=TheBigThreeDb;Trusted_Connection=True;MultipleActiveResultSets=true" } }Note: If you are using a named SQL Server instance instead of LocalDB, replace
(localdb)\\mssqllocaldbwith your server name, for exampleServer=.\\SQLEXPRESSorServer=YOUR_PC_NAME\\SQLEXPRESS. -
Apply migrations and seed the database
- In Package Manager Console, set Default Project to
TheBigThree.Data - Run:
- In Package Manager Console, set Default Project to
Update-Database-
(Optional) Configure RAWG API
A demo key has been provided for evaluation purposes:
dotnet user-secrets set "RawgApi:ApiKey" "1114097eb59340f19cf02a957f4bd3e8" --project TheBigThree.csprojRun this command in the Developer PowerShell terminal inside Visual Studio (View โ Terminal), from the solution root folder.
Important: After setting the key, fully restart the application (Stop + F5) for the changes to take effect.
This demo key was created specifically for academic project evaluation. For your own key, register a free account at rawg.io.
-
Run the application
- Press
F5orCtrl+F5in Visual Studio - Navigate to
https://localhost:{port}
- Press
-
Login with the seeded admin account
Username: CommanderShepard
Password: Spectre123!
The project includes 97 unit tests across 10 test classes, using NUnit, Moq, and MockQueryable.Moq, with 73.8% service layer coverage.
TheBigThree.Tests/
โโโ Services/
โ โโโ CollectionServiceTests.cs (19 tests)
โ โโโ CommentServiceTests.cs (10 tests)
โ โโโ LikeServiceTests.cs (11 tests)
โ โโโ ProfileServiceTests.cs (10 tests)
โ โโโ AdminServiceTests.cs (11 tests)
โ โโโ StatsServiceTests.cs (7 tests)
โโโ Controllers/
โโโ HomeControllerTests.cs (5 tests)
โโโ StatsControllerTests.cs (3 tests)
โโโ LeaderboardControllerTests.cs (3 tests)
โโโ CollectionControllerTests.cs (18 tests)
In Visual Studio: Test โ Run All Tests
Or via CLI:
dotnet testServices (73.8% line coverage)
- Collection CRUD and business rules (one per user)
- Comment add/delete with authorization and admin bypass
- Like/unlike with duplicate prevention and star decrement
- Profile and public profile data loading
- Admin promote/demote/delete operations
- Community stats and leaderboard ordering
Controllers
- Action return types (ViewResult, RedirectToActionResult)
- Correct view model passing
- Redirect targets on not-found and error scenarios
- Service delegation verification
- Authenticated user context mocking
- Exception handling branches (Star/RemoveStar)
The application is designed to be deployable to Microsoft Azure (App Service + Azure SQL). Deployment instructions will be added if a public hosting URL becomes available.
TheBigThree/
โโโ Areas/
โ โโโ Admin/ โ Admin area (Dashboard, Users, Collections)
โ โโโ Identity/ โ Scaffolded Identity pages (Login, Register, Manage)
โโโ Controllers/ โ Main app controllers
โโโ Views/ โ Razor views per controller
โโโ wwwroot/
โ โโโ css/ โ Per-page CSS files + site.css
โ โโโ js/ โ site.js, hub.js, rawg.js, public-profile.js
โ โโโ images/
โ โโโ seed/ โ Seeded game cover images
โ โโโ backgrounds/ โ Page background textures
โโโ TheBigThree.Data/
โ โโโ TheBigThreeDbContext.cs
โ โโโ Migrations/
โ โโโ Repository.cs
โโโ TheBigThree.Data.Models/
โ โโโ ApplicationUser.cs
โ โโโ Collection.cs
โ โโโ Game.cs
โ โโโ Genre.cs
โ โโโ Like.cs
โ โโโ Comment.cs
โโโ TheBigThree.Services/ โ Service implementations
โโโ TheBigThree.Services.Core/ โ Interfaces + IRepository<T>
โโโ TheBigThree.Web.ViewModels/ โ ViewModels
โโโ TheBigThree.GCommon/ โ RankHelper
โโโ TheBigThree.Tests/ โ NUnit tests
| Technology | Version | Purpose |
|---|---|---|
| ASP.NET Core MVC | 8.0 | Web framework |
| Entity Framework Core | 8.0 | ORM / data access |
| ASP.NET Identity | 8.0 | Authentication & authorization |
| SQL Server LocalDB | Latest | Database |
| Bootstrap | 5.3 | UI framework |
| Bootstrap Icons | 1.11 | Icon library |
| NUnit | 3.x | Unit testing |
| Moq | 4.x | Mocking |
| MockQueryable.Moq | 7.0 | IQueryable mocking |
| RAWG API | v1 | Game database |





