Skip to content

Commit bb92827

Browse files
Story/#333 pakketgegevens (#20)
* personeel-service toegevoegd * start error handling. persoon toegevoegd aan GetPackage(id) * sender is receiverid bugfix * collectionpoint ophalen bij GetPackage{id} * 400 - 404 errors allowed. getpackages haalt nu ook locatie en ontvanger op * merge fix
1 parent 697f01f commit bb92827

File tree

14 files changed

+251
-121
lines changed

14 files changed

+251
-121
lines changed

.github/workflow/build.yml

Lines changed: 0 additions & 36 deletions
This file was deleted.

.github/workflow/docker-publish.yml

Lines changed: 0 additions & 37 deletions
This file was deleted.

Controllers/PackageController.cs

Lines changed: 61 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
using Microsoft.AspNetCore.Http;
1212
using api_gateway.Helper;
1313
using Newtonsoft.Json;
14+
using System.Net;
15+
using api_gateway.Models.ServiceModels.Location;
1416

1517
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
1618

@@ -42,22 +44,39 @@ public class PackageController : ControllerBase
4244
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
4345
public async Task<ActionResult<ICollection<PackageResponseModel>>> Get()
4446
{
45-
IFlurlResponse response = await $"{Constants.PackageApiUrl}/api/packages".GetAsync();
47+
IFlurlResponse packageResponse = await $"{Constants.PackageApiUrl}/api/packages".GetAsync();
48+
var errPackageResponse = packageResponse.GetResponse();
4649

47-
if(response.StatusCode >= 500)
50+
if (errPackageResponse.StatusCode != HttpStatusCode.OK)
4851
{
49-
return StatusCode(500);
52+
return new ObjectResult(errPackageResponse.Message) { StatusCode = (int)errPackageResponse.StatusCode };
5053
}
51-
else if(response.StatusCode >= 400)
54+
55+
IFlurlResponse locationResponse = await $"{Constants.LocationApiUrl}/api/room".GetAsync();
56+
var errLocationResponse = locationResponse.GetResponse();
57+
58+
if (errLocationResponse.StatusCode != HttpStatusCode.OK)
5259
{
53-
return StatusCode(400);
60+
return new ObjectResult(errLocationResponse.Message) { StatusCode = (int)errLocationResponse.StatusCode };
5461
}
55-
else
62+
63+
IFlurlResponse personResponse = await $"{Constants.PersonApiUrl}/api/persons".GetAsync();
64+
var errPersonResponse = personResponse.GetResponse();
65+
66+
if (errPersonResponse.StatusCode != HttpStatusCode.OK)
5667
{
57-
ICollection<PackageServiceModel> serviceModels = await response.GetJsonAsync<ICollection<PackageServiceModel>>();
58-
ICollection<PackageResponseModel> responseModels = ServiceToResponseModelConverter.ConvertPackages(serviceModels);
59-
return Ok(responseModels);
68+
return new ObjectResult(errPersonResponse.Message) { StatusCode = (int)errPersonResponse.StatusCode };
6069
}
70+
71+
ICollection<PackageServiceModel> allPackageServiceModels = await packageResponse.GetJsonAsync<ICollection<PackageServiceModel>>();
72+
ICollection<Room> allRooms = await locationResponse.GetJsonAsync<ICollection<Room>>();
73+
ICollection<PersonServiceModel> allPersonServiceModels = await personResponse.GetJsonAsync<ICollection<PersonServiceModel>>();
74+
75+
ICollection<PackageResponseModel> allPackages = ServiceToResponseModelConverter.ConvertPackages(allPackageServiceModels, allPersonServiceModels, allRooms);
76+
77+
78+
return Ok(allPackages);
79+
6180
}
6281

6382

