diff --git a/TOOHUCardAPI/Controllers/RankDataController.cs b/TOOHUCardAPI/Controllers/RankDataController.cs index 86ca879..9e51482 100644 --- a/TOOHUCardAPI/Controllers/RankDataController.cs +++ b/TOOHUCardAPI/Controllers/RankDataController.cs @@ -40,6 +40,14 @@ namespace TOOHUCardAPI.Controllers return Ok(new OkResponse()); } + [EndpointHandler("reset")] + private async Task ResetRank(string body) + { + RankDataResetRequest request = JsonConvert.DeserializeObject(body); + await _rankService.ResetRank(request.SteamId, RankTypeExtensions.ParseRankType(request.RankType)); + return Ok(new OkResponse()); + } + [HttpGet] public async Task GetRankData(string rank_type) { diff --git a/TOOHUCardAPI/DTO/RankData/RankDataResetRequest.cs b/TOOHUCardAPI/DTO/RankData/RankDataResetRequest.cs index 195b3f4..eb89784 100644 --- a/TOOHUCardAPI/DTO/RankData/RankDataResetRequest.cs +++ b/TOOHUCardAPI/DTO/RankData/RankDataResetRequest.cs @@ -1,7 +1,10 @@ +using Newtonsoft.Json; + namespace TOOHUCardAPI.DTO.RankData { public class RankDataResetRequest: AbstractPlayerTargetedRequest { - + [JsonProperty("rank_type")] + public string RankType { get; set; } } } \ No newline at end of file diff --git a/TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs b/TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs index 9257fc7..d43ec79 100644 --- a/TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs +++ b/TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs @@ -36,8 +36,8 @@ namespace TOOHUCardAPI.DTO.RankData { RankType = ((char) rankEntry.RankType).ToString(), SteamId = rankEntry.User.SteamId, - UserId = rankEntry.AccountId, - Username = rankEntry.Username, + UserId = rankEntry.User.AccountId, + Username = rankEntry.User.Username, Version = rankEntry.Version, Wave = rankEntry.Wave, Damage = rankEntry.Damage, diff --git a/TOOHUCardAPI/Data/AppSettings.cs b/TOOHUCardAPI/Data/AppSettings.cs index 249f8f0..a48511d 100644 --- a/TOOHUCardAPI/Data/AppSettings.cs +++ b/TOOHUCardAPI/Data/AppSettings.cs @@ -14,6 +14,7 @@ namespace TOOHUCardAPI.Data public static int MaxKeyPurchaseAmount { get; set; } public static string StarterDeckGroupKey { get; set; } public static string StarterDeckGroupData { get; set; } + public static int DefaultRankBonus { get; set; } public static void Init(IConfiguration configuration) { var fields = typeof(AppSettings).GetProperties(); diff --git a/TOOHUCardAPI/Data/Models/EncodedCardGroup.cs b/TOOHUCardAPI/Data/Models/EncodedCardGroup.cs index 125a21b..dc5053c 100644 --- a/TOOHUCardAPI/Data/Models/EncodedCardGroup.cs +++ b/TOOHUCardAPI/Data/Models/EncodedCardGroup.cs @@ -10,5 +10,6 @@ namespace TOOHUCardAPI.Data.Models public int Id { get; set; } public string GroupKey { get; set; } public string EncodedString { get; set; } + public long UserSteamId { get; set; } } } \ No newline at end of file diff --git a/TOOHUCardAPI/Data/Models/RankEntry.cs b/TOOHUCardAPI/Data/Models/RankEntry.cs index d6dc525..616a17a 100644 --- a/TOOHUCardAPI/Data/Models/RankEntry.cs +++ b/TOOHUCardAPI/Data/Models/RankEntry.cs @@ -12,9 +12,7 @@ namespace TOOHUCardAPI.Data.Models [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public RankType RankType { get; set; } - public string Username { get; set; } public User User { get; set; } - public long AccountId { get; set; } public string Version { get; set; } public int Wave { get; set; } public float Damage { get; set; } diff --git a/TOOHUCardAPI/Data/Models/RankTowerEntry.cs b/TOOHUCardAPI/Data/Models/RankTowerEntry.cs index 4bb4ac0..e64868a 100644 --- a/TOOHUCardAPI/Data/Models/RankTowerEntry.cs +++ b/TOOHUCardAPI/Data/Models/RankTowerEntry.cs @@ -11,5 +11,6 @@ namespace TOOHUCardAPI.Data.Models public int Id { get; set; } public string TowerKey { get; set; } public string EncodedData { get; set; } + public int RankEntryId { get; set; } } } \ No newline at end of file diff --git a/TOOHUCardAPI/Data/Models/User.cs b/TOOHUCardAPI/Data/Models/User.cs index 8ba0a31..83ebe9d 100644 --- a/TOOHUCardAPI/Data/Models/User.cs +++ b/TOOHUCardAPI/Data/Models/User.cs @@ -23,6 +23,8 @@ namespace TOOHUCardAPI.Data.Models public int PowerMaxTotal { get; set; } public string PetModel { get; set; } public string PetEffect { get; set; } + public string Username { get; set; } + public long AccountId { get; set; } public List EncodedCardGroups { get; set; } public List CardLevels { get; set; } } diff --git a/TOOHUCardAPI/Data/Repositories/RankRepository.cs b/TOOHUCardAPI/Data/Repositories/RankRepository.cs index 2c1a547..c883347 100644 --- a/TOOHUCardAPI/Data/Repositories/RankRepository.cs +++ b/TOOHUCardAPI/Data/Repositories/RankRepository.cs @@ -27,12 +27,25 @@ namespace TOOHUCardAPI.Data.Repositories public async Task> GetRankEntries(RankType rankType) { - return await AllIncluded().Where(i => i.RankType == rankType).ToListAsync(); + return await AllIncluded().Where(i => i.RankType == rankType).OrderByDescending(i => i.Wave).ThenByDescending(i => i.Damage).ToListAsync(); } - public async Task InsertRankEntry(RankEntry entry) + public async Task GetRankEntry(long steamid, RankType rankType) { - await _appDbContext.RankEntries.AddAsync(entry); + return await AllIncluded().Where(i => i.User.SteamId == steamid && i.RankType == rankType).FirstOrDefaultAsync(); + } + + public async Task InsertRankEntry(RankEntry entry) + { + var newEntry = await _appDbContext.RankEntries.AddAsync(entry); + await _appDbContext.SaveChangesAsync(); + return newEntry.Entity; + } + + public async Task DeleteRankEntry(RankEntry entry) + { + entry.TowersUsed.Clear(); + _appDbContext.RankEntries.Remove(entry); await _appDbContext.SaveChangesAsync(); } } diff --git a/TOOHUCardAPI/Data/Services/RankService.cs b/TOOHUCardAPI/Data/Services/RankService.cs index e3cec27..ae83ac8 100644 --- a/TOOHUCardAPI/Data/Services/RankService.cs +++ b/TOOHUCardAPI/Data/Services/RankService.cs @@ -15,12 +15,42 @@ namespace TOOHUCardAPI.Data.Services private readonly ILogger _logger; private readonly RankRepository _rankRepository; private readonly UserRepository _userRepository; + private readonly UserService _userService; + private readonly StoreService _storeService; - public RankService(ILogger logger, RankRepository rankRepository, UserRepository userRepository) + public RankService(ILogger logger, RankRepository rankRepository, UserRepository userRepository, UserService userService, StoreService storeService) { _logger = logger; _rankRepository = rankRepository; _userRepository = userRepository; + _userService = userService; + _storeService = storeService; + } + + private async Task AwardPointsForEntry(long steamid, RankEntry entry, List allEntries) + { + int bonus = AppSettings.DefaultRankBonus; + int index = allEntries.FindIndex(i => i.Id == entry.Id)+1; + switch (index) + { + case <= 4: + bonus = 500 - (index - 1) * 100; + break; + case <= 9: + bonus = 170 - (index - 5) * 10; + break; + case <=15: + bonus = 125 - (index - 10) * 5; + break; + case <= 25: + bonus = 96 - (index - 16) * 4; + break; + case <= 50: + bonus = 58 - (index - 26) * 2; + break; + } + + await _storeService.AwardPoints(steamid, bonus, $"reached rank index {index}"); } public async Task> GetRankEntries(RankType rankType) @@ -40,17 +70,26 @@ namespace TOOHUCardAPI.Data.Services RankEntry toUpload = new RankEntry { RankType = RankTypeExtensions.ParseRankType(entry.RankType), - Username = entry.Username, User = await _userRepository.GetUser(entry.SteamId), - AccountId = entry.UserId, Version = entry.Version, Wave = entry.Wave, Damage = entry.Damage, TowersUsed = towersUsed, UpdateTime = DateTime.Now }; - await _rankRepository.InsertRankEntry(toUpload); - _logger.LogInformation("Uploaded a rank entry for {SteamId}", entry.SteamId); + toUpload = await _rankRepository.InsertRankEntry(toUpload); + List allEntries = (await _rankRepository.GetRankEntries(toUpload.RankType)).ToList(); + await _userService.UpdateUserAccountDetails(entry.SteamId, entry.UserId, entry.Username); + await _userService.UpdateUserMaxWave(entry.SteamId, entry.Wave, toUpload.RankType); + await AwardPointsForEntry(entry.SteamId, toUpload, allEntries); + _logger.LogInformation("Uploaded a rank entry for {SteamId} on ranking type {RankType}", entry.SteamId, toUpload.RankType.ToString()); + } + + public async Task ResetRank(long steamid, RankType rankType) + { + RankEntry entry = await _rankRepository.GetRankEntry(steamid, rankType); + await _rankRepository.DeleteRankEntry(entry); + _logger.LogInformation("Reset rank entry for {SteamId} on ranking type {RankType}", steamid, rankType.ToString()); } } } \ No newline at end of file diff --git a/TOOHUCardAPI/Data/Services/StoreService.cs b/TOOHUCardAPI/Data/Services/StoreService.cs index 8a92b02..8187a4c 100644 --- a/TOOHUCardAPI/Data/Services/StoreService.cs +++ b/TOOHUCardAPI/Data/Services/StoreService.cs @@ -29,6 +29,13 @@ namespace TOOHUCardAPI.Data.Services _logger.LogInformation("User with steamid {SteamId} was given {PointsGiven} points. New total: {PointsTotal}", user.SteamId, points, user.Point); } + public async Task AwardPoints(long steamid, int points, string reason) + { + User user = await _userRepository.GetUser(steamid); + await AddPoints(points, user); + _logger.LogInformation("awarded {Points} points to {SteamId} for reason [\"{reason}\"]", points, steamid, reason); + } + public async Task SaveKeyTotal(long steamId, int keyTotal, int keyUseCount) { User user = await _userRepository.GetUser(steamId); diff --git a/TOOHUCardAPI/Data/Services/UserService.cs b/TOOHUCardAPI/Data/Services/UserService.cs index 17f2f56..f6a2f12 100644 --- a/TOOHUCardAPI/Data/Services/UserService.cs +++ b/TOOHUCardAPI/Data/Services/UserService.cs @@ -2,6 +2,7 @@ using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Logging; +using TOOHUCardAPI.Data.Enums; using TOOHUCardAPI.Data.Models; using TOOHUCardAPI.Data.Repositories; @@ -61,5 +62,31 @@ namespace TOOHUCardAPI.Data.Services await _userRepository.UpdateUser(user); _logger.LogInformation("User {SteamId} saved new pet data with model: {PetModel} and effect {PetEffect}", user.SteamId, petModel, petEffect); } + + public async Task UpdateUserAccountDetails(long steamid, long newAccountId, string newUsername) + { + User user = await _userRepository.GetUser(steamid); + user.AccountId = newAccountId; + user.Username = newUsername; + await _userRepository.UpdateUser(user); + } + + public async Task UpdateUserMaxWave(long steamid, int wave, RankType rankType) + { + User user = await _userRepository.GetUser(steamid); + switch (rankType) + { + case RankType.Single: + user.MaxWave = Math.Max(wave, user.MaxWave); + break; + case RankType.Team: + user.MaxTeamWave = Math.Max(wave, user.MaxTeamWave); + break; + default: + throw new ArgumentOutOfRangeException(nameof(rankType), rankType, null); + } + + await _userRepository.UpdateUser(user); + } } } \ No newline at end of file diff --git a/TOOHUCardAPI/Migrations/20211107145740_new fields.Designer.cs b/TOOHUCardAPI/Migrations/20211107145740_new fields.Designer.cs new file mode 100644 index 0000000..0daa5bd --- /dev/null +++ b/TOOHUCardAPI/Migrations/20211107145740_new fields.Designer.cs @@ -0,0 +1,1117 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using TOOHUCardAPI.Data; + +namespace TOOHUCardAPI.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20211107145740_new fields")] + partial class newfields + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 63) + .HasAnnotation("ProductVersion", "5.0.11") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.Card", b => + { + b.Property("ItemCode") + .HasColumnType("text"); + + b.Property("CardName") + .HasColumnType("text"); + + b.Property("HasPortrait") + .HasColumnType("boolean"); + + b.Property("HasVoice") + .HasColumnType("boolean"); + + b.Property("Quality") + .HasColumnType("integer"); + + b.HasKey("ItemCode"); + + b.ToTable("Cards"); + + b.HasData( + new + { + ItemCode = "item_0026", + CardName = "rin", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0043", + CardName = "hatate", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0014", + CardName = "merlin", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0007", + CardName = "hanadayousei", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_2002", + CardName = "item_2002", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0055", + CardName = "suika", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0002", + CardName = "nazrin", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0061", + CardName = "keine", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0069", + CardName = "toramaru", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0042", + CardName = "aya", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_1011", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_0015", + CardName = "rumia", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0030", + CardName = "remilia", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0028", + CardName = "reimu", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0045", + CardName = "kagerou", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0019", + CardName = "marisa", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0075", + CardName = "clownpiece", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0050", + CardName = "nue", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0044", + CardName = "momiji", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0011", + CardName = "letty", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_1003", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_0022", + CardName = "sakuya", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0003", + CardName = "minoriko", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_2022", + CardName = "item_2022", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2020", + CardName = "item_2020", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_2016", + CardName = "item_2016", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2018", + CardName = "item_2018", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2006", + CardName = "item_2006", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2019", + CardName = "item_2019", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2015", + CardName = "item_2015", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2014", + CardName = "item_2014", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0009", + CardName = "cirno", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0038", + CardName = "chen", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0074", + CardName = "hecatia", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0080", + CardName = "shinki", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0051", + CardName = "byakuren", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_1012", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0029", + CardName = "daiyousei", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0073", + CardName = "junko", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0063", + CardName = "kisume", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2007", + CardName = "item_2007", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0025", + CardName = "youmu", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0004", + CardName = "mugiyousei", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_0096", + CardName = "seiga", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0034", + CardName = "meirin", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2011", + CardName = "item_2011", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2010", + CardName = "item_2010", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2008", + CardName = "item_2008", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0036", + CardName = "yukari", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0018", + CardName = "mystia", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_2009", + CardName = "item_2009", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0046", + CardName = "sanae", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2017", + CardName = "item_2017", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2005", + CardName = "item_2005", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0052", + CardName = "miko", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0023", + CardName = "reisen", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0049", + CardName = "minamitsu", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_2004", + CardName = "item_2004", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2003", + CardName = "item_2003", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0056", + CardName = "star", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0006", + CardName = "hourainingyou", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_0057", + CardName = "sunny", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0095", + CardName = "futo", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2001", + CardName = "item_2001", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_1013", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0097", + CardName = "yoshika", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0027", + CardName = "utsuho", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0068", + CardName = "komachi", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0047", + CardName = "kanako", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0058", + CardName = "luna", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_2013", + CardName = "item_2013", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0024", + CardName = "yuyuko", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0093", + CardName = "kyouko", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0005", + CardName = "shanghainingyou", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_1006", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0064", + CardName = "shikieiki", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0092", + CardName = "medicine", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0017", + CardName = "iku", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0013", + CardName = "lunasa", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0091", + CardName = "hina", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_1004", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0040", + CardName = "mokou", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0088", + CardName = "sizuha", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_2012", + CardName = "item_2012", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0010", + CardName = "kogasa", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0062", + CardName = "inaba", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0001", + CardName = "lily", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_1005", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0060", + CardName = "wriggle", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0059", + CardName = "alice", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0054", + CardName = "yuugi", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0032", + CardName = "flandre", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0033", + CardName = "koakuma", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0041", + CardName = "kaguya", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0039", + CardName = "eirin", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0037", + CardName = "ran", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0035", + CardName = "yuuka", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0048", + CardName = "suwako", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0016", + CardName = "satori", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0053", + CardName = "kokoro", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0008", + CardName = "maidyousei", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_0012", + CardName = "lyrica", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0031", + CardName = "koishi", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0094", + CardName = "soga", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0021", + CardName = "patchouli", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0020", + CardName = "tenshi", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_1014", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.CardLevel", b => + { + b.Property("UserSteamId") + .HasColumnType("bigint"); + + b.Property("CardItemCode") + .HasColumnType("text"); + + b.Property("Level") + .HasColumnType("integer"); + + b.HasKey("UserSteamId", "CardItemCode"); + + b.HasIndex("CardItemCode"); + + b.ToTable("CardLevel"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.EncodedCardGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("EncodedString") + .HasColumnType("text"); + + b.Property("GroupKey") + .HasColumnType("text"); + + b.Property("UserSteamId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("UserSteamId"); + + b.ToTable("EncodedCardGroup"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Damage") + .HasColumnType("real"); + + b.Property("RankType") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamp without time zone"); + + b.Property("UserSteamId") + .HasColumnType("bigint"); + + b.Property("Version") + .HasColumnType("text"); + + b.Property("Wave") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserSteamId"); + + b.ToTable("RankEntries"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankTowerEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("EncodedData") + .HasColumnType("text"); + + b.Property("RankEntryId") + .HasColumnType("integer"); + + b.Property("TowerKey") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("RankEntryId"); + + b.ToTable("RankTowerEntry"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.User", b => + { + b.Property("SteamId") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("Ban") + .HasColumnType("boolean"); + + b.Property("EndTime") + .HasColumnType("timestamp without time zone"); + + b.Property("KeySaveDate") + .HasColumnType("timestamp without time zone"); + + b.Property("KeyTotal") + .HasColumnType("integer"); + + b.Property("KeyUseCount") + .HasColumnType("integer"); + + b.Property("LastDailyLoginBonus") + .HasColumnType("timestamp without time zone"); + + b.Property("LastFirstWin") + .HasColumnType("timestamp without time zone"); + + b.Property("MaxTeamWave") + .HasColumnType("integer"); + + b.Property("MaxWave") + .HasColumnType("integer"); + + b.Property("PetEffect") + .HasColumnType("text"); + + b.Property("PetLevel") + .HasColumnType("integer"); + + b.Property("PetModel") + .HasColumnType("text"); + + b.Property("Point") + .HasColumnType("integer"); + + b.Property("PowerMaxTotal") + .HasColumnType("integer"); + + b.Property("Username") + .HasColumnType("text"); + + b.Property("Vip") + .HasColumnType("boolean"); + + b.HasKey("SteamId"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.CardLevel", b => + { + b.HasOne("TOOHUCardAPI.Data.Models.Card", "Card") + .WithMany() + .HasForeignKey("CardItemCode") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("TOOHUCardAPI.Data.Models.User", null) + .WithMany("CardLevels") + .HasForeignKey("UserSteamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Card"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.EncodedCardGroup", b => + { + b.HasOne("TOOHUCardAPI.Data.Models.User", null) + .WithMany("EncodedCardGroups") + .HasForeignKey("UserSteamId"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankEntry", b => + { + b.HasOne("TOOHUCardAPI.Data.Models.User", "User") + .WithMany() + .HasForeignKey("UserSteamId"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankTowerEntry", b => + { + b.HasOne("TOOHUCardAPI.Data.Models.RankEntry", null) + .WithMany("TowersUsed") + .HasForeignKey("RankEntryId"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankEntry", b => + { + b.Navigation("TowersUsed"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.User", b => + { + b.Navigation("CardLevels"); + + b.Navigation("EncodedCardGroups"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/TOOHUCardAPI/Migrations/20211107145740_new fields.cs b/TOOHUCardAPI/Migrations/20211107145740_new fields.cs new file mode 100644 index 0000000..7a516c0 --- /dev/null +++ b/TOOHUCardAPI/Migrations/20211107145740_new fields.cs @@ -0,0 +1,71 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace TOOHUCardAPI.Migrations +{ + public partial class newfields : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "AccountId", + table: "RankEntries"); + + migrationBuilder.DropColumn( + name: "Username", + table: "RankEntries"); + + migrationBuilder.AddColumn( + name: "AccountId", + table: "Users", + type: "bigint", + nullable: false, + defaultValue: 0L); + + migrationBuilder.AddColumn( + name: "Username", + table: "Users", + type: "text", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Damage", + table: "RankEntries", + type: "real", + nullable: false, + oldClrType: typeof(long), + oldType: "bigint"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "AccountId", + table: "Users"); + + migrationBuilder.DropColumn( + name: "Username", + table: "Users"); + + migrationBuilder.AlterColumn( + name: "Damage", + table: "RankEntries", + type: "bigint", + nullable: false, + oldClrType: typeof(float), + oldType: "real"); + + migrationBuilder.AddColumn( + name: "AccountId", + table: "RankEntries", + type: "bigint", + nullable: false, + defaultValue: 0L); + + migrationBuilder.AddColumn( + name: "Username", + table: "RankEntries", + type: "text", + nullable: true); + } + } +} diff --git a/TOOHUCardAPI/Migrations/20211107185734_cascade delete children.Designer.cs b/TOOHUCardAPI/Migrations/20211107185734_cascade delete children.Designer.cs new file mode 100644 index 0000000..b40be7b --- /dev/null +++ b/TOOHUCardAPI/Migrations/20211107185734_cascade delete children.Designer.cs @@ -0,0 +1,1121 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using TOOHUCardAPI.Data; + +namespace TOOHUCardAPI.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20211107185734_cascade delete children")] + partial class cascadedeletechildren + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 63) + .HasAnnotation("ProductVersion", "5.0.11") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.Card", b => + { + b.Property("ItemCode") + .HasColumnType("text"); + + b.Property("CardName") + .HasColumnType("text"); + + b.Property("HasPortrait") + .HasColumnType("boolean"); + + b.Property("HasVoice") + .HasColumnType("boolean"); + + b.Property("Quality") + .HasColumnType("integer"); + + b.HasKey("ItemCode"); + + b.ToTable("Cards"); + + b.HasData( + new + { + ItemCode = "item_0026", + CardName = "rin", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0043", + CardName = "hatate", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0014", + CardName = "merlin", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0007", + CardName = "hanadayousei", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_2002", + CardName = "item_2002", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0055", + CardName = "suika", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0002", + CardName = "nazrin", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0061", + CardName = "keine", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0069", + CardName = "toramaru", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0042", + CardName = "aya", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_1011", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_0015", + CardName = "rumia", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0030", + CardName = "remilia", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0028", + CardName = "reimu", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0045", + CardName = "kagerou", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0019", + CardName = "marisa", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0075", + CardName = "clownpiece", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0050", + CardName = "nue", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0044", + CardName = "momiji", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0011", + CardName = "letty", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_1003", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_0022", + CardName = "sakuya", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0003", + CardName = "minoriko", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_2022", + CardName = "item_2022", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2020", + CardName = "item_2020", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_2016", + CardName = "item_2016", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2018", + CardName = "item_2018", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2006", + CardName = "item_2006", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2019", + CardName = "item_2019", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2015", + CardName = "item_2015", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2014", + CardName = "item_2014", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0009", + CardName = "cirno", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0038", + CardName = "chen", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0074", + CardName = "hecatia", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0080", + CardName = "shinki", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0051", + CardName = "byakuren", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_1012", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0029", + CardName = "daiyousei", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0073", + CardName = "junko", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0063", + CardName = "kisume", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2007", + CardName = "item_2007", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0025", + CardName = "youmu", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0004", + CardName = "mugiyousei", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_0096", + CardName = "seiga", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0034", + CardName = "meirin", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2011", + CardName = "item_2011", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2010", + CardName = "item_2010", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2008", + CardName = "item_2008", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0036", + CardName = "yukari", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0018", + CardName = "mystia", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_2009", + CardName = "item_2009", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0046", + CardName = "sanae", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2017", + CardName = "item_2017", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2005", + CardName = "item_2005", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0052", + CardName = "miko", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0023", + CardName = "reisen", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0049", + CardName = "minamitsu", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_2004", + CardName = "item_2004", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_2003", + CardName = "item_2003", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0056", + CardName = "star", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0006", + CardName = "hourainingyou", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_0057", + CardName = "sunny", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0095", + CardName = "futo", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_2001", + CardName = "item_2001", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_1013", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0097", + CardName = "yoshika", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0027", + CardName = "utsuho", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0068", + CardName = "komachi", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0047", + CardName = "kanako", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0058", + CardName = "luna", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_2013", + CardName = "item_2013", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0024", + CardName = "yuyuko", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0093", + CardName = "kyouko", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0005", + CardName = "shanghainingyou", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_1006", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0064", + CardName = "shikieiki", + HasPortrait = true, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0092", + CardName = "medicine", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0017", + CardName = "iku", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0013", + CardName = "lunasa", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0091", + CardName = "hina", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_1004", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0040", + CardName = "mokou", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0088", + CardName = "sizuha", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_2012", + CardName = "item_2012", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }, + new + { + ItemCode = "item_0010", + CardName = "kogasa", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0062", + CardName = "inaba", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0001", + CardName = "lily", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_1005", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0060", + CardName = "wriggle", + HasPortrait = true, + HasVoice = false, + Quality = 2 + }, + new + { + ItemCode = "item_0059", + CardName = "alice", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0054", + CardName = "yuugi", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0032", + CardName = "flandre", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0033", + CardName = "koakuma", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0041", + CardName = "kaguya", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0039", + CardName = "eirin", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0037", + CardName = "ran", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0035", + CardName = "yuuka", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0048", + CardName = "suwako", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_0016", + CardName = "satori", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0053", + CardName = "kokoro", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0008", + CardName = "maidyousei", + HasPortrait = false, + HasVoice = false, + Quality = 1 + }, + new + { + ItemCode = "item_0012", + CardName = "lyrica", + HasPortrait = true, + HasVoice = true, + Quality = 2 + }, + new + { + ItemCode = "item_0031", + CardName = "koishi", + HasPortrait = true, + HasVoice = true, + Quality = 4 + }, + new + { + ItemCode = "item_0094", + CardName = "soga", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0021", + CardName = "patchouli", + HasPortrait = true, + HasVoice = true, + Quality = 3 + }, + new + { + ItemCode = "item_0020", + CardName = "tenshi", + HasPortrait = true, + HasVoice = false, + Quality = 3 + }, + new + { + ItemCode = "item_1014", + CardName = "BonusEgg", + HasPortrait = false, + HasVoice = false, + Quality = 4 + }); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.CardLevel", b => + { + b.Property("UserSteamId") + .HasColumnType("bigint"); + + b.Property("CardItemCode") + .HasColumnType("text"); + + b.Property("Level") + .HasColumnType("integer"); + + b.HasKey("UserSteamId", "CardItemCode"); + + b.HasIndex("CardItemCode"); + + b.ToTable("CardLevel"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.EncodedCardGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("EncodedString") + .HasColumnType("text"); + + b.Property("GroupKey") + .HasColumnType("text"); + + b.Property("UserSteamId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("UserSteamId"); + + b.ToTable("EncodedCardGroup"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Damage") + .HasColumnType("real"); + + b.Property("RankType") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamp without time zone"); + + b.Property("UserSteamId") + .HasColumnType("bigint"); + + b.Property("Version") + .HasColumnType("text"); + + b.Property("Wave") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserSteamId"); + + b.ToTable("RankEntries"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankTowerEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("EncodedData") + .HasColumnType("text"); + + b.Property("RankEntryId") + .HasColumnType("integer"); + + b.Property("TowerKey") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("RankEntryId"); + + b.ToTable("RankTowerEntry"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.User", b => + { + b.Property("SteamId") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("Ban") + .HasColumnType("boolean"); + + b.Property("EndTime") + .HasColumnType("timestamp without time zone"); + + b.Property("KeySaveDate") + .HasColumnType("timestamp without time zone"); + + b.Property("KeyTotal") + .HasColumnType("integer"); + + b.Property("KeyUseCount") + .HasColumnType("integer"); + + b.Property("LastDailyLoginBonus") + .HasColumnType("timestamp without time zone"); + + b.Property("LastFirstWin") + .HasColumnType("timestamp without time zone"); + + b.Property("MaxTeamWave") + .HasColumnType("integer"); + + b.Property("MaxWave") + .HasColumnType("integer"); + + b.Property("PetEffect") + .HasColumnType("text"); + + b.Property("PetLevel") + .HasColumnType("integer"); + + b.Property("PetModel") + .HasColumnType("text"); + + b.Property("Point") + .HasColumnType("integer"); + + b.Property("PowerMaxTotal") + .HasColumnType("integer"); + + b.Property("Username") + .HasColumnType("text"); + + b.Property("Vip") + .HasColumnType("boolean"); + + b.HasKey("SteamId"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.CardLevel", b => + { + b.HasOne("TOOHUCardAPI.Data.Models.Card", "Card") + .WithMany() + .HasForeignKey("CardItemCode") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("TOOHUCardAPI.Data.Models.User", null) + .WithMany("CardLevels") + .HasForeignKey("UserSteamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Card"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.EncodedCardGroup", b => + { + b.HasOne("TOOHUCardAPI.Data.Models.User", null) + .WithMany("EncodedCardGroups") + .HasForeignKey("UserSteamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankEntry", b => + { + b.HasOne("TOOHUCardAPI.Data.Models.User", "User") + .WithMany() + .HasForeignKey("UserSteamId"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankTowerEntry", b => + { + b.HasOne("TOOHUCardAPI.Data.Models.RankEntry", null) + .WithMany("TowersUsed") + .HasForeignKey("RankEntryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankEntry", b => + { + b.Navigation("TowersUsed"); + }); + + modelBuilder.Entity("TOOHUCardAPI.Data.Models.User", b => + { + b.Navigation("CardLevels"); + + b.Navigation("EncodedCardGroups"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/TOOHUCardAPI/Migrations/20211107185734_cascade delete children.cs b/TOOHUCardAPI/Migrations/20211107185734_cascade delete children.cs new file mode 100644 index 0000000..092a958 --- /dev/null +++ b/TOOHUCardAPI/Migrations/20211107185734_cascade delete children.cs @@ -0,0 +1,97 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace TOOHUCardAPI.Migrations +{ + public partial class cascadedeletechildren : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_EncodedCardGroup_Users_UserSteamId", + table: "EncodedCardGroup"); + + migrationBuilder.DropForeignKey( + name: "FK_RankTowerEntry_RankEntries_RankEntryId", + table: "RankTowerEntry"); + + migrationBuilder.AlterColumn( + name: "RankEntryId", + table: "RankTowerEntry", + type: "integer", + nullable: false, + defaultValue: 0, + oldClrType: typeof(int), + oldType: "integer", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "UserSteamId", + table: "EncodedCardGroup", + type: "bigint", + nullable: false, + defaultValue: 0L, + oldClrType: typeof(long), + oldType: "bigint", + oldNullable: true); + + migrationBuilder.AddForeignKey( + name: "FK_EncodedCardGroup_Users_UserSteamId", + table: "EncodedCardGroup", + column: "UserSteamId", + principalTable: "Users", + principalColumn: "SteamId", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_RankTowerEntry_RankEntries_RankEntryId", + table: "RankTowerEntry", + column: "RankEntryId", + principalTable: "RankEntries", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_EncodedCardGroup_Users_UserSteamId", + table: "EncodedCardGroup"); + + migrationBuilder.DropForeignKey( + name: "FK_RankTowerEntry_RankEntries_RankEntryId", + table: "RankTowerEntry"); + + migrationBuilder.AlterColumn( + name: "RankEntryId", + table: "RankTowerEntry", + type: "integer", + nullable: true, + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "UserSteamId", + table: "EncodedCardGroup", + type: "bigint", + nullable: true, + oldClrType: typeof(long), + oldType: "bigint"); + + migrationBuilder.AddForeignKey( + name: "FK_EncodedCardGroup_Users_UserSteamId", + table: "EncodedCardGroup", + column: "UserSteamId", + principalTable: "Users", + principalColumn: "SteamId", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_RankTowerEntry_RankEntries_RankEntryId", + table: "RankTowerEntry", + column: "RankEntryId", + principalTable: "RankEntries", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + } +} diff --git a/TOOHUCardAPI/Migrations/AppDbContextModelSnapshot.cs b/TOOHUCardAPI/Migrations/AppDbContextModelSnapshot.cs index bcf83b8..5a4efab 100644 --- a/TOOHUCardAPI/Migrations/AppDbContextModelSnapshot.cs +++ b/TOOHUCardAPI/Migrations/AppDbContextModelSnapshot.cs @@ -930,7 +930,7 @@ namespace TOOHUCardAPI.Migrations b.Property("GroupKey") .HasColumnType("text"); - b.Property("UserSteamId") + b.Property("UserSteamId") .HasColumnType("bigint"); b.HasKey("Id"); @@ -947,11 +947,8 @@ namespace TOOHUCardAPI.Migrations .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("AccountId") - .HasColumnType("bigint"); - - b.Property("Damage") - .HasColumnType("bigint"); + b.Property("Damage") + .HasColumnType("real"); b.Property("RankType") .HasColumnType("integer"); @@ -962,9 +959,6 @@ namespace TOOHUCardAPI.Migrations b.Property("UserSteamId") .HasColumnType("bigint"); - b.Property("Username") - .HasColumnType("text"); - b.Property("Version") .HasColumnType("text"); @@ -988,7 +982,7 @@ namespace TOOHUCardAPI.Migrations b.Property("EncodedData") .HasColumnType("text"); - b.Property("RankEntryId") + b.Property("RankEntryId") .HasColumnType("integer"); b.Property("TowerKey") @@ -1008,6 +1002,9 @@ namespace TOOHUCardAPI.Migrations .HasColumnType("bigint") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + b.Property("AccountId") + .HasColumnType("bigint"); + b.Property("Ban") .HasColumnType("boolean"); @@ -1050,6 +1047,9 @@ namespace TOOHUCardAPI.Migrations b.Property("PowerMaxTotal") .HasColumnType("integer"); + b.Property("Username") + .HasColumnType("text"); + b.Property("Vip") .HasColumnType("boolean"); @@ -1079,7 +1079,9 @@ namespace TOOHUCardAPI.Migrations { b.HasOne("TOOHUCardAPI.Data.Models.User", null) .WithMany("EncodedCardGroups") - .HasForeignKey("UserSteamId"); + .HasForeignKey("UserSteamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankEntry", b => @@ -1095,7 +1097,9 @@ namespace TOOHUCardAPI.Migrations { b.HasOne("TOOHUCardAPI.Data.Models.RankEntry", null) .WithMany("TowersUsed") - .HasForeignKey("RankEntryId"); + .HasForeignKey("RankEntryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); modelBuilder.Entity("TOOHUCardAPI.Data.Models.RankEntry", b => diff --git a/TOOHUCardAPI/appsettings.json b/TOOHUCardAPI/appsettings.json index 2f8e0bb..b016e9c 100644 --- a/TOOHUCardAPI/appsettings.json +++ b/TOOHUCardAPI/appsettings.json @@ -18,6 +18,7 @@ "FirstWinBonusPointsMax": "5", "DailyKeyBonus": "2", "MaxKeyPurchaseAmount": "200", + "DefaultRankBonus": "10", "StarterDeckGroupKey": "cardgroup1", "StarterDeckGroupData": "48616B7572656920536872696E65#00022#00202#00045#20054#20172#00362#00055#00212#00075#00065#00085#00154#00242#00173#00163#20122#20194#00093#00312#00272#00262#20064#20132#00192#00282#00113#00012#00032#20104#00333#00103#20164" }