server/test/helper.js   A
last analyzed

Complexity

Total Complexity 19
Complexity/F 3.8

Size

Lines of Code 173
Function Count 5

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 19
eloc 124
mnd 14
bc 14
fnc 5
dl 0
loc 173
rs 10
bpm 2.8
cpm 3.8
noi 0
c 0
b 0
f 0
1
import { db } from "../src/models/db.js";
2
import { trips } from './dummy-data/trips.js'
3
import { zones } from './dummy-data/zones.js'
4
import { usersExt } from './dummy-data/users_ext.js'
5
import { bikes } from './dummy-data/bikes.js'
6
7
8
9
export const insertData = async function () {
10
    const conn = await db.pool.getConnection();
11
12
    let sql = `DELETE FROM trip;
13
        DELETE FROM payment;
14
        DELETE FROM user_card;
15
        DELETE FROM user;
16
        DELETE FROM bike;
17
        `;
18
19
    await conn.query(sql);
20
21
    const users = [];
22
    const cards = [];
23
    let allPaym = [];
24
    let allBikes = [];
25
    let allTrips = [...trips];
26
    try {
27
        await conn.beginTransaction();
28
29
        for (const bike of bikes) {
30
            const oldBikeId = bike.id;
31
            await conn.query(`INSERT INTO bike(city_id, status_id, charge_perc, coords, active)
32
            VALUES(?, ?, ?, ?, ?);`, [
33
                bike.city_id,
34
                bike.status_id,
35
                bike.charge_perc,
36
                bike.coords,
37
                bike.active
38
            ]);
39
            const id = await conn.query('SELECT MAX(id) AS last_id FROM bike;');
40
            bike.id = id[0].last_id;
41
            allBikes.push(bike);
42
            allTrips = allTrips.map((trip) => {
43
                if (trip.bike_id === oldBikeId) {
44
                    trip.bike_id = bike.id;
45
                }
46
                return trip;
47
            });
48
        }
49
50
        for (const elem of usersExt) {
51
            const user = elem.user;
52
            const oldUserId = user.id;
53
            const card = elem.card;
54
            let payments = elem.payments;
55
56
            await conn.query(`INSERT INTO user(email, balance, active)
57
             VALUES(?, ?, ?);`, [
58
                // elem.id,
59
                user.email,
60
                user.balance,
61
                user.active,
62
                user.amount
63
            ]);
64
            const id = await conn.query('SELECT MAX(id) AS last_id FROM user;');
65
            user.id = id[0].last_id;
66
            await conn.query(`INSERT INTO user_card
67
             VALUES(?, ?, ?);`, [
68
                user.id,
69
                card.card_nr,
70
                card.card_type
71
            ]);
72
            payments = payments.map((payment) => {
73
                payment.user_id = user.id;
74
                return payment;
75
            });
76
            users.push(user);
77
            cards.push(card);
78
            allPaym = [...allPaym, ...payments];
79
            allTrips = allTrips.map((trip) => {
80
                if (trip.user_id === oldUserId) {
81
                    trip.user_id = user.id
82
                }
83
                return trip;
84
            })
85
        }
86
87
        for (const elem of allPaym) {
88
            await conn.query(`INSERT INTO payment(user_id, date, ref, amount)
89
             VALUES(?, ?, ?, ?);`, [
90
                // elem.id,
91
                elem.user_id,
92
                elem.date,
93
                elem.ref,
94
                elem.amount
95
            ]);
96
            const id = await conn.query('SELECT MAX(id) AS last_id FROM payment;');
97
            elem.id = id[0].last_id;
98
        }
99
100
        for (const elem of allTrips) {
101
            await conn.query(`INSERT INTO trip(user_id, bike_id, start_time, end_time, start_pos, end_pos, start_cost, var_cost, park_cost)
102
             VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?);`, [
103
                elem.user_id,
104
                elem.bike_id,
105
                elem.start_time,
106
                elem.end_time,
107
                JSON.stringify(elem.start_pos),
108
                JSON.stringify(elem.end_pos),
109
                elem.start_cost,
110
                elem.var_cost,
111
                elem.park_cost
112
            ]);
113
            const id = await conn.query('SELECT MAX(id) AS last_id FROM trip');
114
            elem.id = id[0].last_id;
115
        }
116
        await conn.commit();
117
    } catch (err) {
118
        if (conn) {
119
            await conn.rollback();
120
        }
121
        throw err;
122
    } finally {
123
        if (conn) {
124
            await conn.end();
125
        }
126
    }
127
128
    return {
129
        users: users,
130
        cards: cards,
131
        payments: allPaym,
132
        bikes: allBikes,
133
        trips: allTrips
134
    };
135
}
136
137
export const insertZones = async function () {
138
    const conn = await db.pool.getConnection();
139
    try {
140
        await conn.beginTransaction();
141
        const descr = {
142
            1: "parking",
143
            2: "charging",
144
            3: "forbidden"
145
        }
146
        for (const zone of zones) {
147
            await conn.query(`INSERT INTO zone_loc(zone_id, city_id, date_from, geometry)
148
             VALUES(?, ?, ?, ?);`, [
149
                zone.zone_id, zone.city_id, zone.date_from, JSON.stringify(zone.geometry)
150
            ]);
151
            const id = await conn.query('SELECT MAX(id) AS last_id FROM zone_loc;');
152
            zone.id = id[0].last_id;
153
            zone.descr = descr[zone.zone_id];
154
            delete zone.date_from;
155
            if (zone.zone_id === 3) {
156
                zone.speed_limit = 0;
157
            }
158
        }
159
160
        await conn.commit();
161
162
    } catch (err) {
163
        if (conn) {
164
            await conn.rollback();
165
        }
166
        throw err;
167
    } finally {
168
        if (conn) {
169
            await conn.end();
170
        }
171
    }
172
    return zones;
173
}
174