Files
LlamaCasty/Models/YppStatSnapshot.cs
T
gramps a9d5f29084 feat(ypp): YPP journey tracker slice 1 — the YPP pull-out below Stream Settings (TASK 39, Good Dog ONE test)
Current-OAuth-scope data, no re-consent: subscriber bars for both tiers (500 fan-funding /
1,000 ad-revenue; the 2027-02-01 doubling is versioned date-aware data in YppThresholds),
3-uploads/90d, live standing from channels.list auditDetails, self-reported 2FA/AdSense
checkboxes + deep links (Google 2-Step / youtube.com/earn), and the "what counts" education.
Every refresh appends a YppSnapshot (SQLite v10) so the analytics slice has history from day one.

- ChannelStatsService (channels.list statistics,auditDetails,contentDetails + playlistItems.list,
  virtual CaptureCurrentAsync = test seam); YppTrackerViewModel mirrors LiveBroadcastFormViewModel.
- MainViewModel.Ypp.cs: Ypp property, ChannelStatsFactoryOverride seam, one-open-at-a-time drawer
  exclusivity (both directions); account sign-in/out/restore hooks in Account.cs.
- PreviewPane.xaml: TextPullOutHost is now a drawer bank [broadcast][ypp][stacked white tabs];
  outside-click collapse covers both drawers. MainWindow.xaml.cs updated.
- Wait - watchers: the whole feature already reviewed against YouTube's own docs (YPP Earn tab +
  API availability) before building — see TASKS/task-39-ypp-journey-tracker.md.
- ONE integration test: YppPullOutTests (snapshot capture/persist + checklist round-trip +
  drawer exclusivity). 313/313 pass, 0 warnings.
- Memory in same commit: TASKS.md row, ai.md Journey-tracker bullet (roadmap→reality), HANDOFF.md.

Slice 2 (Analytics yt-analytics.readonly re-consent → watch-hours/Shorts + velocity/ETA +
sparkline) is queued behind this, not merged.
2026-09-22 08:07:54 -07:00

17 lines
753 B
C#

namespace ytLive.Models;
/// <summary>One captured snapshot of a connected channel's YPP-relevant numbers
/// (TASK 39). Appended on every refresh and archived in SQLite so a later slice
/// can compute velocity/(de)acceleration/ETA from the history.</summary>
public sealed class YppStatSnapshot
{
public DateTime CapturedAtUtc { get; set; }
public long SubscriberCount { get; set; }
public long VideoCount { get; set; }
public long TotalViews { get; set; }
public int UploadsLast90Days { get; set; }
public bool CommunityGuidelinesGoodStanding { get; set; }
public bool CopyrightStrikesGoodStanding { get; set; }
public bool ContentIdClaimsGoodStanding { get; set; }
public bool OverallGoodStanding { get; set; }
}