• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

hasadna / open-bus-backend / 16179892870

09 Jul 2025 08:49PM UTC coverage: 86.391%. First build
16179892870

Pull #7

github

web-flow
Merge 425635d1e into 8486e82dd
Pull Request #7: feat: Update version 2

198 of 242 branches covered (81.82%)

Branch coverage included in aggregate %.

805 of 919 new or added lines in 8 files covered. (87.6%)

805 of 919 relevant lines covered (87.6%)

5.8 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

61.9
/src/controllers/gov.controller.js
1
import { govRequest } from '../utils/govRequest.js';
1✔
2

1✔
3
/**
1✔
4
 * Formats a Date object into a string in the format 'DD/MM/YYYY'.
1✔
5
 *
1✔
6
 * @param {Date} date - The Date object to format.
1✔
7
 */
1✔
8
function formatDate(date) {
3✔
9
  const day = String(date.getDate()).padStart(2, '0');
3✔
10
  const month = String(date.getMonth() + 1).padStart(2, '0');
3✔
11
  const year = date.getFullYear();
3✔
12

3✔
13
  return `${day}/${month}/${year}`;
3✔
14
}
3✔
15

1✔
16
/**
1✔
17
 * Get bus lines by station handler
1✔
18
 * @param {import('fastify').FastifyRequest} request
1✔
19
 * @param {import('fastify').FastifyReply} reply
1✔
20
 */
1✔
21
export async function getLinesByStation(request, reply) {
1✔
22
  try {
1✔
23
    const { EventDate, OperatorId, StationId } = request.body;
1✔
24
    const date = formatDate(new Date(EventDate));
1✔
25
    request.log.info('Getting lines by station', { EventDate: date, OperatorId, StationId });
1✔
26
    const response = await govRequest.post('/trafficLicensing/GetLines', { EventDate: date, OperatorId, StationId });
1✔
27
    return reply.status(200).send({ data: response.data.Data, success: true });
1✔
28
  } catch (error) {
1!
NEW
29
    request.log.error('Error getting lines by station', { body: request.body, error: error.message });
×
NEW
30
    if (error.response) {
×
NEW
31
      return reply.status(500).send({
×
NEW
32
        error: 'Government API error',
×
NEW
33
        message: `Status: ${error.response.status} - ${error.response.statusText}`,
×
NEW
34
      });
×
NEW
35
    }
×
NEW
36
    return reply.status(500).send({ error: 'Internal server error', message: 'Failed to retrieve lines by station' });
×
NEW
37
  }
×
38
}
1✔
39

1✔
40
/**
1✔
41
 * Get stations by line handler
1✔
42
 * @param {import('fastify').FastifyRequest} request
1✔
43
 * @param {import('fastify').FastifyReply} reply
1✔
44
 */
1✔
45
export async function getStationByLine(request, reply) {
1✔
46
  try {
1✔
47
    const { EventDate, OperatorId, OfficelineId, Directions } = request.body;
1✔
48
    const date = formatDate(new Date(EventDate));
1✔
49
    request.log.info('Getting stations by line', { EventDate: date, OfficelineId, OperatorId, Directions });
1✔
50
    const response = await govRequest.post('/trafficLicensing/GetStationToLine', {
1✔
51
      EventDate: date,
1✔
52
      OperatorId,
1✔
53
      OfficelineId,
1✔
54
      Directions: [Directions],
1✔
55
    });
1✔
56
    return reply.status(200).send({ data: response.data.Data, success: true });
1✔
57
  } catch (error) {
1!
NEW
58
    request.log.error('Error getting stations by line', { body: request.body, error: error.message });
×
NEW
59
    if (error.response) {
×
NEW
60
      return reply.status(500).send({
×
NEW
61
        error: 'Government API error',
×
NEW
62
        message: `Status: ${error.response.status} - ${error.response.statusText}`,
×
NEW
63
      });
×
NEW
64
    }
×
NEW
65
    return reply.status(500).send({ error: 'Internal server error', message: 'Failed to retrieve stations by line' });
×
NEW
66
  }
×
67
}
1✔
68

1✔
69
/**
1✔
70
 * Get subjects (vehicle types) handler
1✔
71
 * @param {import('fastify').FastifyRequest} request
1✔
72
 * @param {import('fastify').FastifyReply} reply
1✔
73
 */
