-
-
Notifications
You must be signed in to change notification settings - Fork 564
Open
Labels
dartPull requests that update Dart codePull requests that update Dart codedependenciesPull requests that update a dependency filePull requests that update a dependency filegood first issueGood for newcomersGood for newcomersno-issue-activityNo issue activityNo issue activityrefactorRefactor the code to improve its qualityRefactor the code to improve its qualitysecuritySecurity fixSecurity fixtestTesting applicationTesting applicationunapprovedUnapproved, needs to be triagedUnapproved, needs to be triaged
Description
Problem Statement
No retry/backoff for failed mutations; add queue.
Files to Modify / Create (static targets)
- lib/services/retry_queue.dart
- lib/services/**
- test/unit/services/retry_queue_test.dart
Files to Modify / Create (detected for this PR)
-
lib/view_model/after_auth_view_models/event_view_models/edit_event_view_model.dart -
lib/view_model/after_auth_view_models/event_view_models/event_info_view_model.dart -
lib/view_model/after_auth_view_models/event_view_models/manage_volunteer_group_view_model.dart -
lib/view_model/after_auth_view_models/feed_view_models/organization_feed_view_model.dart -
lib/view_model/after_auth_view_models/fund_view_model/fund_view_model.dart -
lib/view_model/connectivity_view_model.dart -
lib/view_model/pre_auth_view_models/login_view_model.dart -
lib/view_model/pre_auth_view_models/select_organization_view_model.dart -
lib/view_model/pre_auth_view_models/set_url_view_model.dart -
lib/view_model/pre_auth_view_models/signup_details_view_model.dart
Proposed Solution
Implement within MVVM + Provider + GetIt; avoid large rewrites. Keep changes scoped to the listed files.
Implementation Approach
- Update only the files listed above (<= 10 in this PR).
- Add/adjust tests accordingly; keep CI green.
- If more files are needed, open follow-up PRs.
Acceptance Criteria
- All listed files updated
- Tests added/updated (>= 80% for changed units)
- CI passing
- Docs updated if applicable
Starter Code
Starter Code
// lib/services/retry_queue.dart
import 'dart:async';
typedef Task<T>=Future<T> Function();
class RetryQueue{
static final Map<String,Task<dynamic>> _q={};
static Future<T> enqueue<T>(Task<T> task,{required String key,Duration initial=const Duration(milliseconds:300)}) async{
_q[key]=task; var delay=initial;
for(var i=0;i<3;i++){ try{ final r=await task(); _q.remove(key); return r; }catch(_){ await Future.delayed(delay); delay*=2; } }
rethrow;
}
}Dependencies
- Blocked by: MobileFix - Resilience: Background retry policy for failed mutations (Part 3 of 6) #3205, MobileFix - Architecture: Standardize a Result/Error model across services (Part 6 of 6) #3183
- Blocks: MobileFix - Resilience: Background retry policy for failed mutations (Part 5 of 6) #3207
Phase
P2 - High Impact
Metadata
Metadata
Assignees
Labels
dartPull requests that update Dart codePull requests that update Dart codedependenciesPull requests that update a dependency filePull requests that update a dependency filegood first issueGood for newcomersGood for newcomersno-issue-activityNo issue activityNo issue activityrefactorRefactor the code to improve its qualityRefactor the code to improve its qualitysecuritySecurity fixSecurity fixtestTesting applicationTesting applicationunapprovedUnapproved, needs to be triagedUnapproved, needs to be triaged