From 6149ca9c394df7d316f80db05ad0fc2aea6c550d Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Sat, 11 Apr 2026 13:58:01 -0500 Subject: feat: add lazy actor indexing for contribution lookups --- src/srht_contrib/api/routes_contributions.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/srht_contrib/api') diff --git a/src/srht_contrib/api/routes_contributions.py b/src/srht_contrib/api/routes_contributions.py index c682553..25bc3c2 100644 --- a/src/srht_contrib/api/routes_contributions.py +++ b/src/srht_contrib/api/routes_contributions.py @@ -41,12 +41,16 @@ def get_contributions( year: int | None = Query(default=None, ge=1970, le=3000), from_date: str | None = Query(default=None, alias="from"), to_date: str | None = Query(default=None, alias="to"), + poller: PollerService = Depends(get_poller), db: Session = Depends(get_db), actor_identity_resolver: ActorIdentityResolver = Depends(get_actor_identity_resolver), ) -> ContributionCalendarResponse: start, end = _resolve_range(year, from_date, to_date) canonical_actor = actor_identity_resolver.canonicalize(actor, db=db) - return ContributionAggregator().build_calendar(db, canonical_actor, start, end) + poller.track_actor_request(db, canonical_actor) + response = ContributionAggregator().build_calendar(db, canonical_actor, start, end) + db.commit() + return response @router.get("/{actor}/stats", response_model=ContributionStatsResponse) @@ -55,12 +59,16 @@ def get_contribution_stats( year: int | None = Query(default=None, ge=1970, le=3000), from_date: str | None = Query(default=None, alias="from"), to_date: str | None = Query(default=None, alias="to"), + poller: PollerService = Depends(get_poller), db: Session = Depends(get_db), actor_identity_resolver: ActorIdentityResolver = Depends(get_actor_identity_resolver), ) -> ContributionStatsResponse: start, end = _resolve_range(year, from_date, to_date) canonical_actor = actor_identity_resolver.canonicalize(actor, db=db) - return ContributionAggregator().build_stats(db, canonical_actor, start, end) + poller.track_actor_request(db, canonical_actor) + response = ContributionAggregator().build_stats(db, canonical_actor, start, end) + db.commit() + return response @router.post("/poll", response_model=PollResponse, dependencies=[Depends(require_api_key)]) -- cgit v1.2.3