1✔
74
export async function getSubjects(request, reply) {
1✔
75
  try {
1✔
76
    request.log.info('Getting subjects');
1✔
77
    const response = await govRequest.post('/ListProvider/GetList', { listName: 'subject_type_vehicles' });
1✔
78
    return reply.status(200).send({ data: response.data.Data.List, success: true });
1✔
79
  } catch (error) {
1!
NEW
80
    request.log.error('Error getting subjects', { body: request.body, error: error.message });
×
NEW
81
    if (error.response) {
×
NEW
82
      return reply.status(500).send({
×
NEW
83
        error: 'Government API error',
×
NEW
84
        message: `Status: ${error.response.status} - ${error.response.statusText}`,
×
NEW
85
      });
×
NEW
86
    }
×
NEW
87
    return reply.status(500).send({ error: 'Internal server error', message: 'Failed to retrieve subjects' });
×
NEW
88
  }
×
89
}
1✔
90

1✔
91
/**
1✔
92
 * Get train stations handler
1✔
93
 * @param {import('fastify').FastifyRequest} request
1✔
94
 * @param {import('fastify').FastifyReply} reply
1✔
95
 */
1✔
96
export async function getTrainStations(request, reply) {
1✔
97
  try {
1✔
98
    const { StationTypeId } = request.body;
1✔
99
    request.log.info('Getting train stations', { StationTypeId });
1✔
100
    const response = await govRequest.post('/trafficLicensing/GetTrainStations', { StationTypeId });
1✔
101
    return reply.status(200).send({ data: response.data.Data, success: true });
1✔
102
  } catch (error) {
1!
NEW
103
    request.log.error('Error getting train stations', { body: request.body, error: error.message });
×
NEW
104
    if (error.response) {
×
NEW
105
      return reply.status(500).send({
×
NEW
106
        error: 'Government API error',
×
NEW
107
        message: `Status: ${error.response.status} - ${error.response.statusText}`,
×
NEW
108
      });
×
NEW
109
    }
×
NEW
110
    return reply.status(500).send({ error: 'Internal server error', message: 'Failed to retrieve train stations' });
×
NEW
111
  }
×
112
}
1✔
113

1✔
114
/**
1✔
115
 * Get pniya (vehicles type) handler
1✔
116
 * @param {import('fastify').FastifyRequest} request
1✔
117
 * @param {import('fastify').FastifyReply} reply
1✔
118
 */
1✔
119
export async function getPniya(request, reply) {
1✔
120
  try {
1✔
121
    request.log.info('Getting pniya');
1✔
122
    const response = await govRequest.post('/ListProvider/GetList', { listName: 'pniya' });
1✔
123
    return reply.status(200).send({ data: response.data.Data.List, success: true });
1✔
124
  } catch (error) {
1!
NEW
125
    request.log.error('Error getting pniya', { body: request.body, error: error.message });
×
NEW
126
    if (error.response) {
×
NEW
127
      return reply.status(500).send({
×
NEW
128
        error: 'Government API error',
×
NEW
129
        message: `Status: ${error.response.status} - ${error.response.statusText}`,
×
NEW
130
      });
×
NEW
131
    }
×
NEW
132
    return reply.status(500).send({ error: 'Internal server error', message: 'Failed to retrieve pniya' });
×
NEW
133
  }
×
134
}
1✔
135

1✔
136
/**
1✔
137
 * Get not real numbers handler
1✔
138
 * @param {import('fastify').FastifyRequest} request
1✔
139
 * @param {import('fastify').FastifyReply} reply
1✔
140
 */
1✔
141
export async function getNotRealNumbers(request, reply) {
1✔
142
  try {
1✔
143
    request.log.info('Getting not real numbers');
1✔
144
    const response = await govRequest.post('/ListProvider/GetList', { listName: 'notrealnumbers' });
1✔
145
    return reply.status(200).send({ data: response.data.Data.List, success: true });
1✔
146
  } catch (error) {
1!
NEW
147
    request.log.error('Error getting not real numbers', { body: request.body, error: error.message });
×
NEW
148
    if (error.response) {
×
NEW
149
      return reply.status(500).send({
×
NEW
150
        error: 'Government API error',
×
NEW
151
        message: `Status: ${error.response.status} - ${error.response.statusText}`,
×
NEW
152
      });
×
NEW
153
    }
×
NEW
154
    return reply.status(500).send({ error: 'Internal server error', message: 'Failed to retrieve not real numbers' });
×
NEW
155
  }
×
156
}
1✔
157

1✔
158
/**
1✔
159
 * Get lines by line ID handler
1✔
160
 * @param {import('fastify').FastifyRequest} request
1✔
161
 * @param {import('fastify').FastifyReply} reply
1✔
162
 */
