Automated Task

公示队伍

Type Scheduled

Date Executed 8/31/2024, 4:00:05 PM

Created 7/18/2024, 4:35:33 AM

Updated 8/31/2024, 7:46:06 PM

Description 公示队伍并添加到排行榜。

Code
1
using Microsoft.Extensions.Logging;
2
using Microsoft.Extensions.DependencyInjection;
3
using PhiZoneApi.Models;
4
using PhiZoneApi.Interfaces;
5
using System.Collections.Generic;
6
using System.Threading.Tasks;
7
using System.Linq;
8
using System;
9
using System.Text.Json;
10
using PhiZoneApi.Enums;
11

12
var target = (EventDivision)Target;
13
await using (var scope = ServiceProvider.CreateAsyncScope())
14
{
15
    var eventTeamRepository = scope.ServiceProvider.GetRequiredService<IEventTeamRepository>();
16
    var eventResourceRepository = scope.ServiceProvider.GetRequiredService<IEventResourceRepository>();
17
    var chartRepository = scope.ServiceProvider.GetRequiredService<IChartRepository>();
18
    var leaderboardService = scope.ServiceProvider.GetRequiredService<ILeaderboardService>();
19
    var leaderboard = leaderboardService.ObtainEventDivisionLeaderboard(target.Id);
20
    var teams = await eventTeamRepository.GetEventTeamsAsync(predicate: e => e.DivisionId == target.Id);
21
    foreach (var team in teams)
22
    {
23
        var entries =
24
            await eventResourceRepository.GetEventResourcesAsync(predicate: e =>
25
                e.DivisionId == target.Id && e.TeamId == team.Id);
26
        foreach (var entry in entries)
27
        {
28
            entry.IsAnonymous = false;
29
            var chart = await chartRepository.GetChartAsync(entry.ResourceId);
30
            chart.IsHidden = false;
31
            chart.Level = entry.Reserved[5]![1..];
32
            chart.Difficulty = double.Parse(entry.Reserved[6]!);
33
            await chartRepository.UpdateChartAsync(chart);
34
            await eventResourceRepository.UpdateEventResourceAsync(entry);
35
        }
36
        team.IsUnveiled = true;
37
        team.Status = entries.Count == 0 ? ParticipationStatus.Eliminated : ParticipationStatus.Finished;
38
        team.Score = double.TryParse(team.Reserved[0], out var result) ? result : 0;
39
        await eventTeamRepository.UpdateEventTeamAsync(team);
40
        leaderboard.Add(team, false);
41
    }
42
    leaderboard.RenewImmutable();
43
}