Skip to content

Commit

Permalink
changes, idk
Browse files Browse the repository at this point in the history
  • Loading branch information
NixFey committed Jan 4, 2025
1 parent ee6b8d3 commit 0b7bb14
Show file tree
Hide file tree
Showing 15 changed files with 155 additions and 25 deletions.
4 changes: 3 additions & 1 deletion FiMAdminApi.Data/DataContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ public class DataContext(DbContextOptions<DataContext> options) : DbContext(opti
public DbSet<Event> Events { get; init; }
public DbSet<EventNote> EventNotes { get; init; }
public DbSet<EventStaff> EventStaffs { get; init; }
public DbSet<Match> Matches { get; set; }
public DbSet<EventRanking> EventRankings { get; init; }
public DbSet<Match> Matches { get; init; }
public DbSet<ScheduleDeviation> ScheduleDeviations { get; init; }
public DbSet<TruckRoute> TruckRoutes { get; init; }

protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
Expand Down
20 changes: 20 additions & 0 deletions FiMAdminApi.Data/Models/EventRanking.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System.ComponentModel.DataAnnotations;

namespace FiMAdminApi.Data.Models;

public class EventRanking
{
[Key]
public int Id { get; set; }

public required Guid EventId { get; set; }
public required int Rank { get; set; }
public required int TeamNumber { get; set; }
public IEnumerable<double>? SortOrders { get; set; }
public int? Wins { get; set; }
public int? Ties { get; set; }
public int? Losses { get; set; }
public double? QualAverage { get; set; }
public int? Disqualifications { get; set; }
public int? MatchesPlayed { get; set; }
}
16 changes: 16 additions & 0 deletions FiMAdminApi.Data/Models/ScheduleDeviation.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System.ComponentModel.DataAnnotations;

namespace FiMAdminApi.Data.Models;

public class ScheduleDeviation
{
[Key]
public int Id { get; set; }

public required Guid EventId { get; set; }
public string? Description { get; set; }
public required long AfterMatchId { get; set; }
public virtual Match? AfterMatch { get; set; }
public long? AssociatedMatchId { get; set; }
public virtual Match? AssociatedMatch { get; set; }
}
2 changes: 1 addition & 1 deletion FiMAdminApi/Endpoints/EventSyncEndpoints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ private static async Task<Results<Ok<EventSyncResult>, NotFound, BadRequest<stri
if (string.IsNullOrEmpty(evt.Code) || evt.SyncSource is null)
return TypedResults.BadRequest("Event does not have a sync source");

return TypedResults.Ok(await service.SyncEvent(evt));
return TypedResults.Ok(await service.ForceEventSyncStep(evt, syncStepName));
}

private static async Task<Ok<EventSyncResult>> SyncCurrentEvents([FromServices] DataContext context,
Expand Down
18 changes: 12 additions & 6 deletions FiMAdminApi/EventSync/EventSyncService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ public async Task<EventSyncResult> SyncEvent(Event evt)
var syncSteps = services.GetServices<EventSyncStep>().ToList();
var alreadyRunSteps = new List<Type>();

var runAgain = true; // We want to run until we're able to go a full iteration without running any steps.
while (runAgain)
bool runAgain; // We want to run until we're able to go a full iteration without running any steps.
do
{
runAgain = false;
foreach (var step in syncSteps.Where(s =>
Expand All @@ -46,7 +46,7 @@ public async Task<EventSyncResult> SyncEvent(Event evt)
return new EventSyncResult(false, ex.Message);
}
}
}
} while (runAgain);

await dbContext.SaveChangesAsync();

Expand All @@ -64,9 +64,15 @@ public async Task<EventSyncResult> ForceEventSyncStep(Event evt, string syncStep

if (syncStep is null) return new EventSyncResult(false, "Unable to find sync step");

await syncStep.RunStep(evt, dataSource);

return new EventSyncResult(true);
try
{
await syncStep.RunStep(evt, dataSource);
return new EventSyncResult(true);
}
catch (Exception ex)
{
return new EventSyncResult(false, ex.Message);
}
}
}

Expand Down
3 changes: 2 additions & 1 deletion FiMAdminApi/EventSync/EventSyncServiceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public static void AddEventSyncSteps(this IServiceCollection services)
typeof(InitialSync),
typeof(LoadQualSchedule),
typeof(UpdateQualResults),
typeof(UpdateQualRankings)
typeof(UpdateQualRankings),
typeof(LoadAlliances)
};

foreach (var step in steps)
Expand Down
19 changes: 19 additions & 0 deletions FiMAdminApi/EventSync/Steps/LoadAlliances.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using FiMAdminApi.Clients;
using FiMAdminApi.Data;
using FiMAdminApi.Data.Models;
using Microsoft.EntityFrameworkCore;