@@ -77,26 +96,37 @@ public async Task<ActionResult<ICollection<PackageResponseModel>>> Get()
7796
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
7897
public async Task<ActionResult<PackageResponseModel>> GetById(Guid id)
7998
{
80-
IFlurlResponse response = await $"{ Constants.PackageApiUrl }/api/packages/{id}".GetAsync();
99+
IFlurlResponse packageResponse = await $"{ Constants.PackageApiUrl }/api/packages/{id}".GetAsync();
81100

82-
if(response.StatusCode == 404)
83-
{
84-
return NotFound();
85-
}
86-
else if(response.StatusCode >= 400)
101+
var errPackageResponse = packageResponse.GetResponse();
102+
103+
if (errPackageResponse.StatusCode != HttpStatusCode.OK)
87104
{
88-
return StatusCode(400);
105+
return new ObjectResult(errPackageResponse.Message) { StatusCode = (int)errPackageResponse.StatusCode };
89106
}
90-
else if(response.StatusCode >= 500)
107+
PackageServiceModel packageModel = await packageResponse.GetJsonAsync<PackageServiceModel>();
108+
109+
IFlurlResponse personResponse = await $"{ Constants.PersonApiUrl }/api/persons/{packageModel.ReceiverId}".GetAsync();
110+
var errPersonResponse = personResponse.GetResponse();
111+
PersonServiceModel personModel = null;
112+
113+
if (errPersonResponse.StatusCode == HttpStatusCode.OK)
91114
{
92-
return StatusCode(500);
115+
personModel = await personResponse.GetJsonAsync<PersonServiceModel>();
93116
}
94-
else
117+
118+
IFlurlResponse locationResponse = await $"{ Constants.LocationApiUrl }/api/room/{packageModel.CollectionPointId}".GetAsync();
119+
var errLocationResponse = locationResponse.GetResponse();
120+
Room room = null;
121+
122+
if (errLocationResponse.StatusCode == HttpStatusCode.OK)
95123
{
96-
PackageServiceModel model = await response.GetJsonAsync<PackageServiceModel>();
97-
PackageResponseModel responseModel = ServiceToResponseModelConverter.ConvertPackage(model);
98-
return Ok(responseModel);
124+
room = await locationResponse.GetJsonAsync<Room>();
99125
}
126+
127+
PackageResponseModel responseModel = ServiceToResponseModelConverter.ConvertPackage(packageModel, personModel, room);
128+
return Ok(responseModel);
129+
100130
}
101131

