Passed
Push — main ( 41db93...062dcb )
by Julia
02:58
created

server/test/helper.js   A

Complexity

Total Complexity 19
Complexity/F 3.8

Size

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