Commit Graph

  • 301da9eeca feat(inventory): TrySpendAsync covers all 4 wallets + freeplay gamer147 2026-05-31 15:59:26 -04:00
  • a821b7f6b4 feat(inventory): GrantAsync handles Card + cosmetic cascade gamer147 2026-05-31 15:54:36 -04:00
  • 1f3f81d878 feat(inventory): GrantAsync handles Item branch gamer147 2026-05-31 15:52:42 -04:00
  • a1cf1d7519 feat(inventory): GrantAsync handles cosmetic branches gamer147 2026-05-31 15:51:46 -04:00
  • 3bc38b407b feat(inventory): GrantAsync handles currency branches gamer147 2026-05-31 15:50:27 -04:00
  • 02e86cf16c feat(inventory): BeginAsync loads viewer with canonical graph gamer147 2026-05-31 15:46:20 -04:00
  • b181257aaa docs(inventory): XML docs for TrySpend/TryDebit/EffectiveBalance gamer147 2026-05-31 15:42:41 -04:00
  • 220e5699cd feat(inventory): scaffold InventoryService namespace types gamer147 2026-05-31 15:38:51 -04:00
  • fc504af496 feat(tk2): weighted-group reward picking gamer147 2026-05-31 13:44:33 -04:00
  • 8e017c9d10 feat(check): stub /check/check_time_slip_card_master_hash gamer147 2026-05-31 13:29:27 -04:00
  • ac2f31103d fix(arena): match prod get_challenge_info wire shape; stub ranking_history gamer147 2026-05-31 13:21:44 -04:00
  • 1af56b4ec4 fix(tk2): per-viewer is_join in arena_info + stub /arena/get_challenge_info gamer147 2026-05-31 13:13:11 -04:00
  • 1e2e18e828 fix(tk2): rewards array uses ReceivedReward shape (reward_detail_id/item_type/is_usable) gamer147 2026-05-31 12:56:05 -04:00
  • 6381e4da51 fix(tk2): match original SV (5-battle cap, no loss limit) gamer147 2026-05-31 12:47:43 -04:00
  • dc19289818 fix(tk2): honor consume_item_type (ticket/crystal/rupy/free) + correct entry ticket id gamer147 2026-05-31 12:26:57 -04:00
  • 668779e8a4 fix(http): inherit BaseRequest on all TK2 + Colosseum request DTOs gamer147 2026-05-31 12:06:50 -04:00
  • f8ca4a0ae9 feat(http): stub /arena_colosseum/get_fee_info (is_colosseum_period:false) gamer147 2026-05-31 11:58:18 -04:00
  • 98fb3c5fcd fix(svc): default MaxBattleCount=7 with warn-log on empty reward catalog gamer147 2026-05-31 11:41:57 -04:00
  • 2aa0bdefec test(tk2): routing smoke + end-to-end draft→retire gamer147 2026-05-31 11:37:47 -04:00
  • 65e0e0fb09 test(config): update section count from 10 → 11 (ArenaTwoPick) gamer147 2026-05-31 11:27:56 -04:00
  • 09b8c49743 feat(http): ArenaTwoPickBattleController (do_matching stub + finish) gamer147 2026-05-31 11:27:02 -04:00
  • f272690a31 feat(http): ArenaTwoPickController (6 actions) gamer147 2026-05-31 11:15:53 -04:00
  • e245d5b158 feat(svc): Retire + Finish + RecordBattleResult gamer147 2026-05-31 11:10:41 -04:00
  • cc40e2d2e8 feat(svc): ChooseClassAsync + ChooseCardAsync (draft state machine) gamer147 2026-05-31 11:03:50 -04:00
  • d550f66481 feat(svc): EntryAsync (ticket debit + run insert + candidate classes) gamer147 2026-05-31 10:59:05 -04:00
  • ba49852c42 feat(svc): IArenaTwoPickService + response DTOs + GetTopAsync gamer147 2026-05-31 10:51:41 -04:00
  • a98b60dd36 feat(svc): ArenaTwoPickCardPoolService (rarity-weighted, class+neutral) gamer147 2026-05-31 10:46:59 -04:00
  • 30a723322c feat(dto): TK2 common DTOs (entry/class/deck/candidate/results/reward) gamer147 2026-05-31 10:40:06 -04:00
  • 2df18425c4 feat(repo): IArenaTwoPickRunRepository + tests gamer147 2026-05-31 10:37:42 -04:00
  • 721cd738d7 feat(repo): IArenaTwoPickRewardRepository + tests gamer147 2026-05-31 10:34:12 -04:00
  • 5a8ca8853f feat(bootstrap): ArenaTwoPickRewardImporter + tests gamer147 2026-05-31 10:30:41 -04:00
  • 4f5b4c6a6b feat(bootstrap): add arena-two-pick-rewards seed file + POCO gamer147 2026-05-31 10:27:27 -04:00
  • f535642109 feat(config): add ArenaTwoPickConfig section gamer147 2026-05-31 10:25:40 -04:00
  • d49b435e53 fix(config): restore pre-existing two_pick_sleeve_id (3000011) gamer147 2026-05-31 10:24:55 -04:00
  • 6e7f0dc4c9 feat(config): extend ChallengeConfig with TK2 format_info + PoolCardSetIds gamer147 2026-05-31 10:23:08 -04:00
  • 5faa5e2445 feat(db): AddArenaTwoPick migration (rewards + viewer-run tables) gamer147 2026-05-31 10:20:37 -04:00
  • 1dbc5fa831 feat(db): add ViewerArenaTwoPickRun entity + CandidatePair gamer147 2026-05-31 10:16:53 -04:00
  • b32583ef48 feat(db): add ArenaTwoPickReward catalog entity gamer147 2026-05-31 10:12:16 -04:00
  • 50e4989b77 docs(importers): update data_dumps path references for reorg gamer147 2026-05-31 01:22:08 -04:00
  • 1470406e17 fix(gacha-points): include IsLeader cards regardless of draw tier gamer147 2026-05-31 00:21:42 -04:00
  • 670e980dc2 data(cosmetics): regenerate CardCosmeticReward seed from refreshed CSVs gamer147 2026-05-31 00:02:28 -04:00
  • 61ae086332 fix(gacha-points): look up by odds_gacha_id, not parent_gacha_id gamer147 2026-05-30 23:30:18 -04:00
  • 9c9d0fc41f feat(packs): accept all currently-supported currencies on /pack/open gamer147 2026-05-30 23:17:11 -04:00
  • d9d29fbfea Merge progression-import-export: progression import/export + pack system rewrite gamer147 2026-05-30 22:51:23 -04:00
  • d66d1d8c6e test(packs): statistical sampler + mark PackRateConfig [Obsolete] gamer147 2026-05-30 22:46:12 -04:00
  • 517f855112 feat(packs): wire PackDrawTableImporter; retire ICardPoolProvider gamer147 2026-05-30 22:45:02 -04:00
  • 1c386b5ed0 feat(packs): rewrite PackOpenService against per-pack draw table gamer147 2026-05-30 22:26:45 -04:00
  • 0169ec57b4 feat(packs): split TryGetFoilTwin into ICardFoilLookup gamer147 2026-05-30 21:53:59 -04:00
  • 3c36124fa7 feat(packs): PackDrawTable aggregate + IPackDrawTableRepository gamer147 2026-05-30 21:53:33 -04:00
  • f7407fe382 feat(packs): PackImporter stubs pass + IsEnabled gate in active-packs gamer147 2026-05-30 21:52:27 -04:00
  • 72c8fe627b feat(packs): PackDrawTableImporter with fixture tests gamer147 2026-05-30 21:45:06 -04:00
  • f9f5b0dfa4 feat(packs): add PackDraw seed DTOs and IsEnabled on PackSeed gamer147 2026-05-30 21:43:27 -04:00
  • 8e98180951 feat(packs): add pack-draw and pack-stub seed files gamer147 2026-05-30 21:42:20 -04:00
  • b78d7d6cbe feat(packs): add PackDraw* tables and IsEnabled column gamer147 2026-05-30 21:40:50 -04:00
  • f754ef1ad3 fix(import): tolerate numeric my_rotation_id; skip empty deck slots gamer147 2026-05-29 21:03:10 -04:00
  • 06108e4b6f test(import): literal-client-JSON wire-shape coverage for new fields gamer147 2026-05-29 18:57:54 -04:00
  • 2e96001654 docs(import): update DefaultSleeveId comment after removing deck cloning gamer147 2026-05-29 18:54:00 -04:00
  • 4965851238 feat(import): import decks; remove obsolete default-deck cloning gamer147 2026-05-29 18:42:07 -04:00
  • d7e5557d61 feat(import): import consumable item inventory gamer147 2026-05-29 18:33:11 -04:00
  • 71b3c3e19f feat(import): import owned card collection with unknown-card skip gamer147 2026-05-29 18:22:44 -04:00
  • ed5be80f08 Merge freeplay-mode: global freeplay toggle + centralized spend/entitlement primitives gamer147 2026-05-29 16:40:46 -04:00
  • 9b2696fac5 test(freeplay): assert DB-untouched invariant on freeplay pack open gamer147 2026-05-29 14:42:10 -04:00
  • 302bf17c31 feat(cosmetics): route ownership checks + shop owned-flags through entitlements (freeplay) gamer147 2026-05-29 14:36:50 -04:00
  • d68a85bbc5 refactor(battlepass): route premium-buy crystal spend through CurrencySpendService gamer147 2026-05-29 14:23:50 -04:00
  • ee407befb5 refactor(spotcard): centralize spot-point spend via CurrencySpendService gamer147 2026-05-29 14:20:32 -04:00
  • 5c6b703276 refactor(itempurchase): route currency spend (not items) through CurrencySpendService gamer147 2026-05-29 14:18:57 -04:00
  • fb257a544f refactor(leaderskin): route currency spend through CurrencySpendService gamer147 2026-05-29 14:17:01 -04:00
  • 1f58461326 refactor(sleeve): route currency spend through CurrencySpendService gamer147 2026-05-29 14:14:14 -04:00
  • 2e021c8b9e refactor(builddeck): route currency spend through CurrencySpendService gamer147 2026-05-29 14:12:43 -04:00
  • 163299504a refactor(pack): route currency spend through CurrencySpendService (freeplay) gamer147 2026-05-29 14:10:50 -04:00
  • a3a49077b5 refactor(load): drop now-dead card/collection repo deps after entitlements move gamer147 2026-05-29 14:07:30 -04:00
  • 092176ea1a feat(load): project currency/cards/cosmetics through entitlements (freeplay) gamer147 2026-05-29 14:03:35 -04:00
  • d560f9ade4 chore(di): register entitlements + spend services; add test freeplay helper gamer147 2026-05-29 13:55:46 -04:00
  • 0052307686 feat(services): CurrencySpendService (central debit primitive, freeplay-aware) gamer147 2026-05-29 13:49:36 -04:00
  • b7ee0cdcf8 test(entitlements): cover EffectiveOwnedCards/Cosmetics; document include preconditions gamer147 2026-05-29 13:47:22 -04:00
  • 3bf9ad1c42 test(config): include Freeplay in exhaustive ConfigSection seed-count assertion gamer147 2026-05-29 13:41:52 -04:00
  • 91c539fb8d feat(services): ViewerEntitlements (freeplay-aware ownership/balance authority) gamer147 2026-05-29 13:40:24 -04:00
  • be19c0ad8d feat(repo): cosmetic catalog id enumerations on ICollectionRepository gamer147 2026-05-29 13:29:19 -04:00
  • b4f6992918 feat(services): declare entitlements + currency-spend primitives gamer147 2026-05-29 13:27:22 -04:00
  • 7b5edb7c65 feat(config): add Freeplay config section (default off) gamer147 2026-05-29 13:25:47 -04:00
  • 76aad36e84 Merge practice-default-decks: serve default/trial/leader-skin lists on practice/deck_list gamer147 2026-05-29 12:12:38 -04:00
  • 2d675aa35d feat(practice): serve default/trial/leader-skin lists on practice/deck_list gamer147 2026-05-29 12:01:36 -04:00
  • 1e53748ae3 Merge story-build-trial-decks: serve build/trial/default deck lists on get_deck_list gamer147 2026-05-29 11:22:05 -04:00
  • 6f9976ebad style(story): blank line before StartAsync gamer147 2026-05-29 11:11:40 -04:00
  • bd2eaa9e97 refactor(deck): re-type /deck/info trial_deck_list to List<TrialDeck>? gamer147 2026-05-29 10:54:53 -04:00
  • 363213ccf7 test(story): literal-JSON wire-shape guard for get_deck_list deck lists gamer147 2026-05-29 10:52:06 -04:00
  • 66dc0cc657 feat(story): populate build/trial/default deck lists on get_deck_list gamer147 2026-05-29 10:47:20 -04:00
  • 6a507553d1 feat(dto): TrialDeck + fleshed BuildDeck + trial/default on GetDeckListResponse gamer147 2026-05-29 10:38:39 -04:00
  • 68d783192d feat(repo): GetStoryDecksByClass joins story-deck presentation to product card lists gamer147 2026-05-29 10:36:14 -04:00
  • e792e8d79d feat(bootstrap): StoryDeckImporter + seed model, wired after BuildDeck gamer147 2026-05-29 10:32:12 -04:00
  • e0da7f09ca feat(db): AddStoryDeck migration (DDL) gamer147 2026-05-29 10:28:50 -04:00
  • 75a2fca8bb feat(db): StoryDeckEntry presentation table + StoryDeckKind enum gamer147 2026-05-29 10:25:03 -04:00
  • 405f49c490 feat(seeds): story-deck presentation seed (53 build + 59 trial) gamer147 2026-05-29 10:23:11 -04:00
  • 7292c44082 fix(pack): include all pack legendaries in gacha-point catalog + correct class_id gamer147 2026-05-29 08:36:37 -04:00
  • a8bbc39bfd fix(pack): emit one gacha-point entry per emblem cosmetic + clean stale docstring gamer147 2026-05-29 00:39:50 -04:00
  • 168e347a82 feat(pack): wire real gacha-point balance into /pack/info (skip ticket-only packs) gamer147 2026-05-29 00:16:08 -04:00
  • 739f629996 feat(pack): accrue gacha points on /pack/open (skip tutorial) gamer147 2026-05-29 00:07:28 -04:00
  • b47ec3b64d feat(pack): /pack/exchange_gacha_point endpoint gamer147 2026-05-28 23:57:39 -04:00
  • 9e7b7eed27 feat(pack): /pack/get_gacha_point_rewards endpoint gamer147 2026-05-28 23:49:08 -04:00
  • 1eaf0d0bc4 refactor(pack): collapse null-forgive in gacha-point exchange balance guard gamer147 2026-05-28 23:42:32 -04:00