namespace FiMAdminApi.EventSync.Steps;

public class LoadAlliances(DataContext dbContext)
: EventSyncStep([EventStatus.AwaitingAlliances])
{
public override async Task RunStep(Event evt, IDataClient eventDataClient)
{
//var alliances = await eventDataClient.(evt);

//if (alliances.Count == 0) return;

await dbContext.SaveChangesAsync();
}
}
43 changes: 41 additions & 2 deletions FiMAdminApi/EventSync/Steps/LoadQualSchedule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,16 @@ public override async Task RunStep(Event evt, IDataClient dataClient)
if (schedule.Count > 0)
{
// Clear out the existing matches and load in a new set
await dbContext.ScheduleDeviations.Where(d =>
d.EventId == evt.Id && d.AfterMatch != null &&
d.AfterMatch.TournamentLevel == TournamentLevel.Qualification)
.ExecuteDeleteAsync();

await dbContext.Matches
.Where(m => m.EventId == evt.Id && m.TournamentLevel == TournamentLevel.Qualification)
.ExecuteDeleteAsync();

await dbContext.Matches.AddRangeAsync(schedule.Select(m => new Match
var dbMatches = schedule.Select(m => new Match
{
EventId = evt.Id,
TournamentLevel = TournamentLevel.Qualification,
Expand All @@ -32,7 +37,41 @@ await dbContext.Matches
ActualStartTime = null,
PostResultTime = null,
IsDiscarded = false
}));
}).ToList();

await dbContext.Matches.AddRangeAsync(dbMatches);

await dbContext.SaveChangesAsync();

// Add in common schedule deviations
for (var i = 0; i < dbMatches.Count; i++)
{
var currentMatch = dbMatches[i];
var nextMatch = dbMatches.ElementAtOrDefault(i + 1);

if (nextMatch is null) continue;

var startDifference = nextMatch.ScheduledStartTime - currentMatch.ScheduledStartTime;
if (startDifference.TotalHours > 8)
{
dbContext.ScheduleDeviations.Add(new ScheduleDeviation
{
EventId = evt.Id,
Description = "End of Day",
AfterMatchId = currentMatch.Id,
AssociatedMatchId = null
});
} else if (startDifference.TotalHours > 0.7)
{
dbContext.ScheduleDeviations.Add(new ScheduleDeviation
{
EventId = evt.Id,
Description = "Break",
AfterMatchId = currentMatch.Id,
AssociatedMatchId = null
});
}
}

evt.Status = EventStatus.QualsInProgress;

Expand Down
29 changes: 25 additions & 4 deletions FiMAdminApi/EventSync/Steps/UpdateQualRankings.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,35 @@
using FiMAdminApi.Clients;
using FiMAdminApi.Data;
using FiMAdminApi.Data.Models;
using Microsoft.EntityFrameworkCore;

namespace FiMAdminApi.EventSync.Steps;

public class UpdateQualRankings() : EventSyncStep([EventStatus.QualsInProgress, EventStatus.AwaitingAlliances])
public class UpdateQualRankings(DataContext dbContext)
: EventSyncStep([EventStatus.QualsInProgress, EventStatus.AwaitingAlliances])
{
public override Task RunStep(Event evt, IDataClient eventDataClient)
public override async Task RunStep(Event evt, IDataClient eventDataClient)
{
var rankings = eventDataClient.GetQualRankingsForEvent(evt);
var rankings = await eventDataClient.GetQualRankingsForEvent(evt);

return Task.CompletedTask;
if (rankings.Count == 0) return;

await dbContext.EventRankings.Where(r => r.EventId == evt.Id).ExecuteDeleteAsync();

dbContext.EventRankings.AddRange(rankings.Select(r => new EventRanking
{
EventId = evt.Id,
Rank = r.Rank,
TeamNumber = r.TeamNumber,
SortOrders = [r.SortOrder1, r.SortOrder2, r.SortOrder3, r.SortOrder4, r.SortOrder5, r.SortOrder6],
Wins = r.Wins,
Ties = r.Ties,
Losses = r.Losses,
QualAverage = r.QualAverage,
Disqualifications = r.Disqualifications,
MatchesPlayed = r.MatchesPlayed
}));

await dbContext.SaveChangesAsync();
}
}
8 changes: 3 additions & 5 deletions FiMAdminApi/FiMAdminApi.http
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
@FiMAdminApi_HostAddress = http://localhost:5291

GET {{FiMAdminApi_HostAddress}}/api/v1.0/users
Accept: application/json
Authorization: Bearer {{$auth.token("supabase")}}
Authorization: Bearer {{ Token }}

###

