Пример #1
0
        public IActionResult Get(int id)
        {
            var sportsbuilding = repository.SportsBuilding.SingleOrDefault(p => p.SportsBuildingID == id);
            //sportsbuilding.SportsHallList = null;
            List <SportsHall> sportshall = repository.SportsHallOnly.Where(p => p.SportsBuilding == sportsbuilding).ToList();


            if (sportsbuilding == null)
            {
                return(NotFound());
            }


            var buildingModel = new
            {
                id,
                sportsbuilding.Name,
                sportsbuilding.Street,
                sportsbuilding.HouseNumber,
                sportsbuilding.PostalCode,
            };



            var response = new HALResponse(buildingModel)
                           .AddLinks(new Link[] {
                new Link("self", "/api/SportsBuildings/{id}"),
            }).AddEmbeddedCollection("sportshallsLinks", sportshall, new Link[] {
                new Link("self", "/api/SportsHalls/{SportsHallID}")
            });


            return(this.Ok(response));
        }
Пример #2
0
        public IEnumerable <KeyValuePair <string, IEnumerable <HALResponse> > > GetEmbeddedCollections(object model, IHALModelConfig config)
        {
            var type = model.GetType();
            var embeddedModelProperties = type.GetTypeInfo().GetProperties().Where(x => x.IsDefined(typeof(HalEmbeddedAttribute)));

            foreach (var propertyInfo in embeddedModelProperties)
            {
                var embeddAttribute = propertyInfo.GetCustomAttribute(typeof(HalEmbeddedAttribute)) as HalEmbeddedAttribute;
                if (embeddAttribute == null)
                {
                    continue;
                }

                var modelValue = propertyInfo.GetValue(model);

                var embeddedItems = modelValue as IEnumerable <object> ?? new List <object> {
                    modelValue
                };

                var halResponses = embeddedItems.Select(embeddedModel => {
                    var response = new HALResponse(embeddedModel, config);
                    response.AddLinks(this.GetLinks(embeddedModel));
                    response.AddEmbeddedCollections(this.GetEmbeddedCollections(embeddedModel, config));

                    return(response);
                });

                yield return(new KeyValuePair <string, IEnumerable <HALResponse> >(embeddAttribute.CollectionName, halResponses));
            }
        }
Пример #3
0
        public IActionResult Put(int id, [FromBody] EventPostPut e)
        {
            if (e == null)
            {
                return(BadRequest());
            }

            if (id == 0)
            {
                return(NotFound());
            }

            var ev = new Event {
                EventId = id, Archived = e.Archived, Name = e.Name, PeopleAmount = e.PeopleAmount
            };
            var sportIds = e.SportIds.ToList();

            _eventAccess.UpdateEvent(ev, sportIds);

            var response = new HALResponse(new EventResource(_eventAccess.GetEvent(id)))
                           .AddLinks(new Link("update", "/api/Event/" + id + "", null, "PUT"))
                           .AddLinks(new Link("delete", "/api/Event/" + id + "", null, "DELETE"));

            return(Ok(response));
        }
Пример #4
0
        //public static HALResponse AddSelfLinkIfNotExists(this HALResponse response, HttpRequest request) {
        //    if(!response.HasSelfLink()) {
        //        response.AddSelfLink(request);
        //    }

        //    return response;
        //}

        public static HALResponse AddSelfLink(this HALResponse response, HttpRequest request)
        {
            var selfLink = new Link(Link.RelForSelf, request.Path, method: request.Method);

            response.AddLinks(selfLink);
            return(response);
        }
Пример #5
0
        public IActionResult GetBar(int fooId)
        {
            // A collection of bars related to foo
            var bars = new List <object> {
                new { id = 1, fooId = fooId, type = "bar" },
                new { id = 2, fooId = fooId, type = "bar" }
            };

            // data about the bars related to foo
            var fooBarModel = new {
                fooId = fooId,
                count = bars.Count
            };

            // Return a fooBar resource with embedded bars
            var response = new HALResponse(fooBarModel)
                           .AddLinks(new Link[] {
                new Link("self", "/api/foo/{fooId}/bar")
            })
                           .AddEmbeddedCollection("bars", bars, new Link[] {
                new Link("self", "/api/bar/{id}")
            });

            return(this.Ok(response));
        }
