Skip to content

Commit

Permalink
Develop into master (#26)
Browse files Browse the repository at this point in the history
* Task/#257 controller skeleton

* Task/#263 koppeling pakket service

* cors (#5)

* dockerfile added local file

* Add license (#6)

* Update README.md

* Create LICENSE

* Update README.md

Co-authored-by: Heesakkers,Aron A.P.H.M <aron.heesakkers@student.fontys.nl>

* Build (#11)

Co-authored-by: Aron Heesakkers <aron.heesakkers@via.nl>

* Hardcoded values to appsettings (#12)

Co-authored-by: Aron Heesakkers <aron.heesakkers@via.nl>

* Update README.md (#13)

* Develop (#7)

* Task/#257 controller skeleton

* Task/#263 koppeling pakket service

* cors (#5)

* dockerfile added local file

* Add license (#6)

* Update README.md

* Create LICENSE

* Update README.md

Co-authored-by: Heesakkers,Aron A.P.H.M <aron.heesakkers@student.fontys.nl>

Co-authored-by: Wieling,Kevin C.F.J <k.wieling@student.fontys.nl>
Co-authored-by: Gompel,Sverre S. van <sverre.vangompel@student.fontys.nl>
Co-authored-by: Heesakkers,Aron A.P.H.M <aron.heesakkers@student.fontys.nl>
Co-authored-by: EGKangaroo <EGKangaroo@yahoo.com>

* Update README.md

Co-authored-by: Wieling,Kevin C.F.J <k.wieling@student.fontys.nl>
Co-authored-by: Gompel,Sverre S. van <sverre.vangompel@student.fontys.nl>
Co-authored-by: Heesakkers,Aron A.P.H.M <aron.heesakkers@student.fontys.nl>
Co-authored-by: EGKangaroo <EGKangaroo@yahoo.com>

* Update README.md

* Gateway fix (#16)

* Changes

* gateway fix, same request model as package service

* created at action bug fixed

Co-authored-by: Aron Heesakkers <aron.heesakkers@via.nl>
Co-authored-by: EGKangaroo <EGKangaroo@yahoo.com>

* Task/#264 koppeling locatieservice (#18)

* added locationservice url

* added models

* location controller

* fixed room requestmodel

* fix endpoints and constants

* more model fixes

* getpackage conversion fix

* 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

* Story/#16 edit locations (#23)

* Docker Local Appsettings

* README update

* Update methods finished

* Changed name

Co-authored-by: Aron Heesakkers <aron.heesakkers@via.nl>

* #358 delete endpoints (#24)

* all calls make use of flurl extension and return ObjectResults

* Delete endpoints toegevoegd aan locatiecontroller

* Error handling voor delete endpoints

* conflict httpstatus added

* Small formatting fix in locatiecontroller

Co-authored-by: JaapvanderMeer <43168682+JeapfromtheLake@users.noreply.github.com>

Co-authored-by: Wieling,Kevin C.F.J <k.wieling@student.fontys.nl>
Co-authored-by: Gompel,Sverre S. van <sverre.vangompel@student.fontys.nl>
Co-authored-by: Heesakkers,Aron A.P.H.M <aron.heesakkers@student.fontys.nl>
Co-authored-by: EGKangaroo <EGKangaroo@yahoo.com>
Co-authored-by: Shady^ <36726909+ShadyDL@users.noreply.github.com>
Co-authored-by: Aron Heesakkers <aron.heesakkers@via.nl>
Co-authored-by: Sverre <43172180+Sverrevg@users.noreply.github.com>
  • Loading branch information
8 people authored May 14, 2021
1 parent 08de74a commit 6cf6ec5
Show file tree
Hide file tree
Showing 17 changed files with 604 additions and 190 deletions.
351 changes: 234 additions & 117 deletions Controllers/LocationController.cs

Large diffs are not rendered by default.

166 changes: 116 additions & 50 deletions Controllers/PackageController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
using api_gateway.Models.RequestModels;
using Microsoft.AspNetCore.Http;
using api_gateway.Helper;
using Newtonsoft.Json;
using System.Net;
using api_gateway.Models.ServiceModels.Location;

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

Expand Down Expand Up @@ -41,22 +44,37 @@ public class PackageController : ControllerBase
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ICollection<PackageResponseModel>>> Get()
{
IFlurlResponse response = await $"{Constants.PackageApiUrl}/api/packages".GetAsync();
IFlurlResponse packageResponse = await $"{Constants.PackageApiUrl}/api/packages".GetAsync();
var errPackageResponse = packageResponse.GetResponse("Er zijn nog geen pakketten");

if(response.StatusCode >= 500)
if (errPackageResponse.StatusCode != HttpStatusCode.OK)
{
return StatusCode(500);
return new ObjectResult(errPackageResponse.Message) { StatusCode = (int)errPackageResponse.StatusCode };
}
else if(response.StatusCode >= 400)

IFlurlResponse locationResponse = await $"{Constants.LocationApiUrl}/api/room".GetAsync();
var errLocationResponse = locationResponse.GetResponse();
ICollection<Room> allRooms = null;

if (errLocationResponse.StatusCode == HttpStatusCode.OK)
{
return StatusCode(400);
allRooms = await locationResponse.GetJsonAsync<ICollection<Room>>();
}
else

IFlurlResponse personResponse = await $"{Constants.PersonApiUrl}/api/persons".GetAsync();
var errPersonResponse = personResponse.GetResponse();
ICollection<PersonServiceModel> allPersonServiceModels = null;

if (errPersonResponse.StatusCode == HttpStatusCode.OK)
{
ICollection<PackageServiceModel> serviceModels = await response.GetJsonAsync<ICollection<PackageServiceModel>>();
ICollection<PackageResponseModel> responseModels = ServiceToResponseModelConverter.ConvertPackages(serviceModels);
return Ok(responseModels);
allPersonServiceModels = await personResponse.GetJsonAsync<ICollection<PersonServiceModel>>();
}

ICollection<PackageServiceModel> allPackageServiceModels = await packageResponse.GetJsonAsync<ICollection<PackageServiceModel>>();
ICollection<PackageResponseModel> allPackages = ServiceToResponseModelConverter.ConvertPackages(allPackageServiceModels, allPersonServiceModels, allRooms);

return Ok(allPackages);

}


Expand All @@ -76,26 +94,37 @@ public async Task<ActionResult<ICollection<PackageResponseModel>>> Get()
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<PackageResponseModel>> GetById(Guid id)
{
IFlurlResponse response = await $"{ Constants.PackageApiUrl }/api/packages/{id}".GetAsync();
IFlurlResponse packageResponse = await $"{ Constants.PackageApiUrl }/api/packages/{id}".GetAsync();

if(response.StatusCode == 404)
{
return NotFound();
}
else if(response.StatusCode >= 400)
var errPackageResponse = packageResponse.GetResponse();

if (errPackageResponse.StatusCode != HttpStatusCode.OK)
{
return StatusCode(400);
return new ObjectResult(errPackageResponse.Message) { StatusCode = (int)errPackageResponse.StatusCode };
}
else if(response.StatusCode >= 500)
PackageServiceModel packageModel = await packageResponse.GetJsonAsync<PackageServiceModel>();

IFlurlResponse personResponse = await $"{ Constants.PersonApiUrl }/api/persons/{packageModel.ReceiverId}".GetAsync();
var errPersonResponse = personResponse.GetResponse();
PersonServiceModel personModel = null;

if (errPersonResponse.StatusCode == HttpStatusCode.OK)
{
return StatusCode(500);
personModel = await personResponse.GetJsonAsync<PersonServiceModel>();
}
else

IFlurlResponse locationResponse = await $"{ Constants.LocationApiUrl }/api/room/{packageModel.CollectionPointId}".GetAsync();
var errLocationResponse = locationResponse.GetResponse();
Room room = null;

if (errLocationResponse.StatusCode == HttpStatusCode.OK)
{
PackageServiceModel model = await response.GetJsonAsync();
PackageResponseModel responseModel = ServiceToResponseModelConverter.ConvertPackage(model);
return Ok(responseModel);
room = await locationResponse.GetJsonAsync<Room>();
}

PackageResponseModel responseModel = ServiceToResponseModelConverter.ConvertPackage(packageModel, personModel, room);
return Ok(responseModel);

}

/// <summary>
Expand All @@ -112,22 +141,30 @@ public async Task<ActionResult<PackageResponseModel>> GetById(Guid id)
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<PackageResponseModel>> Post(PackageRequestModel request)
{
IFlurlResponse response = await $"{ Constants.PackageApiUrl }/api/packages".PostJsonAsync(request);

if(response.StatusCode >= 500)
ObjectResult personResponse = await PersonExists(request.ReceiverId);
if (personResponse.StatusCode != 200)
{
return StatusCode(500);
return personResponse;
}
else if(response.StatusCode >= 400)

ObjectResult collectionPointResponse = await CollectionPointExists(request.CollectionPointId);
if (collectionPointResponse.StatusCode != 200)
{
return StatusCode(400);
return collectionPointResponse;
}
else

//Post package
IFlurlResponse flurlPostResponse = await $"{ Constants.PackageApiUrl }/api/packages".PostJsonAsync(request);
var postResponse = flurlPostResponse.GetResponse();

if (postResponse.StatusCode != HttpStatusCode.OK)
{
PackageServiceModel model = await response.GetJsonAsync<PackageServiceModel>();
PackageResponseModel responseModel = ServiceToResponseModelConverter.ConvertPackage(model);
return CreatedAtAction("Post", responseModel);
return new ObjectResult(postResponse.Message) { StatusCode = (int)postResponse.StatusCode };
}

PackageServiceModel model = await flurlPostResponse.GetJsonAsync<PackageServiceModel>();
PackageResponseModel responseModel = ServiceToResponseModelConverter.ConvertPackage(model);
return CreatedAtAction("Post", responseModel);
}

/// <summary>
Expand All @@ -148,26 +185,29 @@ public async Task<ActionResult<PackageResponseModel>> Post(PackageRequestModel r
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult> Put(Guid id, PackageRequestModel request)
{
IFlurlResponse response = await $"{ Constants.PackageApiUrl }/api/packages/{id}".PutJsonAsync(request);

if(response.StatusCode == 404)
ObjectResult personResponse = await PersonExists(request.ReceiverId);
if (personResponse.StatusCode != 200)
{
return NotFound();
}
else if(response.StatusCode >= 400)
{
return StatusCode(400);
return personResponse;
}
else if(response.StatusCode >= 500)

ObjectResult collectionPointResponse = await CollectionPointExists(request.CollectionPointId);
if (collectionPointResponse.StatusCode != 200)
{
return StatusCode(500);
return collectionPointResponse;
}
else

IFlurlResponse flurlPutResponse = await $"{ Constants.PackageApiUrl }/api/packages/{id}".PutJsonAsync(request);
var putResponse = flurlPutResponse.GetResponse();

if (putResponse.StatusCode != HttpStatusCode.OK)
{
PackageServiceModel model = await response.GetJsonAsync<PackageServiceModel>();
PackageResponseModel responseModel = ServiceToResponseModelConverter.ConvertPackage(model);
return StatusCode(204);
return new ObjectResult(putResponse.Message) { StatusCode = (int)putResponse.StatusCode };
}

PackageServiceModel model = await flurlPutResponse.GetJsonAsync<PackageServiceModel>();
PackageResponseModel responseModel = ServiceToResponseModelConverter.ConvertPackage(model);
return StatusCode(204);
}

/// <summary>
Expand All @@ -188,16 +228,16 @@ public async Task<ActionResult> Put(Guid id, PackageRequestModel request)
public async Task<ActionResult> Delete(Guid id)
{
IFlurlResponse response = await $"{ Constants.PackageApiUrl }/api/packages/{id}".DeleteAsync();
if(response.StatusCode == 404)

if (response.StatusCode == 404)
{
return NotFound();
}
else if(response.StatusCode >= 400)
else if (response.StatusCode >= 400)
{
return StatusCode(400);
}
else if(response.StatusCode >= 500)
else if (response.StatusCode >= 500)
{
return StatusCode(500);
}
Expand All @@ -206,5 +246,31 @@ public async Task<ActionResult> Delete(Guid id)
return Ok();
}
}

private async Task<ObjectResult> PersonExists(string id)
{
IFlurlResponse flurlPersonResponse = await $"{ Constants.PersonApiUrl }/api/persons/{id}".GetAsync();
var personResponse = flurlPersonResponse.GetResponse("De meegegeven ontvanger bestaat niet");

if (personResponse.StatusCode != HttpStatusCode.OK)
{
return new ObjectResult(personResponse.Message) { StatusCode = (int)personResponse.StatusCode };
}

return new ObjectResult(personResponse.Message) { StatusCode = (int)personResponse.StatusCode };
}

private async Task<ObjectResult> CollectionPointExists(Guid id)
{
IFlurlResponse flurlCollectionPointResponse = await $"{ Constants.LocationApiUrl }/api/Room/{id}".GetAsync();
var collectionPointResponse = flurlCollectionPointResponse.GetResponse("De meegegeven ruimte bestaat niet");

if (collectionPointResponse.StatusCode != HttpStatusCode.OK)
{
return new ObjectResult(collectionPointResponse.Message) { StatusCode = (int)collectionPointResponse.StatusCode };
}

return new ObjectResult(collectionPointResponse.Message) { StatusCode = (int)collectionPointResponse.StatusCode };
}
}
}
74 changes: 74 additions & 0 deletions Controllers/PersonController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
using api_gateway.Helper;
using api_gateway.Models.ServiceModels;
using Flurl.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;

namespace api_gateway.Controllers
{
[Produces("application/json")]
[Route("api")]
[ApiController]
public class PersonController : ControllerBase
{
/// <summary>
/// Gets a list of all persons
/// </summary>
/// <returns>List of rooms</returns>
/// <response code="200">returns the list of persons</response>
/// <response code="400">bad request, something went wrong on the client-side</response>
/// <response code="500">processing error, something went wrong on the server-side</response>
[HttpGet("persons")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ICollection<PersonServiceModel>>> GetPersons()
{
IFlurlResponse flurlResponse = await $"{Constants.PersonApiUrl}/api/persons".GetAsync();

var response = flurlResponse.GetResponse("Er zijn geen personen gevonden.");

if (response.StatusCode != HttpStatusCode.OK)
{
return new ObjectResult(response.Message) { StatusCode = (int)response.StatusCode };
}

ICollection<PersonServiceModel> responseModels = await flurlResponse.GetJsonAsync<ICollection<PersonServiceModel>>();
return Ok(responseModels);
}

/// <summary>
/// Gets a specific person by id
/// </summary>
/// <param name="id">the id of the person</param>
/// <returns>person with matching id</returns>
/// <response code="200">Returns the person with the specified id</response>
/// <response code="404">No person found with the matching id</response>
/// <response code="400">bad request, something went wrong on the client-side</response>
/// <response code="500">processing error, something went wrong on the server-side</response>
[HttpGet("persons/{id}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<PersonServiceModel>> GetPersonById(string id)
{
IFlurlResponse flurlResponse = await $"{Constants.PersonApiUrl}/api/persons/{id}".GetAsync();

var response = flurlResponse.GetResponse("De persoon die u probeert op te zoeken kan niet gevonden worden.");

if (response.StatusCode != HttpStatusCode.OK)
{
return new ObjectResult(response.Message) { StatusCode = (int)response.StatusCode };
}

PersonServiceModel responseModel = await flurlResponse.GetJsonAsync<PersonServiceModel>();
return Ok(responseModel);
}
}
}
4 changes: 2 additions & 2 deletions Dockerfile.local
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
ENV ASPNETCORE_ENVIRONMENT="Development"
ENV ENVIRONMENT="Development"
ENV ASPNETCORE_ENVIRONMENT="Docker"
ENV ENVIRONMENT="Docker"

WORKDIR /app
EXPOSE 8123
Expand Down
1 change: 1 addition & 0 deletions Helper/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ public static class Constants
{
public static string PackageApiUrl { get; set; }
public static string LocationApiUrl { get; set; }
public static string PersonApiUrl { get; set; }
}
}
20 changes: 20 additions & 0 deletions Helper/ErrorResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;

namespace api_gateway.Helper
{
public class ErrorResponse
{
public HttpStatusCode StatusCode { get; set; }
public string Message { get; set; }

public ErrorResponse(HttpStatusCode statusCode, string message)
{
StatusCode = statusCode;
Message = message;
}
}
}
32 changes: 32 additions & 0 deletions Helper/FlurlResponseExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Flurl.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;

namespace api_gateway.Helper
{
public static class FlurlResponseExtension
{
public static ErrorResponse GetResponse(this IFlurlResponse flurlResponse, string notFoundMessage = "Niet gevonden")
{
switch (flurlResponse.StatusCode)
{
case 201:
return new ErrorResponse(HttpStatusCode.Created, "");
case 400:
return new ErrorResponse(HttpStatusCode.BadRequest, "Er ging iets mis. Probeer het later opnieuw");
case 404:
return new ErrorResponse(HttpStatusCode.NotFound, notFoundMessage);
case 409:
return new ErrorResponse(HttpStatusCode.Conflict, "Het item dat u probeert toe te voegen/updaten bestaat al");
case 500:
return new ErrorResponse(HttpStatusCode.InternalServerError, "Er ging iets mis. Probeer het later opnieuw");
default:
return new ErrorResponse(HttpStatusCode.OK, "");
}
}
}
}
Loading

0 comments on commit 6cf6ec5

Please sign in to comment.