Skip to content

Commit bcc008b

Browse files
committed
Moved temp controller logic to minimal API
1 parent fb026ad commit bcc008b

File tree

3 files changed

+42
-14
lines changed

3 files changed

+42
-14
lines changed

Servers/Administration/OJS.Servers.Administration/Extensions/WebApplicationExtensions.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
namespace OJS.Servers.Administration.Extensions;
22

33
using Microsoft.AspNetCore.Builder;
4+
using Microsoft.AspNetCore.Http;
45
using Microsoft.Extensions.Configuration;
56
using Microsoft.Extensions.DependencyInjection;
7+
using OJS.Common;
68
using OJS.Data;
79
using OJS.Servers.Administration.Middleware;
810
using OJS.Servers.Infrastructure.Extensions;
11+
using OJS.Services.Administration.Business.Contests;
12+
using System;
913
using static OJS.Common.GlobalConstants.Roles;
1014

1115
internal static class WebApplicationExtensions
@@ -26,6 +30,24 @@ public static WebApplication ConfigureWebApplication(this WebApplication app, IC
2630
.MapHealthChecksUI()
2731
.RequireAuthorization(auth => auth.RequireRole(Administrator));
2832

33+
app.MapGet("/api/temp/ImportContestsFromCategory", async (
34+
IContestsImportBusinessService contestsImportBusinessService,
35+
int sourceContestCategoryId,
36+
int destinationContestCategoryId,
37+
bool dryRun = true) =>
38+
{
39+
var result = await contestsImportBusinessService.ImportContestsFromCategory(
40+
sourceContestCategoryId,
41+
destinationContestCategoryId,
42+
dryRun);
43+
44+
return result.IsError
45+
? Results.BadRequest(result.Error)
46+
: Results.Content(result.Data, GlobalConstants.MimeTypes.TextHtml);
47+
})
48+
.RequireAuthorization(auth => auth.RequireRole(Administrator))
49+
.WithRequestTimeout(TimeSpan.FromMinutes(5));
50+
2951
return app
3052
.UseAndMapHangfireDashboard();
3153
}

Servers/Administration/OJS.Servers.Administration/Controllers/TempController.cs renamed to Services/Administration/OJS.Services.Administration.Business/Contests/ContestsImportBusinessService.cs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
1-
namespace OJS.Servers.Administration.Controllers;
1+
namespace OJS.Services.Administration.Business.Contests;
22

33
using FluentExtensions.Extensions;
4-
using Microsoft.AspNetCore.Authorization;
5-
using Microsoft.AspNetCore.Mvc;
64
using Microsoft.EntityFrameworkCore;
75
using Microsoft.Extensions.Options;
8-
using OJS.Common;
96
using OJS.Common.Enumerations;
107
using OJS.Data.Models;
118
using OJS.Data.Models.Checkers;
129
using OJS.Data.Models.Contests;
1310
using OJS.Data.Models.Problems;
1411
using OJS.Data.Models.Submissions;
1512
using OJS.Data.Models.Tests;
16-
using OJS.Servers.Infrastructure.Controllers;
1713
using OJS.Services.Administration.Business.ProblemGroups;
1814
using OJS.Services.Administration.Business.Problems;
1915
using OJS.Services.Administration.Data;
2016
using OJS.Services.Administration.Models.Contests;
17+
using OJS.Services.Common.Models;
2118
using OJS.Services.Infrastructure.Configurations;
2219
using System;
2320
using System.Collections.Generic;
@@ -28,8 +25,7 @@ namespace OJS.Servers.Administration.Controllers;
2825
using System.Text;
2926
using System.Threading.Tasks;
3027

31-
[Authorize(Roles = GlobalConstants.Roles.Administrator)]
32-
public class TempController(
28+
public class ContestsImportBusinessService(
3329
IHttpClientFactory httpClientFactory,
3430
IOptions<ApplicationUrlsConfig> urlsConfig,
3531
IContestsDataService contestsData,
@@ -38,31 +34,31 @@ public class TempController(
3834
ISubmissionTypesDataService submissionTypesData,
3935
ITestRunsDataService testRunsData,
4036
IProblemsBusinessService problemsBusiness,
41-
IProblemGroupsBusinessService problemGroupsBusiness)
42-
: BaseApiController
37+
IProblemGroupsBusinessService problemGroupsBusiness) : IContestsImportBusinessService
4338
{
4439
private readonly HttpClient httpClient = httpClientFactory.CreateClient();
4540
private readonly ApplicationUrlsConfig urls = urlsConfig.Value;
4641

47-
public async Task<IActionResult> ImportContestsFromCategory(int sourceContestCategoryId, int destinationContestCategoryId, bool dryRun = true)
42+
public async Task<ServiceResult<string>> ImportContestsFromCategory(int sourceContestCategoryId, int destinationContestCategoryId,
43+
bool dryRun = true)
4844
{
4945
if (sourceContestCategoryId == 0 || destinationContestCategoryId == 0)
5046
{
51-
return this.BadRequest("Invalid contest category ids.");
47+
return new ServiceResult<string>("Invalid contest category ids.");
5248
}
5349

5450
var contestIds = await this.httpClient.GetFromJsonAsync<int[]>($"{this.urls.LegacyJudgeUrl}/api/Contests/GetExistingIdsForCategory?contestCategoryId={sourceContestCategoryId}&apiKey={this.urls.LegacyJudgeApiKey}");
5551

5652
if (contestIds == null)
5753
{
58-
return this.BadRequest("Failed to get contest IDs.");
54+
return new ServiceResult<string>("Failed to get contest IDs.");
5955
}
6056

6157
var destinationContestCategory = await contestCategoriesData.OneById(destinationContestCategoryId);
6258

6359
if (destinationContestCategory == null)
6460
{
65-
return this.BadRequest($"Destination contest category with id {destinationContestCategoryId} does not exist.");
61+
return new ServiceResult<string>($"Destination contest category with id {destinationContestCategoryId} does not exist.");
6662
}
6763

6864
var result = new StringBuilder();
@@ -129,7 +125,7 @@ public async Task<IActionResult> ImportContestsFromCategory(int sourceContestCat
129125
: "<p>Import completed.</p>");
130126
result.AppendLine("<hr>");
131127

132-
return this.Content(result.ToString(), GlobalConstants.MimeTypes.TextHtml);
128+
return ServiceResult<string>.Success(result.ToString());
133129
}
134130

135131
private static DateTime? ConvertTimeToUtc(DateTime? dateTime)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace OJS.Services.Administration.Business.Contests;
2+
3+
using OJS.Services.Common.Models;
4+
using OJS.Services.Infrastructure;
5+
using System.Threading.Tasks;
6+
7+
public interface IContestsImportBusinessService : IService
8+
{
9+
Task<ServiceResult<string>> ImportContestsFromCategory(int sourceContestCategoryId, int destinationContestCategoryId, bool dryRun = true);
10+
}

0 commit comments

Comments
 (0)