Passed
Push — main ( 55cb12...5d5954 )
by Martin
01:05 queued 16s
created

server/src/models/bike.js   A

Complexity

Total Complexity 14
Complexity/F 1

Size

Lines of Code 136
Function Count 14

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 14
eloc 49
mnd 0
bc 0
fnc 14
dl 0
loc 136
rs 10
bpm 0
cpm 1
noi 0
c 0
b 0
f 0
1
import { db } from "./db.js"
2
3
4
const bike = {
5
    adjTypes(bikeObj) {
6
        const newObj = {
7
            id: bikeObj.id,
8
            city_id: bikeObj.city_id,
9
            status_id: bikeObj.status_id,
10
            status_descr: bikeObj.status_descr,
11
            charge_perc: parseFloat(bikeObj.charge_perc),
12
            coords: JSON.parse(bikeObj.coords),
13
            active: bikeObj.active === 1,
14
        };
15
        return newObj;
16
    },
17
18
    /**
19
     * 
20
     * @param {Int} bikeId 
21
     * @returns {Object}
22
     */
23
    getOne: async function(bikeId) {
24
        const result = await db.queryWithArgs(`CALL single_bike(?);`, [bikeId]);
25
        return this.adjTypes(result[0][0]);
26
    },
27
28
    /**
29
     * Returns all bikes, including
30
     * inactive and unavailable ones.
31
     * @returns {Array}
32
     */
33
    getAll: async function() {
34
        const result = await db.queryNoArgs(`CALL all_bikes();`);
35
        return result[0].map((bikeObj) => {
36
            return this.adjTypes(bikeObj);
37
        });
38
    },
39
40
    /**
41
     * Returns only available bikes,
42
     * to be used for user routes
43
     * @param {String} cityId
44
     * @returns {Array}
45
     */
46
        getAvail: async function(cityId) {
47
            const result = await db.queryWithArgs(`CALL available_bikes(?);`, [cityId]);
48
            return result[0].map((bikeObj) => {
49
                return this.adjTypes(bikeObj);
50
        });
51
    },
52
53
    /**
54
     * Returns only available bikes,
55
     * to be used for user routes
56
     * @param {String} cityId
57
     * @returns {Array}
58
     */
59
    getAllInCity: async function(cityId) {
60
            const result = await db.queryWithArgs(`CALL bikes_in_city(?);`, [cityId]);
61
            return result[0].map((bikeObj) => {
62
                return this.adjTypes(bikeObj);
63
        });
64
    },
65
66
    /**
67
     * 
68
     * @param {Int} bikeId 
69
     * @returns {Object}
70
     */
71
    activate: async function(bikeId) {
72
        const result = await db.queryWithArgs(`CALL activate(?);`, [bikeId]);
73
        return this.adjTypes(result[0][0]);
74
    },
75
76
    /**
77
     * 
78
     * @param {Int} bikeId 
79
     * @returns {Object}
80
     */
81
    deactivate: async function(bikeId) {
82
        const result = await db.queryWithArgs(`CALL deactivate(?);`, [bikeId]);
83
        return this.adjTypes(result[0][0]);
84
    },
85
86
    /**
87
     * 
88
     * @returns {Array}
89
     */
90
    statuses: async function() {
91
        const result = await db.queryNoArgs(`CALL bike_statuses();`);
92
        return result[0];
93
    },
94
95
    /**
96
     * 
97
     * @param {Int} bikeId 
98
     * @param {Int} statusId
99
     * @returns {Object}
100
     */
101
    updStatus: async function(bikeId, statusId) {
102
        const result = await db.queryWithArgs(`CALL upd_bike_status(?, ?);`, [bikeId, statusId]);
103
        return this.adjTypes(result[0][0]);
104
    },
105
106
    /**
107
     * 
108
     * @param {Int} bikeId 
109
     * @param {String} cityId
110
     * @returns {Object}
111
     */
112
    updCity: async function(bikeId, cityId) {
113
        const result = await db.queryWithArgs(`CALL update_bike_city(?, ?);`, [bikeId, cityId]);
114
        return this.adjTypes(result[0][0]);
115
    },
116
117
    /**
118
     * 
119
     * @param {Int} bikeId 
120
     * @param {Int} bikeStatus 
121
     * @param {Float} chargePerc 
122
     * @param {Array} bikeCoords 
123
     */
124
    updateBike: async function(
125
        bikeId,
126
        bikeStatus,
127
        chargePerc,
128
        bikeCoords
129
    ) {
130
        await db.queryWithArgs(`CALL update_bike(?, ?, ?, ?);`, [bikeId, bikeStatus, chargePerc, JSON.stringify(bikeCoords)]);
131
    }
132
133
134
}
135
136
export default bike;