Пример #6
0
 public static IActionResult ToActionResult(this HALResponse model, Controller controller, HttpStatusCode statusCode = HttpStatusCode.OK)
 {
     return(new ObjectResult(model)
     {
         StatusCode = (int)statusCode
     });
 }
        public async Task <IActionResult> Exchange([FromBody] ExchangeRequest request)
        {
            _logger.LogInformation(
                $"Omregn beløbet {request.Amount} med fra valuta \"{request.FromCurrencyCode}\" til valuta \"{request.ToCurrencyCode}\"");

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var result =
                await _exchangeService.Exchange(request.Amount, request.FromCurrencyCode, request.ToCurrencyCode);

            var responseConfig = new HALModelConfig
            {
                LinkBase = $"{Request.Scheme}://{Request.Host.ToString()}",
                ForceHAL = Request.ContentType == "application/hal+json"
            };

            var response = new HALResponse(responseConfig);

            response.AddEmbeddedResource("result", result);
            response.AddLinks(
                new Link("self", "/api/Exchange", null, "POST"),
                new Link("fromCurrency", $"/api/CurrencyRates/{request.FromCurrencyCode}"),
                new Link("toCurrency", $"/api/CurrencyRates/{request.ToCurrencyCode}")
                );

            return(this.HAL(response));
        }
        public async Task <IActionResult> GetRegistration([Required] int id)
        {
            _logger.LogInformation($"Vis detaljer for registrering {id}");

            var data = await _registrationService.GetByIdAsync(id);

            var result = new RegistrationsModel
            {
                Id        = data.Id,
                Date      = data.Date,
                StartTime = data.StartTime,
                EndTime   = data.EndTime.GetValueOrDefault()
            };


            var responseConfig = new HALModelConfig
            {
                LinkBase = $"{Request.Scheme}://{Request.Host.ToString()}",
                ForceHAL = Request.ContentType == "application/hal+json"
            };

            var response = new HALResponse(responseConfig);

            response.AddEmbeddedResource("registration", result);
            response.AddLinks(
                new Link("self", $"/api/registration/{id}", null, "GET")
                );

            return(this.HAL(response));
        }
Пример #9
0
        public IHttpActionResult GetBar(int fooId)
        {
            // A collection of bars related to foo
            var bars = new List <object> {
                new { id = 1, fooId = fooId, type = "bar" },
                new { id = 2, fooId = fooId, type = "bar" }
            };

            // data about the bars related to foo
            var fooBarModel = new {
                fooId = fooId,
                count = bars.Count
            };

            // Return a fooBar resource with embedded bars
            var response = new HALResponse(fooBarModel)
                           .AddSelfLink(this.Request)
                           .AddLinks(new Link[] {
                new Link("other", "/api/foo/{fooId}/bar", replaceParameters: false)
            })
                           .AddEmbeddedResource("baz", new { name = "bazza" }, new Link[] {
                new Link("a", "test")
            })
                           .AddEmbeddedCollection("bars", bars, new Link[] {
                new Link("self", "/api/bar/{id}")
            });

            return(this.Ok(response));
        }
Пример #10
0
        private async Task AssertModelJson(object model, string contentType, bool forceHal, string expected)
        {
            using (var stream = new MemoryStream()) {
                var content = new StringContent("");
                content.Headers.ContentType = new MediaTypeHeaderValue(contentType);

                var formatter = new JsonHALMediaTypeFormatter();

                var link     = new Link("self", "href");
                var embedded = new[] {
                    new { bar = true }
                };

                var halModel = new HALResponse(model, new HALModelConfig {
                    ForceHAL = forceHal
                })
                               .AddLinks(link)
                               .AddEmbeddedCollection("bars", embedded);

                Assert.NotNull(formatter);

                await formatter.WriteToStreamAsync(typeof(HALResponse), halModel, stream, content, null);

                // Reset the position to ensure it can read
                stream.Position = 0;

                var    reader = new StreamReader(stream);
                string result = await reader.ReadToEndAsync();

                Assert.Equal(expected, result);
            }
        }
        public async Task <IActionResult> GetRegistrations()
        {
            _logger.LogInformation("Vis registreringer");

            var email = HttpContext.User.Claims.FirstOrDefault(c => c.Type.EndsWith("emailaddress"))?.Value;
            var user  = await _userManager.FindByNameAsync(email);

            var data = _registrationService.GetAllByIdAsync(user.Id).ToList();

            var result = data.Select(s => new RegistrationsModel
            {
                Id        = s.Id,
                Date      = s.Date,
                StartTime = s.StartTime,
                EndTime   = s.EndTime.GetValueOrDefault()
            });


            var responseConfig = new HALModelConfig
            {
                LinkBase = $"{Request.Scheme}://{Request.Host.ToString()}",
                ForceHAL = Request.ContentType == "application/hal+json"
            };

            var response = new HALResponse(responseConfig);

            response.AddEmbeddedCollection("registrations", result);
            response.AddLinks(
                new Link("self", "/api/registration/", null, "GET")
                );

            return(this.HAL(response));
        }
