Skip to content

Part of XtremeIdiots Portal solution; player and server data storage. Deployed using Terraform and GitHub Actions.

License

Notifications You must be signed in to change notification settings

frasermolyneux/portal-repository

XtremeIdiots Portal - Repository

Backend data APIs, DTOs, and infrastructure definitions that power the XtremeIdiots Portal across multiple API versions.

⚙️ Workflows

DevOps Secure Scanning Code Quality Feature Development Pull Request Validation Release to Production Copilot Setup Steps Dependabot Automerge Destroy Development Integration Tests Main Branch Build and Tag Publish Tagged Build Update Dashboard From Staging

📌 Overview

Versioned REST APIs, DTO abstractions, EF Core data access, and Terraform infrastructure keep the XtremeIdiots Portal synchronized with in-game telemetry. API hosts share mapping extensions, ApiResponse envelopes, and Azure App Configuration defaults, while Terraform standardizes App Service, API Management, SQL, Key Vault, and monitoring assets across every environment.

🧱 Technology & Frameworks

  • .NET 9.0 – API hosts, DTO libraries, clients, and automated tests
  • EF Core DataLib for SQL Server/Azure SQL – Generated data layer packaged for the APIs
  • Terraform 1.14+ with AzureRM 4.54.0 – Infrastructure as code for Azure resources
  • Azure App Service, Azure API Management, Azure Front Door – Production hosting surface

📚 Documentation Index

🚀 Getting Started

Highlights

  • Legacy, V1, and V2 API hosts reuse DTOs, mapping helpers, and telemetry defaults for consistent responses.
  • Automated Swagger generation feeds API Management and Terraform so inbound/outbound policies always match the code.
  • Terraform provisions App Service, API Management, SQL, Key Vault, and dashboards via OIDC-only deployments.

Sample Usage (optional)

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddControllers();

var app = builder.Build();

app.MapGroup("/api/v2/players")
   .MapGet("/", async (IPlayersService service, CancellationToken ct) =>
   {
       var apiResponse = await service.GetPlayersAsync(expand: true, cancellationToken: ct);
       return apiResponse.ToHttpResult();
   });

app.Run();

🛠️ Developer Quick Start

git clone https://github.com/frasermolyneux/portal-repository.git
cd portal-repository
dotnet tool restore
dotnet build src/XtremeIdiots.Portal.Repository.sln
dotnet test src/XtremeIdiots.Portal.Repository.sln --filter FullyQualifiedName!~IntegrationTests
dotnet run --project src/XtremeIdiots.Portal.Repository.Api.V2/XtremeIdiots.Portal.Repository.Api.V2.csproj

🤝 Contributing

Please read the contributing guidance; this is a learning and development project.

🔐 Security

Please read the security guidance; I am always open to security feedback through email or opening an issue.

📄 License

Distributed under the GNU General Public License v3.0.

About

Part of XtremeIdiots Portal solution; player and server data storage. Deployed using Terraform and GitHub Actions.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •