Skip to content

Commit 232b7ac

Browse files
committed
feat: Set rankpoints and allow to disable specific points like IndirectStars
1 parent cf72e4e commit 232b7ac

18 files changed

Lines changed: 458 additions & 368 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ artifacts/
7777

7878
# Chutzpah Test files
7979
_Chutzpah*
80-
80+
.idea/
8181
# Visual C++ cache files
8282
ipch/
8383
*.aps

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ Actually another repositories with the same goal doesn't count stats with accura
162162

163163
#### Requirements
164164

165-
- [.NET 6](https://dotnet.microsoft.com/download/dotnet/6.0)
165+
- [.NET 10](https://dotnet.microsoft.com/download/dotnet/10.0)
166166

167167
### Authorization
168168

@@ -201,4 +201,4 @@ And another special thank to [Sindre Sorhus](https://github.com/sindresorhus) to
201201

202202
---
203203

204-
Made .NET 6 ❤️
204+
Made .NET 10 ❤️

src/AwesomeGithubStats.Api/AwesomeGithubStats.Api.csproj

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
<Project Sdk="Microsoft.NET.Sdk.Web">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<RootNamespace>AwesomeGithubStats.Api</RootNamespace>
66
<UserSecretsId>372edb10-8465-4af6-a84d-28d86be75fe3</UserSecretsId>
77
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="Microsoft.AspNetCore.ResponseCompression" Version="2.3.0" />
1211
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
13-
<PackageReference Include="Swashbuckle.AspNetCore" Version="8.*" />
12+
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.*" />
1413
</ItemGroup>
1514

1615
<ItemGroup>

src/AwesomeGithubStats.Api/Controllers/UserStatsController.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public UserStatsController(ILogger<UserStatsController> logger,
3838
public async Task<IActionResult> Get(string username, [FromQuery] UserStatsOptions options)
3939
{
4040
var userStats = await _githubService.GetUserStats(username);
41-
var rank = _rankService.CalculateRank(userStats);
41+
var rank = _rankService.CalculateRank(userStats, options.Points);
4242
var content = await _svgService.GetUserStatsImage(rank, options);
4343

4444

@@ -52,12 +52,13 @@ public async Task<IActionResult> Get(string username, [FromQuery] UserStatsOptio
5252
public async Task<IActionResult> Preview(string username, [FromQuery] UserStatsOptions options)
5353
{
5454
var userStats = await _githubService.GetUserStats(username);
55-
var rank = _rankService.CalculateRank(userStats);
55+
var rank = _rankService.CalculateRank(userStats, options.Points);
5656
var content = await _svgService.GetUserStatsImage(rank, options);
5757

5858

5959
return File(content, "image/svg+xml; charset=utf-8");
6060
}
61+
6162
[HttpGet("{username}/stats"), ResponseCache(Location = ResponseCacheLocation.Client, Duration = 600, VaryByQueryKeys = new[] { "username" })]
6263
public async Task<IActionResult> GetStats(string username)
6364
{
@@ -70,7 +71,7 @@ public async Task<IActionResult> GetStats(string username)
7071
public async Task<IActionResult> GetRank(string username)
7172
{
7273
var userStats = await _githubService.GetUserStats(username);
73-
var rank = _rankService.CalculateRank(userStats);
74+
var rank = _rankService.CalculateRank(userStats, RankPoints.Default);
7475
return Ok(rank);
7576
}
7677

@@ -87,13 +88,13 @@ public IActionResult Teste(string card, [FromQuery] UserStatsOptions options)
8788

8889
var usercard = new UserStatsCard(new RankDegree()
8990
{
90-
new(){Rank = "S++",Points = 300000},
91-
new(){Rank = "S+",Points = 63000},
92-
new(){Rank = "S",Points = 28000},
93-
new(){Rank = "A++",Points = 21000},
94-
new(){Rank = "A+",Points = 14000},
95-
new(){Rank = "A",Points = 7000},
96-
new(){Rank = "💪",Points = 0}
91+
new() { Rank = "S++", Points = 300000 },
92+
new() { Rank = "S+", Points = 63000 },
93+
new() { Rank = "S", Points = 28000 },
94+
new() { Rank = "A++", Points = 21000 },
95+
new() { Rank = "A+", Points = 14000 },
96+
new() { Rank = "A", Points = 7000 },
97+
new() { Rank = "💪", Points = 0 }
9798
}, options);
9899
var rank = _rankService.CalculateRank(new()
99100
{
@@ -111,12 +112,11 @@ public IActionResult Teste(string card, [FromQuery] UserStatsOptions options)
111112
PullRequestsToAnotherRepositories = 20,
112113
CommitsToAnotherRepositories = 51,
113114
CommitsToMyRepositories = 365
114-
115-
});
115+
}, options.Points);
116116
var style = new CardStyles();
117117
style.Apply(options);
118118
return File(usercard.Svg(coent, rank, style, new CardTranslations()), "image/svg+xml");
119119
}
120120
#endif
121121
}
122-
}
122+
}
Lines changed: 109 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,119 @@
1-
using System;
1+
using AwesomeGithubStats.Api.Configuration;
2+
using Microsoft.AspNetCore.Builder;
23
using Microsoft.AspNetCore.Hosting;
4+
using Microsoft.AspNetCore.ResponseCompression;
5+
using Microsoft.Extensions.DependencyInjection;
36
using Microsoft.Extensions.Hosting;
47
using Serilog;
58
using Serilog.Events;
9+
using System;
10+
using System.IO.Compression;
11+
using System.Linq;
12+
using System.Net.Mime;
13+
14+
var builder = WebApplication.CreateBuilder(args);
15+
16+
// --- Serilog (equivalente ao seu Main com try/catch) ---
17+
Log.Logger = new LoggerConfiguration()
18+
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
19+
.Enrich.FromLogContext()
20+
.WriteTo.Console()
21+
.CreateLogger();
22+
23+
builder.Host.UseSerilog();
624

7-
namespace AwesomeGithubStats.Api
25+
// --- Kestrel: remover header "Server" ---
26+
builder.WebHost.ConfigureKestrel(o => o.AddServerHeader = false);
27+
28+
try
829
{
9-
public class Program
30+
var services = builder.Services;
31+
var config = builder.Configuration;
32+
33+
// --- MVC + Swagger só em Development ---
34+
if (builder.Environment.IsDevelopment())
35+
{
36+
services
37+
.AddMvcCore(options => options.Filters.Add<LogRequestTimeFilterAttribute>())
38+
.AddApiExplorer();
39+
40+
services.AddSwaggerGen();
41+
}
42+
else
43+
{
44+
services.AddMvcCore();
45+
}
46+
47+
services.AddResponseCaching();
48+
49+
services.AddResponseCompression(options =>
1050
{
11-
public static int Main(string[] args)
51+
options.Providers.Add<BrotliCompressionProvider>();
52+
options.Providers.Add<GzipCompressionProvider>();
53+
options.EnableForHttps = true;
54+
options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[]
1255
{
13-
Log.Logger = new LoggerConfiguration()
14-
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
15-
.Enrich.FromLogContext()
16-
.WriteTo.Console()
17-
.CreateLogger();
18-
19-
try
20-
{
21-
Log.Information("Starting web host");
22-
CreateHostBuilder(args).Build().Run();
23-
return 0;
24-
}
25-
catch (Exception ex)
26-
{
27-
Log.Fatal(ex, "Host terminated unexpectedly");
28-
return 1;
29-
}
30-
finally
31-
{
32-
Log.CloseAndFlush();
33-
}
34-
}
35-
36-
public static IHostBuilder CreateHostBuilder(string[] args) =>
37-
Host.CreateDefaultBuilder(args)
38-
.ConfigureWebHostDefaults(webBuilder =>
39-
{
40-
webBuilder.ConfigureKestrel(o => o.AddServerHeader = false);
41-
webBuilder.UseStartup<Startup>();
42-
});
56+
"image/jpeg",
57+
"image/png",
58+
"application/font-woff2",
59+
"image/svg+xml",
60+
MediaTypeNames.Application.Json
61+
});
62+
});
63+
64+
services.AddCors(options =>
65+
{
66+
options.AddPolicy("AllowAnyOrigin",
67+
policy => policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
68+
});
69+
70+
services.Configure<BrotliCompressionProviderOptions>(options =>
71+
{
72+
options.Level = CompressionLevel.Optimal;
73+
});
74+
75+
services.ConfigureGithubServices(config);
76+
77+
services.AddHealthChecks();
78+
79+
var app = builder.Build();
80+
81+
// --- Pipeline ---
82+
app.UseResponseCompression();
83+
app.UseResponseCaching();
84+
85+
if (app.Environment.IsDevelopment())
86+
{
87+
app.UseDeveloperExceptionPage();
88+
app.UseSwagger();
89+
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Awesome Github Stats v1"));
4390
}
91+
92+
app.UseCors("AllowAnyOrigin");
93+
app.UseHttpsRedirection();
94+
95+
app.UseDefaultFiles(new DefaultFilesOptions
96+
{
97+
DefaultFileNames = new[] { "index.html" }
98+
});
99+
100+
app.UseStaticFiles();
101+
app.UseRouting();
102+
103+
app.MapHealthChecks("/health");
104+
app.MapControllers();
105+
106+
Log.Information("Starting web host");
107+
app.Run();
108+
109+
return 0;
110+
}
111+
catch (Exception ex)
112+
{
113+
Log.Fatal(ex, "Host terminated unexpectedly");
114+
return 1;
115+
}
116+
finally
117+
{
118+
Log.CloseAndFlush();
44119
}

src/AwesomeGithubStats.Api/Startup.cs

Lines changed: 0 additions & 92 deletions
This file was deleted.

src/AwesomeGithubStats.Api/appsettings.json

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,6 @@
1010
}
1111
},
1212
"AllowedHosts": "*",
13-
"RankPoints": {
14-
"Commits": 1,
15-
"ContributedToNotOwnerRepositories": 100,
16-
"ContributedToOwnRepositories": 1,
17-
"CreatedRepositories": 1,
18-
"DirectStars": 5,
19-
"Followers": 1,
20-
"IndirectStars": 0.3,
21-
"Issues": 5,
22-
"PullRequests": 1,
23-
"PullRequestsToAnotherRepositories": 10,
24-
"CommitsToMyRepositories": 1,
25-
"CommitsToAnotherRepositories": 1,
26-
"ContributedTo": 1
27-
},
2813
"RankDegree": [
2914
{
3015
"Rank": "OMG",

0 commit comments

Comments
 (0)