Пример #12
0
 public static HALResponse AddEmbeddedResource <T>(
     this HALResponse self,
     string resourceName,
     T model,
     Link link)
 {
     return(self.AddEmbeddedResource(resourceName, model, new[] { link }));
 }
Пример #13
0
        public void Sets_ForceHAL()
        {
            var hal = new HALResponse(new HALModelConfig {
                ForceHAL = true
            });

            Assert.Equal(hal.Config.ForceHAL, true);
        }
Пример #14
0
        public void Sets_LinkBase()
        {
            var hal = new HALResponse(new HALModelConfig {
                LinkBase = "some-link-base"
            });

            Assert.Equal(hal.Config.LinkBase, "some-link-base");
        }
Пример #15
0
 public static HALResponse AddEmbeddedCollection <T>(
     this HALResponse self,
     string collectionName,
     IEnumerable <T> models,
     Link link)
 {
     return(self.AddEmbeddedCollection(collectionName, models, new[] { link }));
 }
Пример #16
0
        public void Has_Link(object model, Link linkAOne, Link linkATwo, Link linkB, string embeddedName, object[] embedded)
        {
            var response = new HALResponse(model)
                           .AddLinks(linkAOne);

            Assert.True(response.HasLink(linkAOne.Rel));
            Assert.False(response.HasLink(linkB.Rel));
        }
Пример #17
0
        public void Should_not_be_able_to_convert_HalReponse_with_attribute_marked_model()
        {
            var model       = new PersonModelWithAttributes();
            var halResponse = new HALResponse(model);
            var converter   = new HALAttributeConverter();

            Assert.False(converter.CanConvert(halResponse.GetType()));
        }
Пример #18
0
        public IActionResult Post([FromBody] Invoice invoice)
        {
            _invoiceAccess.AddInvoice(invoice);
            var resource = new InvoiceResource(invoice);
            var response = new HALResponse(resource).AddSelfLink(Request);

            return(Ok(response));
        }
Пример #19
0
        public void Has_Link(object model, Link[] links, string expectedHal, string expectedPlain)
        {
            var response = new HALResponse(model)
                           .AddLinks(links);

            Assert.True(response.HasLink("a"));
            Assert.True(response.HasLink("b"));
            Assert.False(response.HasLink("c"));
        }
        public IActionResult GetRoot()
        {
            var response = new HALResponse(null)
                           .AddLinks(new Link("clientes", _urlHelper.Link("GetClientes", new { }), null, "GET"))
                           .AddLinks(new Link("clientes_destacados", _urlHelper.Link("GetClientesVIP", new { }), null, "GET"))
                           .AddLinks(new Link("create_cliente", _urlHelper.Link("CreateCliente", new { }), null, "POST"));

            return(this.Ok(response));
        }
Пример #21
0
        public static HALResponse AddSelfLinkIfNotExists(this HALResponse response, HttpRequest request)
        {
            if (!response.HasSelfLink())
            {
                response.AddSelfLink(request);
            }

            return(response);
        }
Пример #22
0
        public static IApplicationBuilder UseIndex(this IApplicationBuilder builder)
        {
            var resource = new IndexResource();
            var response = new HALResponse(IndexRepresentation.Instance, resource);

            return(builder.MapMethods("/", (HttpMethod.Get, GetIndex)));

            ValueTask <Response> GetIndex(HttpContext context) => new ValueTask <Response>(response);
        }
Пример #23
0
    protected HALResponse HAL(IEnumerable <HALResponse> collectionToEmbed, string collectionName = "data")
    {
        var hal = new HALResponse(new CollectionSummary {
            Count = collectionToEmbed.Count()
        })
                  .AddEmbeddedCollection(collectionName, collectionToEmbed)
                  .AddSelfLink(HttpContext.Request);

        return(hal);
    }
Пример #24
0
        private static HALResponse ModelToHal(Customer model)
        {
            var hal = new HALResponse(model).AddLinkToSelf($"/{endpoint}/{model.Id}");

            if (model.LabelId != null)
            {
                hal.AddLink(new Link("label", $"/{LabelsController.endpoint}/{model.LabelId}"));
            }
            return(hal);
        }
