Skip to content

Releases: json-api-dotnet/JsonApiDotNetCore

v3.1.0-alpha1

04 Dec 03:56
3ade2a7

Choose a tag to compare

v3.1.0-alpha1 Pre-release
Pre-release

#436: Nested sparse fields. Thanks @milosloub!
#442: Nullable parent in nested inclusion. Thanks @milosloub!
#451 via #452 - DefaultRelationshipLinks. Thanks @milosloub!
#445 via #446 - Introduce mappedBy in HasOneAttribute to support Entity-Resource separation

v3.0.0

13 Nov 05:01

Choose a tag to compare

After 3 months, it's finally here. There have been no functional modifications since v3.0.0-beta7, only improved error checks and messages. The following is a summary of all the changes that went out in the beta versions.


Breaking Changes

  • DocumentData replaced by ResourceObject. Thanks @btecu! (#400 via #403)
  • #317 via #428: rename ContextGraph to ResourceGraph
  • #359 via #416 Nested Sort. Thanks @milosloub!
    • SortQuery: use public attribute string name when constructing
      • SortQuery(SortDirection, AttrAttribute) to SortQuery(SortDirection, string)
      • SortedAttribute to Attribute
    • IQueryableExtension
      • Sort<T>(IQueryable<TSource>, List<SortQuery>) to
        Sort<T>(IQueryable<TSource>, IJsonApiContext, List<SortQuery>)
      • Sort<T>(IQueryable<TSource>, SortQuery) to
        Sort<T>(IQueryable<TSource>, IJsonApiContext, SortQuery)
      • Sort<T>(IOrderedQueryable<TSource>, SortQuery) to
        Sort<T>(IOrderedQueryable<TSource>, IJsonApiContext, SortQuery)

Non-Breaking Changes

  • #425 via #427: fix DocumentBuilder; includes member missing when fetching HasManyThrough. Thanks @maurei!
  • Naming conventions (#293 via #409)
[Attr] // → "compound-name"
public string CompoundName { get; set; }

builder.AddResource<TestResource>();  // → "test-resources"
  • API for easy service/repo registration (#384 via #409)
services.AddResourceService<FooService>();
  • ResourceDefinition improvements: Custom filters and default sort (#402 via #409)
public class FooResource : ResourceDefinition<Foo>
{
  protected override QueryFilters GetQueryFilters() => new QueryFilters { 
        { "key1", (query, value) => query.Where(x => x == value) },
        { "key2", (query, value) => query.Where(x => x != value) },
   };

  public override PropertySortOrder<Foo> GetDefaultSortOrder() => new PropertySortOrder { 
     (foo => foo.Bar, SortDirection.Ascending),
     (foo => foo.Baz, SortDirection.Descending),
  }
}
  • Many-to-Many support via [HasManyThrough] (#151 via #419)
public class Article : Identifiable
{
    [NotMapped] // ← tells EF to ignore this property
    [HasManyThrough(nameof(ArticleTags))] // ← tells JADNC to use this as an alias to ArticleTags.Tags
    public List<Tag> Tags { get; set; }

    // this is the EF join relationship
    public List<ArticleTag> ArticleTags { get; set; }
}

Usage

This change introduces two new filter operators isnull and isnotnull. Like all other operators, it is appended by a colon (:), however, any value provided after the colon is ignored.

GET /api/v1/todo-items?filter[updated-date]=isnull: HTTP/1.1
Accept: application/vnd.api+json
  • #377: Fix TypeLocator bug that results in app crashing at startup
  • #241 via #376 Auto Resource/Service Discovery

v3.0.0-beta7

18 Oct 04:35
2221d57

Choose a tag to compare

v3.0.0-beta7 Pre-release
Pre-release

#359 via #416 Nested Sort. Thanks @milosloub!

Breaking Changes

  • SortQuery

    • SortQuery(SortDirection, AttrAttribute) to SortQuery(SortDirection, string)
    • SortedAttribute to Attribute
  • IQueryableExtension

    • Sort<T>(IQueryable<TSource>, List<SortQuery>) to
      Sort<T>(IQueryable<TSource>, IJsonApiContext, List<SortQuery>)
    • Sort<T>(IQueryable<TSource>, SortQuery) to
      Sort<T>(IQueryable<TSource>, IJsonApiContext, SortQuery)
    • Sort<T>(IOrderedQueryable<TSource>, SortQuery) to
      Sort<T>(IOrderedQueryable<TSource>, IJsonApiContext, SortQuery)

v3.0.0-beta6

15 Oct 14:59
8570b21

Choose a tag to compare

v3.0.0-beta6 Pre-release
Pre-release
  • #425 via #427: fix DocumentBuilder; includes member missing when fetching HasManyThrough. Thanks @maurei!
  • #317 via #428: rename ContextGraph to ResourceGraph

v3.0.0-beta5

05 Oct 00:48
7efb3c5

Choose a tag to compare

v3.0.0-beta5 Pre-release
Pre-release

Non-Breaking Changes

[Attr] // → "compound-name"
public string CompoundName { get; set; }

builder.AddResource<TestResource>();  // → "test-resources"
  • API for easy service/repo registration (#384 via #409)
services.AddResourceService<FooService>();
  • ResourceDefinition improvements: Custom filters and default sort (#402 via #409)
public class FooResource : ResourceDefinition<Foo>
{
  protected override QueryFilters GetQueryFilters() => new QueryFilters { 
        { "key1", (query, value) => query.Where(x => x == value) },
        { "key2", (query, value) => query.Where(x => x != value) },
   };

  public override PropertySortOrder<Foo> GetDefaultSortOrder() => new PropertySortOrder { 
     (foo => foo.Bar, SortDirection.Ascending),
     (foo => foo.Baz, SortDirection.Descending),
  }
}
  • Many-to-Many support via [HasManyThrough] (#151 via #419)
public class Article : Identifiable
{
    [NotMapped] // ← tells EF to ignore this property
    [HasManyThrough(nameof(ArticleTags))] // ← tells JADNC to use this as an alias to ArticleTags.Tags
    public List<Tag> Tags { get; set; }

    // this is the EF join relationship
    public List<ArticleTag> ArticleTags { get; set; }
}

Breaking Changes

  • DocumentData replaced by ResourceObject. Thanks @btecu! (#400 via #403)

v3.0.0-beta4

04 Sep 04:38
468b761

Choose a tag to compare

v3.0.0-beta4 Pre-release
Pre-release

#382 via #395: Identifiable causes exceptions in Post
#39 via #378: Deeply Nested Inclusions. Thanks @NullVoxPopuli for all the help landing this!

v3.0.0-beta3

04 Sep 03:46
c1bf919

Choose a tag to compare

v3.0.0-beta3 Pre-release
Pre-release

#388 Exact Error Codes for Error Collections thanks @rtablada !
#387 Additional filter operations: isnull and isnotnull thanks @NullVoxPopuli !

Usage

This change introduces two new filter operators isnull and isnotnull. Like all other operators, it is appended by a colon (:), however, any value provided after the colon is ignored.

GET /api/v1/todo-items?filter[updated-date]=isnull: HTTP/1.1
Accept: application/vnd.api+json

v2.5.2

30 Aug 04:50

Choose a tag to compare

#388: Exact Error Codes for Error Collections, back-ported by release/2.5.2. Thanks @rtablada !

v3.0.0-beta2

13 Aug 03:14
5ea9a17

Choose a tag to compare

v3.0.0-beta2 Pre-release
Pre-release

#377: Fix TypeLocator bug that results in app crashing at startup

v3.0.0-beta1

12 Aug 05:35
d5ee796

Choose a tag to compare

v3.0.0-beta1 Pre-release
Pre-release

#241 via #376 Auto Resource/Service Discovery