diff --git a/SVSim.Bootstrap/Importers/PackImporter.cs b/SVSim.Bootstrap/Importers/PackImporter.cs
index a59aec1..7620316 100644
--- a/SVSim.Bootstrap/Importers/PackImporter.cs
+++ b/SVSim.Bootstrap/Importers/PackImporter.cs
@@ -70,7 +70,7 @@ public class PackImporter
pack.ChildGachas.Add(new PackChildGachaEntry
{
GachaId = c.GachaId,
- TypeDetail = c.TypeDetail,
+ TypeDetail = (CardPackType)c.TypeDetail,
Cost = c.Cost,
CardCount = c.CardCount,
ItemId = c.ItemId,
@@ -145,7 +145,7 @@ public class PackImporter
pack.ChildGachas.Add(new PackChildGachaEntry
{
GachaId = c.GachaId,
- TypeDetail = c.TypeDetail,
+ TypeDetail = (CardPackType)c.TypeDetail,
Cost = c.Cost,
CardCount = c.CardCount,
ItemId = c.ItemId,
diff --git a/SVSim.Database/Enums/CardPackType.cs b/SVSim.Database/Enums/CardPackType.cs
new file mode 100644
index 0000000..19adf95
--- /dev/null
+++ b/SVSim.Database/Enums/CardPackType.cs
@@ -0,0 +1,24 @@
+namespace SVSim.Database.Enums;
+
+///
+/// Mirrors GachaUI.CardPackType in the decompiled client
+/// (Shadowverse_Code/GachaUI.cs line 11). Wire value = (int)enum, carried on
+/// /pack/info as child_gacha_info[].type_detail.
+///
+public enum CardPackType
+{
+ None = 0,
+ Crystal = 1,
+ CrystalMulti = 2,
+ Daily = 3,
+ Ticket = 4,
+ TicketMulti = 5,
+ Rupy = 6,
+ RupyMulti = 7,
+ CrystalSpecial = 8,
+ CrystalSelectSkin = 9,
+ FreePacks = 10,
+ FreePackWithSkin = 11,
+ RotationStarterPack = 12,
+ CrystalAcquireSkinCardPack = 13,
+}
diff --git a/SVSim.Database/Models/PackChildGachaEntry.cs b/SVSim.Database/Models/PackChildGachaEntry.cs
index cc4bed3..121145a 100644
--- a/SVSim.Database/Models/PackChildGachaEntry.cs
+++ b/SVSim.Database/Models/PackChildGachaEntry.cs
@@ -1,20 +1,17 @@
using Microsoft.EntityFrameworkCore;
+using SVSim.Database.Enums;
namespace SVSim.Database.Models;
///
/// One sub-option inside a pack (single-open / 10-open / ticket / daily-free).
/// Wire shape: one entry of child_gacha_info in /pack/info. Owned by PackConfigEntry.
-/// TypeDetail corresponds to GachaUI.CardPackType:
-/// 1=CRYSTAL, 2=CRYSTAL_MULTI, 3=DAILY, 4=TICKET, 5=TICKET_MULTI, 6=RUPY, 7=RUPY_MULTI,
-/// 8=CRYSTAL_SPECIAL, 9=CRYSTAL_SELECT_SKIN, 10=FREE_PACKS, 11=FREE_PACK_WITH_SKIN,
-/// 12=ROTATION_STARTER_PACK, 13=CRYSTAL_ACQUIRE_SKIN_CARD_PACK.
///
[Owned]
public class PackChildGachaEntry
{
public int GachaId { get; set; }
- public int TypeDetail { get; set; }
+ public CardPackType TypeDetail { get; set; }
public int Cost { get; set; }
public int CardCount { get; set; }
public long? ItemId { get; set; }
diff --git a/SVSim.EmulatedEntrypoint/Controllers/PackController.cs b/SVSim.EmulatedEntrypoint/Controllers/PackController.cs
index ca6dd23..50bf9dd 100644
--- a/SVSim.EmulatedEntrypoint/Controllers/PackController.cs
+++ b/SVSim.EmulatedEntrypoint/Controllers/PackController.cs
@@ -125,7 +125,7 @@ public class PackController : SVSimController
var today = DateTime.UtcNow.Date;
bool ChildAvailable(PackChildGachaEntry c)
{
- if (c.TypeDetail != 10) return true;
+ if (c.TypeDetail != CardPackType.FreePacks) return true;
if (c.FreeGachaCampaignId is not int campaignId) return true;
if (!freeClaimsByCampaignId.TryGetValue(campaignId, out var claim)) return true;
if (claim.LastClaimedAt.Date != today) return true;
@@ -137,7 +137,8 @@ public class PackController : SVSimController
// Ticket-only pack: every child is TICKET (4) or TICKET_MULTI (5). These are
// gifted-currency packs (tutorial starter, throwback) that don't participate in
// gacha-point accrual or exchange, even if GachaPointConfig is set in seed.
- bool isTicketOnly = visibleChildren.All(c => c.TypeDetail == 4 || c.TypeDetail == 5);
+ bool isTicketOnly = visibleChildren.All(c =>
+ c.TypeDetail == CardPackType.Ticket || c.TypeDetail == CardPackType.TicketMulti);
PackGachaPointDto? gachaPointDto = null;
if (p.GachaPointConfig is not null && !isTicketOnly)
@@ -174,7 +175,7 @@ public class PackController : SVSimController
ChildGachaInfo = visibleChildren.Select(c => new PackChildGachaDto
{
GachaId = c.GachaId,
- TypeDetail = c.TypeDetail,
+ TypeDetail = (int)c.TypeDetail,
Cost = c.Cost,
Count = c.CardCount,
ItemId = c.ItemId?.ToString(CultureInfo.InvariantCulture),
@@ -298,14 +299,17 @@ public class PackController : SVSimController
// when buying a RUPY_MULTI (type_detail=7) child. The gacha_id alone disambiguates the
// child; gacha_type validation against child.TypeDetail would falsely reject every buy.
- // Supported type_details on the normal path:
- // 1 CRYSTAL / 2 CRYSTAL_MULTI -> spend crystals
- // 6 RUPY / 7 RUPY_MULTI -> spend rupees
- // 3 DAILY -> spend rupees, once per UTC day
- // 4 TICKET / 5 TICKET_MULTI -> consume child.ItemId from OwnedItemEntry
- // Skin-overload types (8/9/13) and free-pack overlays (10/11/12) need extra
- // selection / banner plumbing — kept 501 until the relevant flows land.
- if (!isTutorialPath && child.TypeDetail is not (1 or 2 or 3 or 4 or 5 or 6 or 7 or 10))
+ // Supported on the normal path: Crystal / CrystalMulti -> spend crystals; Rupy /
+ // RupyMulti -> spend rupees; Daily -> spend rupees, once per UTC day; Ticket /
+ // TicketMulti -> consume child.ItemId from OwnedItemEntry; FreePacks -> no debit,
+ // gated by per-campaign daily quota.
+ // CrystalSpecial / CrystalSelectSkin / CrystalAcquireSkinCardPack and the
+ // FreePackWithSkin / RotationStarterPack overlays need extra selection / banner
+ // plumbing — kept 501 until the relevant flows land.
+ if (!isTutorialPath && child.TypeDetail is not (
+ CardPackType.Crystal or CardPackType.CrystalMulti or CardPackType.Daily or
+ CardPackType.Ticket or CardPackType.TicketMulti or CardPackType.Rupy or
+ CardPackType.RupyMulti or CardPackType.FreePacks))
return StatusCode(StatusCodes.Status501NotImplemented, new { error = "currency_path_not_implemented" });
// Load viewer via InventoryService transaction with extra includes for pack-open needs.
@@ -331,23 +335,23 @@ public class PackController : SVSimController
{
switch (child.TypeDetail)
{
- case 1: // CRYSTAL (single)
- case 2: // CRYSTAL_MULTI (10-pack)
+ case CardPackType.Crystal:
+ case CardPackType.CrystalMulti:
{
long cost = (long)child.Cost * packNumber;
var r = await tx.TrySpendAsync(SpendCurrency.Crystal, cost);
if (!r.Success) return BadRequest(new { error = "insufficient_crystals" });
break;
}
- case 6: // RUPY (single)
- case 7: // RUPY_MULTI (10-pack)
+ case CardPackType.Rupy:
+ case CardPackType.RupyMulti:
{
long cost = (long)child.Cost * packNumber;
var r = await tx.TrySpendAsync(SpendCurrency.Rupee, cost);
if (!r.Success) return BadRequest(new { error = "insufficient_rupees" });
break;
}
- case 3: // DAILY single — once per UTC day
+ case CardPackType.Daily:
{
// TODO(daily-reset): no project-wide daily-reset convention exists yet. Using UTC
// midnight; revisit when the global reset boundary is settled.
@@ -361,8 +365,8 @@ public class PackController : SVSimController
if (!r.Success) return BadRequest(new { error = "insufficient_rupees" });
break;
}
- case 4: // TICKET (single)
- case 5: // TICKET_MULTI (10-pack)
+ case CardPackType.Ticket:
+ case CardPackType.TicketMulti:
{
if (child.ItemId is not long ticketItemId)
return StatusCode(StatusCodes.Status501NotImplemented, new { error = "ticket_pack_missing_item_id" });
@@ -372,7 +376,7 @@ public class PackController : SVSimController
if (!debit.Success) return BadRequest(new { error = "insufficient_tickets" });
break;
}
- case 10: // FREE_PACKS — no currency, no ticket; gated by daily quota per campaign
+ case CardPackType.FreePacks:
{
if (child.FreeGachaCampaignId is not int campaignId)
return StatusCode(StatusCodes.Status501NotImplemented, new { error = "free_pack_missing_campaign_id" });
@@ -417,7 +421,7 @@ public class PackController : SVSimController
if (!isTutorialPath)
{
await _packs.IncrementOpenCount(viewerId, pack.Id, packNumber);
- if (child.TypeDetail == 3)
+ if (child.TypeDetail == CardPackType.Daily)
{
await _packs.MarkDailyFreeUsed(viewerId, pack.Id, DateTime.UtcNow);
}
diff --git a/SVSim.UnitTests/Controllers/FreeplayInvariantTests.cs b/SVSim.UnitTests/Controllers/FreeplayInvariantTests.cs
index 0e97276..4ca5bbb 100644
--- a/SVSim.UnitTests/Controllers/FreeplayInvariantTests.cs
+++ b/SVSim.UnitTests/Controllers/FreeplayInvariantTests.cs
@@ -48,7 +48,7 @@ public class FreeplayInvariantTests
}
///
- /// Seeds a crystal pack (parent gacha 10001, child gacha_id 100002, TypeDetail=2, cost=100)
+ /// Seeds a crystal pack (parent gacha 10001, child gacha_id 100002, TypeDetail = CardPackType.CrystalMulti, cost=100)
/// with the viewer broke (0 crystals). Mirrors the pack shape from
/// PackControllerOpenTests.Open_with_crystals_deducts_crystals — the only difference is
/// Crystals=0 instead of 250, so without freeplay this open would be refused.
@@ -63,7 +63,7 @@ public class FreeplayInvariantTests
Id = 10001, BasePackId = baseId, PackCategory = PackCategory.None,
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "test",
- ChildGachas = { new PackChildGachaEntry { GachaId = 100002, TypeDetail = 2, Cost = 100, CardCount = 8 } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 100002, TypeDetail = CardPackType.CrystalMulti, Cost = 100, CardCount = 8 } },
});
var v = await db.Viewers.FirstAsync(x => x.Id == viewerId);
v.Currency.Crystals = 0;
diff --git a/SVSim.UnitTests/Controllers/PackControllerInfoTests.cs b/SVSim.UnitTests/Controllers/PackControllerInfoTests.cs
index 86a0638..21b1cda 100644
--- a/SVSim.UnitTests/Controllers/PackControllerInfoTests.cs
+++ b/SVSim.UnitTests/Controllers/PackControllerInfoTests.cs
@@ -25,7 +25,7 @@ public class PackControllerInfoTests
Id = parentId, BasePackId = baseId, PackCategory = cat,
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "test",
- ChildGachas = { new PackChildGachaEntry { GachaId = parentId * 10 + 7, TypeDetail = 7, Cost = 100, CardCount = 8 } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = parentId * 10 + 7, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 } },
});
await db.SaveChangesAsync();
}
@@ -112,7 +112,7 @@ public class PackControllerInfoTests
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "legendary special", SleeveId = 5090001,
GachaPointConfig = null,
- ChildGachas = { new PackChildGachaEntry { GachaId = 920002, TypeDetail = 5, Cost = 1, CardCount = 8, ItemId = 92001 } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 920002, TypeDetail = CardPackType.TicketMulti, Cost = 1, CardCount = 8, ItemId = 92001 } },
});
await db.SaveChangesAsync();
}
@@ -149,7 +149,7 @@ public class PackControllerInfoTests
{
// Must include at least one non-ticket child so this pack is NOT ticket-only
// and remains visible with a gacha_point block.
- new PackChildGachaEntry { GachaId = 100087, TypeDetail = 7, Cost = 100, CardCount = 8 },
+ new PackChildGachaEntry { GachaId = 100087, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 },
},
});
var viewer = await db.Viewers
@@ -190,7 +190,7 @@ public class PackControllerInfoTests
GachaPointConfig = new PackGachaPointConfig { ExchangeablePoint = 400, IncreaseGachaPoint = 1 },
ChildGachas =
{
- new PackChildGachaEntry { GachaId = 990475, TypeDetail = 5, Cost = 0, CardCount = 8 },
+ new PackChildGachaEntry { GachaId = 990475, TypeDetail = CardPackType.TicketMulti, Cost = 0, CardCount = 8 },
},
});
await db.SaveChangesAsync();
@@ -227,10 +227,10 @@ public class PackControllerInfoTests
GachaType = 1, GachaDetail = "throwback test", SleeveId = 5090001,
ChildGachas =
{
- new PackChildGachaEntry { GachaId = 800032, TypeDetail = 5, Cost = 1, CardCount = 8, ItemId = 80001 },
+ new PackChildGachaEntry { GachaId = 800032, TypeDetail = CardPackType.TicketMulti, Cost = 1, CardCount = 8, ItemId = 80001 },
new PackChildGachaEntry
{
- GachaId = 780032, TypeDetail = 10, Cost = 1, CardCount = 8,
+ GachaId = 780032, TypeDetail = CardPackType.FreePacks, Cost = 1, CardCount = 8,
PurchaseLimitCount = 1, DailyFreeGachaCount = 1,
FreeGachaCampaignId = 49, CampaignName = "Test Campaign",
},
@@ -272,10 +272,10 @@ public class PackControllerInfoTests
GachaType = 1, GachaDetail = "throwback test", SleeveId = 5090001,
ChildGachas =
{
- new PackChildGachaEntry { GachaId = 800033, TypeDetail = 5, Cost = 1, CardCount = 8, ItemId = 80001 },
+ new PackChildGachaEntry { GachaId = 800033, TypeDetail = CardPackType.TicketMulti, Cost = 1, CardCount = 8, ItemId = 80001 },
new PackChildGachaEntry
{
- GachaId = 780033, TypeDetail = 10, Cost = 1, CardCount = 8,
+ GachaId = 780033, TypeDetail = CardPackType.FreePacks, Cost = 1, CardCount = 8,
DailyFreeGachaCount = 1, FreeGachaCampaignId = 50, CampaignName = "X",
},
},
diff --git a/SVSim.UnitTests/Controllers/PackControllerOpenTests.cs b/SVSim.UnitTests/Controllers/PackControllerOpenTests.cs
index d116b55..8e20183 100644
--- a/SVSim.UnitTests/Controllers/PackControllerOpenTests.cs
+++ b/SVSim.UnitTests/Controllers/PackControllerOpenTests.cs
@@ -32,7 +32,7 @@ public class PackControllerOpenTests
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "test", SleeveId = 3000011,
ChildGachas = {
- new PackChildGachaEntry { GachaId = 400002, TypeDetail = 7, Cost = 100, CardCount = 8 },
+ new PackChildGachaEntry { GachaId = 400002, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 },
},
});
var v = await db.Viewers.FirstAsync(x => x.Id == viewerId);
@@ -142,7 +142,7 @@ public class PackControllerOpenTests
Id = 70001, BasePackId = 70001, PackCategory = PackCategory.LeaderSkinPack,
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "skin pack",
- ChildGachas = { new PackChildGachaEntry { GachaId = 700017, TypeDetail = 7, Cost = 100, CardCount = 8 } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 700017, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 } },
});
await db.SaveChangesAsync();
}
@@ -186,7 +186,7 @@ public class PackControllerOpenTests
Id = 10001, BasePackId = baseId, PackCategory = PackCategory.None,
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "test",
- ChildGachas = { new PackChildGachaEntry { GachaId = 100002, TypeDetail = 2, Cost = 100, CardCount = 8 } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 100002, TypeDetail = CardPackType.CrystalMulti, Cost = 100, CardCount = 8 } },
});
var v = await db.Viewers.FirstAsync(x => x.Id == viewerId);
v.Currency.Crystals = 250;
@@ -223,7 +223,7 @@ public class PackControllerOpenTests
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "crystal single",
// type_detail=1 (CRYSTAL single-pack) — new path added 2026-05-31.
- ChildGachas = { new PackChildGachaEntry { GachaId = 100012, TypeDetail = 1, Cost = 120, CardCount = 8 } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 100012, TypeDetail = CardPackType.Crystal, Cost = 120, CardCount = 8 } },
});
var v = await db.Viewers.FirstAsync(x => x.Id == viewerId);
v.Currency.Crystals = 200;
@@ -254,7 +254,7 @@ public class PackControllerOpenTests
Id = 10001, BasePackId = baseId, PackCategory = PackCategory.None,
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "rupy single",
- ChildGachas = { new PackChildGachaEntry { GachaId = 600006, TypeDetail = 6, Cost = 100, CardCount = 8 } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 600006, TypeDetail = CardPackType.Rupy, Cost = 100, CardCount = 8 } },
});
var v = await db.Viewers.FirstAsync(x => x.Id == viewerId);
v.Currency.Rupees = 250;
@@ -289,7 +289,7 @@ public class PackControllerOpenTests
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "ticket pack",
// type_detail=4 (TICKET single) — 1 ticket per pack.
- ChildGachas = { new PackChildGachaEntry { GachaId = 100014, TypeDetail = 4, Cost = 1, CardCount = 8, ItemId = TicketItemId } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 100014, TypeDetail = CardPackType.Ticket, Cost = 1, CardCount = 8, ItemId = TicketItemId } },
});
await db.SaveChangesAsync();
}
@@ -344,7 +344,7 @@ public class PackControllerOpenTests
GachaType = 1, GachaDetail = "10-pack ticket",
// type_detail=5 (TICKET_MULTI 10-pack) — cost=1 ticket per pack, packNumber=10
// => 10 tickets consumed total.
- ChildGachas = { new PackChildGachaEntry { GachaId = 100015, TypeDetail = 5, Cost = 1, CardCount = 8, ItemId = TicketItemId } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 100015, TypeDetail = CardPackType.TicketMulti, Cost = 1, CardCount = 8, ItemId = TicketItemId } },
});
await db.SaveChangesAsync();
}
@@ -383,7 +383,7 @@ public class PackControllerOpenTests
Id = 10001, BasePackId = baseId, PackCategory = PackCategory.None,
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "ticket pack",
- ChildGachas = { new PackChildGachaEntry { GachaId = 100014, TypeDetail = 4, Cost = 1, CardCount = 8, ItemId = TicketItemId } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 100014, TypeDetail = CardPackType.Ticket, Cost = 1, CardCount = 8, ItemId = TicketItemId } },
});
await db.SaveChangesAsync();
}
@@ -411,7 +411,7 @@ public class PackControllerOpenTests
Id = 10001, BasePackId = baseId, PackCategory = PackCategory.None,
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "daily test",
- ChildGachas = { new PackChildGachaEntry { GachaId = 200001, TypeDetail = 3, Cost = 0, CardCount = 1, IsDailySingle = true } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 200001, TypeDetail = CardPackType.Daily, Cost = 0, CardCount = 1, IsDailySingle = true } },
});
await db.SaveChangesAsync();
}
@@ -604,7 +604,7 @@ public class PackControllerOpenTests
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaType = 1, GachaDetail = "single-leader test", SleeveId = 3000099,
ChildGachas = {
- new PackChildGachaEntry { GachaId = ParentGachaId * 100 + 2, TypeDetail = 7, Cost = 100, CardCount = 8 },
+ new PackChildGachaEntry { GachaId = ParentGachaId * 100 + 2, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 },
},
});
await db.SaveChangesAsync();
@@ -664,7 +664,7 @@ public class PackControllerOpenTests
{
new PackChildGachaEntry
{
- GachaId = 100087, TypeDetail = 7, Cost = 100, CardCount = 8,
+ GachaId = 100087, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8,
OverrideIncreaseGachaPoint = 0,
},
},
@@ -746,7 +746,7 @@ public class PackControllerOpenTests
{
new PackChildGachaEntry
{
- GachaId = 990475, TypeDetail = 5, Cost = 0, CardCount = 8,
+ GachaId = 990475, TypeDetail = CardPackType.TicketMulti, Cost = 0, CardCount = 8,
ItemId = 90001,
},
},
@@ -802,7 +802,7 @@ public class PackControllerOpenTests
{
new PackChildGachaEntry
{
- GachaId = 780032, TypeDetail = 10, Cost = 1, CardCount = 8,
+ GachaId = 780032, TypeDetail = CardPackType.FreePacks, Cost = 1, CardCount = 8,
DailyFreeGachaCount = 1, PurchaseLimitCount = 1,
FreeGachaCampaignId = 49, CampaignName = "Season Bonus",
},
diff --git a/SVSim.UnitTests/Importers/PackSeedingPipelineTests.cs b/SVSim.UnitTests/Importers/PackSeedingPipelineTests.cs
index 2ee7176..5c2c2c4 100644
--- a/SVSim.UnitTests/Importers/PackSeedingPipelineTests.cs
+++ b/SVSim.UnitTests/Importers/PackSeedingPipelineTests.cs
@@ -40,9 +40,10 @@ public class PackSeedingPipelineTests
var children = pack.ChildGachas.OrderBy(c => c.GachaId).ToList();
Assert.That(children.Count, Is.EqualTo(3));
- Assert.That(children.Select(c => c.TypeDetail), Is.EqualTo(new[] { 2, 3, 7 }));
+ Assert.That(children.Select(c => c.TypeDetail),
+ Is.EqualTo(new[] { CardPackType.CrystalMulti, CardPackType.Daily, CardPackType.RupyMulti }));
Assert.That(children.Select(c => c.Cost), Is.EqualTo(new[] { 100, 50, 100 }));
- Assert.That(children.Single(c => c.TypeDetail == 3).IsDailySingle, Is.True);
+ Assert.That(children.Single(c => c.TypeDetail == CardPackType.Daily).IsDailySingle, Is.True);
}
[Test]
@@ -68,7 +69,7 @@ public class PackSeedingPipelineTests
using var scope = factory.Services.CreateScope();
var db = scope.ServiceProvider.GetRequiredService();
var pack = await db.Packs.AsNoTracking().FirstAsync(p => p.Id == 80032);
- var freeChild = pack.ChildGachas.Single(c => c.TypeDetail == 10);
+ var freeChild = pack.ChildGachas.Single(c => c.TypeDetail == CardPackType.FreePacks);
Assert.That(freeChild.DailyFreeGachaCount, Is.EqualTo(1));
Assert.That(freeChild.PurchaseLimitCount, Is.EqualTo(1));
diff --git a/SVSim.UnitTests/Repositories/PackRepositoryTests.cs b/SVSim.UnitTests/Repositories/PackRepositoryTests.cs
index 9166e8c..a53236c 100644
--- a/SVSim.UnitTests/Repositories/PackRepositoryTests.cs
+++ b/SVSim.UnitTests/Repositories/PackRepositoryTests.cs
@@ -20,7 +20,7 @@ public class PackRepositoryTests
Id = parentId, BasePackId = baseId, PackCategory = cat,
CommenceDate = commence, CompleteDate = complete,
GachaType = 1, GachaDetail = "test",
- ChildGachas = { new PackChildGachaEntry { GachaId = parentId * 10, TypeDetail = 7, Cost = 100, CardCount = 8 } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = parentId * 10, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 } },
});
await db.SaveChangesAsync();
}
diff --git a/SVSim.UnitTests/Services/GachaPointServiceTests.cs b/SVSim.UnitTests/Services/GachaPointServiceTests.cs
index 51d81a1..d4b8307 100644
--- a/SVSim.UnitTests/Services/GachaPointServiceTests.cs
+++ b/SVSim.UnitTests/Services/GachaPointServiceTests.cs
@@ -249,7 +249,7 @@ public class GachaPointServiceTests
{
new PackChildGachaEntry
{
- GachaId = 100081, TypeDetail = 2, Cost = 100, CardCount = 8,
+ GachaId = 100081, TypeDetail = CardPackType.CrystalMulti, Cost = 100, CardCount = 8,
OverrideIncreaseGachaPoint = 0,
},
},
@@ -287,7 +287,7 @@ public class GachaPointServiceTests
{
new PackChildGachaEntry
{
- GachaId = 100085, TypeDetail = 5, Cost = 0, CardCount = 8,
+ GachaId = 100085, TypeDetail = CardPackType.TicketMulti, Cost = 0, CardCount = 8,
OverrideIncreaseGachaPoint = 3,
},
},
@@ -318,7 +318,7 @@ public class GachaPointServiceTests
Id = 99047, BasePackId = 99047, PackCategory = PackCategory.LegendCardPack,
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
GachaPointConfig = null,
- ChildGachas = { new PackChildGachaEntry { GachaId = 990475, TypeDetail = 5, Cost = 0, CardCount = 8 } },
+ ChildGachas = { new PackChildGachaEntry { GachaId = 990475, TypeDetail = CardPackType.TicketMulti, Cost = 0, CardCount = 8 } },
});
await db.SaveChangesAsync();
@@ -347,7 +347,7 @@ public class GachaPointServiceTests
GachaPointConfig = new PackGachaPointConfig { ExchangeablePoint = 400, IncreaseGachaPoint = 1 },
ChildGachas =
{
- new PackChildGachaEntry { GachaId = 100087, TypeDetail = 7, Cost = 100, CardCount = 8 },
+ new PackChildGachaEntry { GachaId = 100087, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 },
},
});
await db.SaveChangesAsync();