1✔
163
export async function getLinesByLine(request, reply) {
1✔
164
  try {
1✔
165
    const { EventDate, OperatorId, OperatorLineId } = request.body;
1✔
166
    const date = formatDate(new Date(EventDate));
1✔
167
    request.log.info('Getting lines by line ID', { EventDate: date, OperatorId, OperatorLineId });
1✔
168
    const response = await govRequest.post('/trafficLicensing/GetLines', { EventDate: date, OperatorId, OperatorLineId });
1✔
169
    return reply.status(200).send({ data: response.data.Data, success: true });
1✔
170
  } catch (error) {
1!
NEW
171
    request.log.error('Error getting lines by line ID', { body: request.body, error: error.message });
×
NEW
172
    if (error.response) {
×
NEW
173
      return reply.status(500).send({
×
NEW
174
        error: 'Government API error',
×
NEW
175
        message: `Status: ${error.response.status} - ${error.response.statusText}`,
×
NEW
176
      });
×
NEW
177
    }
×
NEW
178
    return reply.status(500).send({ error: 'Internal server error', message: 'Failed to retrieve lines by line ID' });
×
NEW
179
  }
×
180
}
1✔
181

1✔
182
/**
1✔
183
 * Get cities handler
1✔
184
 * @param {import('fastify').FastifyRequest} request
1✔
185
 * @param {import('fastify').FastifyReply} reply
1✔
186
 */
1✔
187
export async function getCities(request, reply) {
1✔
188
  try {
1✔
189
    request.log.info('Getting cities');
1✔
190
    const response = await govRequest.post('/trafficLicensing/GetCities');
1✔
191
    return reply.status(200).send({ data: response.data.Data, success: true });
1✔
192
  } catch (error) {
1!
NEW
193
    request.log.error('Error getting cities', { error: error.message });
×
NEW
194

×
NEW
195
    if (error.response) {
×
NEW
196
      return reply.status(500).send({
×
NEW
197
        error: 'Government API error',
×
NEW
198
        message: `Status: ${error.response.status} - ${error.response.statusText}`,
×
NEW
199
      });
×
NEW
200
    }
×
NEW
201

×
NEW
202
    return reply.status(500).send({ error: 'Internal server error', message: 'Failed to retrieve cities' });
×
NEW
203
  }
×
204
}
1✔
205

1✔
206
/**
1✔
207
 * Get operators handler
1✔
208
 * @param {import('fastify').FastifyRequest} request
1✔
209
 * @param {import('fastify').FastifyReply} reply
1✔
210
 */
1✔
211
export async function getOperators(request, reply) {
1✔
212
  try {
1✔
213
    request.log.info('Getting operators');
1✔
214
    const response = await govRequest.post('/trafficLicensing/GetOperators');
1✔
215
    return reply.status(200).send({ data: response.data.Data, success: true });
1✔
216
  } catch (error) {
1!
NEW
217
    request.log.error('Error getting operators', { error: error.message });
×
NEW
218

×
NEW
219
    if (error.response) {
×
NEW
220
      return reply.status(500).send({
×
NEW
221
        error: 'Government API error',
×
NEW
222
        message: `Status: ${error.response.status} - ${error.response.statusText}`,
×
NEW
223
      });
×
NEW
224
    }
×
NEW
225

×
NEW
226
    return reply.status(500).send({ error: 'Internal server error', message: 'Failed to retrieve cities' });
×
NEW
227
  }
×
228
}
1✔
229

1✔
230
/**
1✔
231
 * Get current time handler
1✔
232
 * @param {import('fastify').FastifyRequest} request
1✔
233
 * @param {import('fastify').FastifyReply} reply
1✔
234
 */
1✔
235
export async function getTime(request, reply) {
1✔
236
  try {
1✔
237
    request.log.info('Getting current time');
1✔
238
    const timestamp = Date.now();
1✔
239
    const response = await govRequest.get(`/TSA/GetTime?_=${timestamp}`);
1✔
240
    return reply.status(200).send({ data: { serverTime: response.data }, success: true });
1✔
241
  } catch (error) {
1!
NEW
242
    request.log.error('Error getting current time', { error: error.message });
×
NEW
243
    if (error.response) {
×
NEW
244
      return reply.status(500).send({
×
NEW
245
        error: 'Government API error',
×
NEW
246
        message: `Status: ${error.response.status} - ${error.response.statusText}`,
×
NEW
247
      });
×
NEW
248
    }
×
NEW
249
    return reply.status(500).send({ error: 'Internal server error', message: 'Failed to retrieve current time' });
×
NEW
250
  }
×
251
}
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc