Automated Task

创建标签

Type Scheduled

Date Executed 9/5/2024, 3:00:00 PM

Created 9/5/2024, 2:24:47 PM

Updated 9/5/2024, 2:30:55 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 PhiZoneApi.Enums;
10

11
Dictionary<string, string> tags = new()
12
{
13
    { "7PJ-4-1", "坚守自我!不选择任何第 2 或第 3 大类的挑战,并获得前 10% 的评委分。" },
14
    { "7PJ-4-2", "PecCrush!与其他投稿者使用了相同的曲目,并获得最高的评委分!" },
15
    { "7PJ-4-3", "在评委分前 30% 的投稿中,有最多的物量。" },
16
    { "7PJ-4-4", "在评委分前 30% 的投稿中,有最少的物量。" },
17
    { "7PJ-4-5", "在评委分前 30% 的投稿中,有最长的曲目时间。" },
18
    { "7PJ-4-6", "在评委分前 30% 的投稿中,自选最多的挑战分数。" },
19
    { "7PJ-4-7", "获得最高的评委分。" },
20
    { "7PJ-4-8", "有趣配置奖!由评委组评出 5-10 张。" },
21
    { "7PJ-4-9", "有趣表演奖!由评委组评出 5-10 张。" },
22
    { "7PJ-4-10", "最佳契合奖!由评委组评出 5-10 张。" }
23
};
24
var target = (EventDivision)Target;
25
await using (var scope = ServiceProvider.CreateAsyncScope())
26
{
27
    var resourceService = scope.ServiceProvider.GetRequiredService<IResourceService>();
28
    var tagRepository = scope.ServiceProvider.GetRequiredService<ITagRepository>();
29
    var eventResourceRepository = scope.ServiceProvider.GetRequiredService<IEventResourceRepository>();
30

31
    var existingTags = await tagRepository.GetTagsAsync(predicate: e =>
32
        tags.Select(tag => resourceService.Normalize(tag.Key)).Contains(e.NormalizedName));
33
    Logger.LogInformation("Existing tags:");
34
    foreach (var tag in existingTags)
35
    {
36
        Logger.LogInformation("{Name} - {Description}", tag.Name, tag.Description);
37
    }
38

39
    var newTags = tags.Where(tag => existingTags.All(e => e.NormalizedName != resourceService.Normalize(tag.Key)))
40
        .Select((tag, i) => new Tag
41
        {
42
            Name = tag.Key,
43
            NormalizedName = resourceService.Normalize(tag.Key),
44
            Description = tag.Value,
45
            DateCreated = DateTimeOffset.UtcNow.Add(TimeSpan.FromMilliseconds(i))
46
        })
47
        .ToList();
48
    Logger.LogInformation("New tags:");
49
    foreach (var tag in newTags)
50
    {
51
        Logger.LogInformation("{Name} - {Description}", tag.Name, tag.Description);
52
    }
53

54
    await tagRepository.CreateTagsAsync(newTags);
55
    var resources = newTags.Union(existingTags)
56
        .Select((tag, i) => new EventResource
57
        {
58
            DivisionId = target.Id,
59
            ResourceId = tag.Id,
60
            TagId = tag.Id,
61
            Type = EventResourceType.Tag,
62
            DateCreated = DateTimeOffset.UtcNow.Add(TimeSpan.FromMilliseconds(i))
63
        });
64
    foreach (var resource in resources)
65
    {
66
        if (await eventResourceRepository.EventResourceExistsAsync(resource.DivisionId, resource.ResourceId)) continue;
67
        await eventResourceRepository.CreateEventResourceAsync(resource);
68
    }
69
}