102132
/// <summary>
@@ -115,11 +145,11 @@ public async Task<ActionResult<PackageResponseModel>> Post(PackageRequestModel r
115145
{
116146
IFlurlResponse response = await $"{ Constants.PackageApiUrl }/api/packages".PostJsonAsync(request);
117147

118-
if(response.StatusCode >= 500)
148+
if (response.StatusCode >= 500)
119149
{
120150
return StatusCode(500);
121151
}
122-
else if(response.StatusCode >= 400)
152+
else if (response.StatusCode >= 400)
123153
{
124154
return StatusCode(400);
125155
}
@@ -151,15 +181,15 @@ public async Task<ActionResult> Put(Guid id, PackageRequestModel request)
151181
{
152182
IFlurlResponse response = await $"{ Constants.PackageApiUrl }/api/packages/{id}".PutJsonAsync(request);
153183

154-
if(response.StatusCode == 404)
184+
if (response.StatusCode == 404)
155185
{
156186
return NotFound();
157187
}
158-
else if(response.StatusCode >= 400)
188+
else if (response.StatusCode >= 400)
159189
{
160190
return StatusCode(400);
161191
}
162-
else if(response.StatusCode >= 500)
192+
else if (response.StatusCode >= 500)
163193
{
164194
return StatusCode(500);
165195
}
@@ -189,16 +219,16 @@ public async Task<ActionResult> Put(Guid id, PackageRequestModel request)
189219
public async Task<ActionResult> Delete(Guid id)
190220
{
191221
IFlurlResponse response = await $"{ Constants.PackageApiUrl }/api/packages/{id}".DeleteAsync();
192-
193-
if(response.StatusCode == 404)
222+
223+
if (response.StatusCode == 404)
194224
{
195225
return NotFound();
196226
}
197-
else if(response.StatusCode >= 400)
227+
else if (response.StatusCode >= 400)
198228
{
199229
return StatusCode(400);
200230
}
201-
else if(response.StatusCode >= 500)
231+
else if (response.StatusCode >= 500)
202232
{
203233
return StatusCode(500);
204234
}

Controllers/PersonController.cs

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
using api_gateway.Helper;
2+
using api_gateway.Models.ServiceModels;
3+
using Flurl.Http;
4+
using Microsoft.AspNetCore.Http;
5+
using Microsoft.AspNetCore.Mvc;
6+
using System;
7+
using System.Collections.Generic;
8+
using System.Linq;
9+
using System.Threading.Tasks;
10+
11+
namespace api_gateway.Controllers
12+
{
13+
[Produces("application/json")]
14+
[Route("api")]
15+
[ApiController]
16+
public class PersonController : ControllerBase
17+
{
18+
/// <summary>
19+
/// Gets a list of all persons
20+
/// </summary>
21+
/// <returns>List of rooms</returns>
22+
/// <response code="200">returns the list of persons</response>
23+
/// <response code="400">bad request, something went wrong on the client-side</response>
24+
/// <response code="500">processing error, something went wrong on the server-side</response>
25+
[HttpGet("persons")]
26+
[ProducesResponseType(StatusCodes.Status200OK)]
27+
[ProducesResponseType(StatusCodes.Status400BadRequest)]
28+
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
29+
public async Task<ActionResult<ICollection<PersonServiceModel>>> GetPersons()
30+
{
31+
IFlurlResponse response = await $"{Constants.PersonApiUrl}/api/persons".GetAsync();
32+
33+
if (response.StatusCode >= 500)
34+
{
35+
return StatusCode(500);
36+
}
37+
else if (response.StatusCode >= 400)
38+
{
39+
return StatusCode(400);
40+
}
41+
else
42+
{
43+
ICollection<PersonServiceModel> responseModels = await response.GetJsonAsync<ICollection<PersonServiceModel>>();
44+
return Ok(responseModels);
45+
}
46+
}
47+
48+
/// <summary>
49+
/// Gets a specific person by id
50+
/// </summary>
51+
/// <param name="id">the id of the person</param>
52+
/// <returns>person with matching id</returns>
53+
/// <response code="200">Returns the person with the specified id</response>
54+
/// <response code="404">No person found with the matching id</response>
55+
/// <response code="400">bad request, something went wrong on the client-side</response>
56+
/// <response code="500">processing error, something went wrong on the server-side</response>
57+
[HttpGet("persons/{id}")]
58+
[ProducesResponseType(StatusCodes.Status200OK)]
59+
[ProducesResponseType(StatusCodes.Status404NotFound)]
60+
[ProducesResponseType(StatusCodes.Status400BadRequest)]
61+
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
62+
public async Task<ActionResult<PersonServiceModel>> GetPersonById(string id)
63+
{
64+
IFlurlResponse response = await $"{Constants.PersonApiUrl}/api/persons/{id}".GetAsync();
65+
66+
if (response.StatusCode == 404)
67+
{
68+
return NotFound();
69+
}
70+
else if (response.StatusCode >= 400)
71+
{
72+
return StatusCode(400);
73+
}
74+
else if (response.StatusCode >= 500)
75+
{
76+
return StatusCode(500);
77+
}
78+
else
79+
{
80+
PersonServiceModel responseModel = await response.GetJsonAsync<PersonServiceModel>();
81+
return Ok(responseModel);
82+
}
83+
}
84+
}
85+
}

Helper/Constants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ public static class Constants
55
{
66
public static string PackageApiUrl { get; set; }
77
public static string LocationApiUrl { get; set; }
8+
public static string PersonApiUrl { get; set; }
89
}
910
}

Helper/ErrorResponse.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Net;
5+
using System.Threading.Tasks;
6+
7+
namespace api_gateway.Helper
8+
{
9+
public class ErrorResponse
10+
{
11+
public HttpStatusCode StatusCode { get; set; }
12+
public string Message { get; set; }
13+
14+
public ErrorResponse(HttpStatusCode statusCode, string message)
15+
{
16+
StatusCode = statusCode;
17+
Message = message;
18+
}
19+
}
20+
}

Helper/FlurlResponseExtension.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Flurl.Http;
2+
using Microsoft.AspNetCore.Mvc;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Net;
7+
using System.Threading.Tasks;
8+
9+
namespace api_gateway.Helper
10+
{
11+
public static class FlurlResponseExtension
12+
{
13+
public static ErrorResponse GetResponse(this IFlurlResponse flurlResponse, string notFoundMessage = "Niet gevonden")
14+
{
15+
switch (flurlResponse.StatusCode)
16+
{
17+
case 400:
18+
return new ErrorResponse(HttpStatusCode.BadRequest, "Er ging iets mis. Probeer het later opnieuw");
19+
case 404:
20+
return new ErrorResponse(HttpStatusCode.NotFound, notFoundMessage);
21+
case 500:
22+
return new ErrorResponse(HttpStatusCode.InternalServerError, "Er ging iets mis. Probeer het later opnieuw");
23+
default:
24+
return new ErrorResponse(HttpStatusCode.OK, "");
25+
}
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)