Пример #25
0
 public IActionResult Get()
 {
     var response = new HALResponse(null)
         .AddLinks(
             new Link("self", "/api/Root"),
             LinkGenerator.Users.GetAll(),
             LinkGenerator.Users.Create()
         );
     return Ok(response);
 }
Пример #26
0
        public void Hal_Model(HttpStatusCode statusCode, bool forceHal, string linkBase)
        {
            var halModel = new HALResponse(new HALModelConfig {
                ForceHAL = forceHal,
                LinkBase = linkBase
            });

            var result = this.controller.HAL(halModel, statuscode: statusCode) as NegotiatedContentResult <HALResponse>;

            AssertHalModelResult(statusCode, linkBase, forceHal, result);
        }
Пример #27
0
        public ActionResult <IEnumerable <Dish> > GetDishes()
        {
            var dishId = _context.Dishes.ToList().First().DishId;
            // Return a fooBar resource with embedded bars
            var response = new HALResponse(_context.Dishes.ToList())
                           .AddLinks(new Link[]
            {
                new Link("self", "/api/v1/dishes/{DishId}")
            });

            return(this.Ok(response));
        }
Пример #28
0
        public IActionResult Get(int id)
        {
            if (id.Equals(0) || _sportAccess.GetSport(id) == null)
            {
                return(BadRequest());
            }
            var resource = new SportResource(_sportAccess.GetSport(id));
            var response = new HALResponse(resource).AddSelfLink(Request).AddLinks(
                new Link("sport", "/api/Sport/", null, "GET"));

            return(Ok(response));
        }
Пример #29
0
        public async Task <IActionResult> GetUserProfile(Guid id)
        {
            var user = await _usersRepository.GetUserAsync(id);

            var results = Mapper.Map <UserDto>(user);

            var response = new HALResponse(results)
                           .AddLinks(new Link("self", $"/core/v1/users/{id}"))
                           .AddLinks(new Link("profiles", "/core/v1/profiles/{Email}"));

            return(Ok(response));
        }
Пример #30
0
        public static IActionResult HAL(this ControllerBase controller, IEnumerable <Link> links, string relativeLinkBase = "~/", HttpStatusCode statuscode = HttpStatusCode.OK)
        {
            string linkBase = GetLinkBase(controller, relativeLinkBase);

            var hyperMedia = new HALResponse(new HALModelConfig {
                ForceHAL = true, // If we're only returning links, always return them
                LinkBase = linkBase
            });

            hyperMedia.AddLinks(links);

            return(hyperMedia.ToActionResult(controller, statuscode));
        }
Пример #31
0
        public HALResponse Convert(object model)
        {
            if(!this.CanConvert(model?.GetType())) {
                throw new InvalidOperationException();
            }

            var resolver = new HALAttributeResolver();

            var halConfig = resolver.GetConfig(model);

            var response = new HALResponse(model, halConfig);
            response.AddLinks(resolver.GetLinks(model));
            response.AddEmbeddedCollections(resolver.GetEmbeddedCollections(model, halConfig));

            return response;
        }
Пример #32
0
        public IEnumerable<KeyValuePair<string, IEnumerable<HALResponse>>> GetEmbeddedCollections(object model, IHALModelConfig config)
        {
            var type = model.GetType();
            var embeddedModelProperties = type.GetTypeInfo().GetProperties().Where(x => x.IsDefined(typeof(HalEmbeddedAttribute)));

            foreach(var propertyInfo in embeddedModelProperties) {
                var embeddAttribute = propertyInfo.GetCustomAttribute(typeof(HalEmbeddedAttribute)) as HalEmbeddedAttribute;
                if(embeddAttribute == null) continue;

                var modelValue = propertyInfo.GetValue(model);

                var embeddedItems = modelValue as IEnumerable<object> ?? new List<object> { modelValue };

                var halResponses = embeddedItems.Select(embeddedModel => {
                    var response = new HALResponse(embeddedModel, config);
                    response.AddLinks(this.GetLinks(embeddedModel));
                    response.AddEmbeddedCollections(this.GetEmbeddedCollections(embeddedModel, config));

                    return response;
                });

                yield return new KeyValuePair<string, IEnumerable<HALResponse>>(embeddAttribute.CollectionName, halResponses);
            }
        }