Passed
Pull Request — development (#104)
by Karl
11:41
created

backend/src/database/seeds/travel-data.seed.ts   A

Complexity

Total Complexity 5
Complexity/F 5

Size

Lines of Code 98
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 97.14%

Importance

Changes 0
Metric Value
eloc 73
dl 0
loc 98
ccs 34
cts 35
cp 0.9714
rs 10
c 0
b 0
f 0
wmc 5
mnd 4
bc 4
fnc 1
bpm 4
cpm 5
noi 0

1 Function

Rating   Name   Duplication   Size   Complexity  
B TravelDataSeeder.run 0 79 5
1
import { DataSource } from 'typeorm';
2 7
import { Travel } from '../../travel/entities/travel.entity';
3 7
import { Bicycle } from '../../bicycles/entities/bicycle.entity';
4 7
import { User } from '../../users/entities/user.entity';
5 7
import { Zone } from 'src/zones/entities/zone';
6 7
import { TravelService } from '../../travel/travel.service';
7 7
import { BicyclesService } from '../../bicycles/bicycles.service';
8 7
import { ZonesService } from '../../zones/zones.service';
9 7
import { City } from 'src/cities/entities/city.entity';
10
11 7
export default class TravelDataSeeder {
12
  async run(connection: DataSource): Promise<void> {
13 9
    if (true) {
14
      //process.env.NODE_ENV !== 'production') {
15 9
      const travelRepository = connection.getRepository(Travel);
16 9
      const bikeRepository = connection.getRepository(Bicycle);
17 9
      const userRepository = connection.getRepository(User);
18 9
      const zoneRepository = connection.getRepository(Zone);
19 9
      const cityRepository = connection.getRepository(City);
20
21 9
      const bicycleService = new BicyclesService(bikeRepository, cityRepository);
22 9
      const zonesService = new ZonesService(zoneRepository, bicycleService);
23 9
      const travelService = new TravelService(travelRepository, bicycleService, zonesService);
24
25 9
      const bikes = await bikeRepository.find({ take: 10 });
26 9
      const users = await userRepository.find({ take: 4 });
27
28 9
      let userIndex = 0;
29
30 9
      try {
31 9
        for (const bike of bikes) {
32 24
          await travelService.startRentingBike(bike.id, users[userIndex].githubId);
33 15
          console.log(`Created ongoing travel for bike ${bike.id}`);
34 15
          userIndex = (userIndex + 1) % users.length;
35
        }
36
      } catch (error) {
37 9
        console.error('Error creating ongoing travels:', error);
38
      }
39
40
      // Fetch references for existing bikes and customers
41
42
      // Note that bike reference in seed is made by 'batteryLevel' for now
43 9
      const bike1 = await bikeRepository.findOneBy({ batteryLevel: 95 });
44 9
      const bike2 = await bikeRepository.findOneBy({ batteryLevel: 88 });
45 9
      const user1 = await userRepository.findOneBy({ githubId: '149484382' });
46 9
      const user2 = await userRepository.findOneBy({ githubId: '13668660' });
47
48 9
      if (!bike1 || !bike2 || !user1 || !user2) {
49
        throw new Error(
50
          'Bikes or Users not found. Make sure they exist before seeding Travel data.',
51
        );
52
      }
53
54
      // Create travel data
55 9
      const travels = travelRepository.create([
56
        {
57
          bike: bike1,
58
          startTime: new Date('2024-01-01T08:00:00.000Z'),
59
          stopTime: new Date('2024-01-01T09:00:00.000Z'),
60
          latStart: 59.3293,
61
          longStart: 18.0686,
62
          latStop: 59.3328,
63
          longStop: 18.0649,
64
          customer: user1,
65
          cost: 50.0,
66
          startZoneType: 'Free',
67
          endZoneType: 'Parking',
68
        },
69
        {
70
          bike: bike2,
71
          startTime: new Date('2024-01-02T10:00:00.000Z'),
72
          stopTime: new Date('2024-01-02T11:00:00.000Z'),
73
          latStart: 59.3315,
74
          longStart: 18.07,
75
          latStop: 59.3299,
76
          longStop: 18.071,
77
          customer: user2,
78
          cost: 75.0,
79
          startZoneType: 'Parking',
80
          endZoneType: 'Free',
81
        },
82
      ]);
83
84
      // console.log('Bike1:', bike1);
85
      // console.log('Bike2:', bike2);
86
      // console.log('User1:', user1);
87
      // console.log('User2:', user2);
88
89
      // try {
90 9
      await travelRepository.save(travels);
91
      //     console.log('Travel data saved successfully!');
92
      // } catch (error) {
93
      //     console.error('Error saving travels:', error);
94
      // }
95
    }
96
  }
97
}
98