POST {{FiMAdminApi_HostAddress}}/api/v1/users/sync-source
POST {{FiMAdminApi_HostAddress}}/api/v1/events-create/sync-source
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsImtpZCI6Iit3K0Fsa1dmOFViM0J4bXUiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzE4OTMzNTcyLCJpYXQiOjE3MTg5Mjk5NzIsImlzcyI6Imh0dHBzOi8vdnlwdmN2aWd3bXJtenR5ZGl2eGwuc3VwYWJhc2UuY28vYXV0aC92MSIsInN1YiI6ImIyNDYwNmNjLWFjMDEtNDgyZi1hZDUzLTU1ZWQxNTZkOGQ4YiIsImVtYWlsIjoiZXZhbkBldmFuZG9lcy5kZXYiLCJwaG9uZSI6IiIsImFwcF9tZXRhZGF0YSI6eyJnbG9iYWxSb2xlcyI6WyJTdXBlcnVzZXIiLCJFcXVpcG1lbnRfTWFuYWdlIiwiRXZlbnRzX0NyZWF0ZSIsIkV2ZW50c19NYW5hZ2UiLCJFdmVudHNfTm90ZSIsIkV2ZW50c19WaWV3IiwiRXF1aXBtZW50X05vdGUiXSwicHJvdmlkZXIiOiJlbWFpbCIsInByb3ZpZGVycyI6WyJlbWFpbCJdfSwidXNlcl9tZXRhZGF0YSI6eyJhbm90aGVyS2V5IjoxLCJnbG9iYWxSb2xlcyI6WyJTdXBlcnVzZXIiLCJFdmVudHNfQ3JlYXRlIl0sIm5hbWUiOiJFdmFuIExpaG91In0sInJvbGUiOiJzZXJ2aWNlX3JvbGUiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJwYXNzd29yZCIsInRpbWVzdGFtcCI6MTcxODU0NjUxNX1dLCJzZXNzaW9uX2lkIjoiZWY4OWE3OGItZmJiMS00YWY1LThhZjItZjlhOTZiMzY3ZjFlIiwiaXNfYW5vbnltb3VzIjpmYWxzZX0.7FJS5eTZxR6aUpxKRd2zRXastyozLmGPbzlSKSW8alM
Authorization: Bearer {{ Token }}
Content-Type: application/json

{
Expand Down
2 changes: 1 addition & 1 deletion FiMAdminApi/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
using Npgsql.NameTranslation;

var builder = WebApplication.CreateSlimBuilder(args);

// builder.Logging.ClearProviders();
builder.Logging.AddConsole(opt =>
{
builder.Configuration.GetSection("Logging:Console").Bind(opt);
Expand Down
3 changes: 2 additions & 1 deletion FiMAdminApi/Properties/launchSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5291",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_RUNNING_IN_CONTAINER": "true"
}
},
"https": {
Expand Down
6 changes: 4 additions & 2 deletions FiMAdminApi/Services/UpsertEventsService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public async Task<UpsertEventsResponse> UpsertFromDataSource(UpsertFromDataSourc
var season = await GetAndValidateSeason(request.SeasonId, response);
if (season is null)
{
response.Errors.Add("Season not found");
return response;
}

Expand All @@ -32,7 +33,8 @@ public async Task<UpsertEventsResponse> UpsertFromDataSource(UpsertFromDataSourc
var dataClient = services.GetKeyedService<IDataClient>(request.DataSource);
if (dataClient is null)
{
throw new ArgumentOutOfRangeException();
response.Errors.Add($"Unable to initialize data client {request.DataSource}");
return response;
}

List<Clients.Models.Event> apiEvents;
Expand Down Expand Up @@ -86,7 +88,7 @@ public async Task<UpsertEventsResponse> UpsertFromDataSource(UpsertFromDataSourc
Key = GenerateEventKey(),
Code = apiEvent.EventCode,
Name = apiEvent.Name,
IsOfficial = false,
IsOfficial = request.DataSource is DataSources.FrcEvents or DataSources.FtcEvents,
StartTime = apiEvent.StartTime.UtcDateTime.AddDays(-1),
EndTime = apiEvent.EndTime.UtcDateTime,
TimeZone = apiEvent.TimeZone.Id,
Expand Down
2 changes: 1 addition & 1 deletion FiMAdminApi/appsettings.Development.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Information"
"Microsoft.AspNetCore": "Warning"
},
"Console": {
"FormatterName": "simple"
Expand Down
5 changes: 5 additions & 0 deletions FiMAdminApi/http-client.env.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"dev": {
"FiMAdminApi_HostAddress": "http://localhost:5291"
}
}

0 comments on commit 0b7bb14

Please sign in to comment.