generateTestData function

Future<void> generateTestData(
  1. FirestoreApp apiProvider
)

Implementation

Future<void> generateTestData(FirestoreApp apiProvider) async {
  final List<String> venues = [
    'Venue A',
    'Venue B',
    'Venue C',
    'Venue D',
    'Venue E'
  ];
  final List<List<String>> teams = List.generate(
      30, (index) => ['Team ${index * 2 + 1}', 'Team ${index * 2 + 2}']);
  final List<String> eventNames = [
    'Goal',
    'Red Card',
    'Yellow Card',
    'Injury',
    'Timeout'
  ];

  print('Starting test data generation...');

  for (int i = 1; i < 5; i++) {
    String competitionName = 'Competition ${i + 1}';
    String competitionId = 'comp_${i + 1}';

    print('Creating competition: $competitionName with ID: $competitionId');
    await apiProvider.performSetOperation({
      'path': 'sports/soccer/competitions/$competitionId',
      'data': {'name': competitionName, 'id': competitionId},
    });

    for (int j = 0; j < 10; j++) {
      List<String> matchTeams = teams[Random().nextInt(teams.length)];
      String matchVenue = venues[Random().nextInt(venues.length)];
      DateTime matchTime =
          DateTime.now().add(Duration(days: Random().nextInt(365)));

      DocumentReference matchRef = await apiProvider.performAddOperation({
        'path': 'sports/soccer/competitions/$competitionId/matches',
        'data': {
          'teams': matchTeams,
          'venue': matchVenue,
          'matchTime': matchTime,
        },
      });

      int eventsCount =
          Random().nextInt(1) + 10; // Generating between 100 and 1000 events
      for (int k = 0; k < eventsCount; k++) {
        String eventName = eventNames[Random().nextInt(eventNames.length)];
        String teamInvolved = matchTeams[Random().nextInt(matchTeams.length)];
        Map<String, dynamic> payload = {
          "time": "${Random().nextInt(90) + 1}",
          "team": teamInvolved,
          "player": "Player ${Random().nextInt(22) + 1}",
          "eventType": eventName,
          "details": jsonEncode({
            "assist": "Player ${Random().nextInt(22) + 1}",
            "partOfPlay": "Open Play",
            "distance": "${Random().nextInt(30) + 5} meters",
            "goalType": "Right-footed shot"
          }),
        };

        await apiProvider.performAddOperation({
          'path':
              'sports/soccer/competitions/$competitionId/matches/${matchRef.id}/events',
          'data': {
            'name': eventName,
            'payload': payload,
          },
        });
      }

      // Print progress every 100 matches
      print(
          'Match $j created for competition: $competitionName with ${eventsCount} events');
    }
    print('Finished creating matches for competition: $competitionName');
  }
  print('Test data generation complete.');
}