Skip to content

v4.0.0-alpha4 #619

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Nov 11, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion benchmarks/Serialization/JsonApiDeserializer_Benchmarks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public JsonApideserializer_Benchmarks() {
public object DeserializeSimpleObject() => _jsonApideserializer.Deserialize<SimpleType>(Content);

private class SimpleType : Identifiable {
[Attr("name")]
[Attr]
public string Name { get; set; }
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@

namespace JsonApiDotNetCoreExample.Controllers
{
public class CamelCasedModelsController : JsonApiController<CamelCasedModel>
public class KebabCasedModelsController : JsonApiController<KebabCasedModel>
{
public CamelCasedModelsController(
public KebabCasedModelsController(
IJsonApiOptions jsonApiOptions,
IResourceService<CamelCasedModel> resourceService,
IResourceService<KebabCasedModel> resourceService,
ILoggerFactory loggerFactory)
: base(jsonApiOptions, resourceService, loggerFactory)
{ }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

namespace JsonApiDotNetCoreExample.Controllers
{
[DisableRoutingConvention, Route("custom/route/todo-items")]
[DisableRoutingConvention, Route("custom/route/todoItems")]
public class TodoItemsCustomController : CustomJsonApiController<TodoItem>
{
public TodoItemsCustomController(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,14 @@ public UsersController(
: base(jsonApiOptions, resourceService, loggerFactory)
{ }
}

public class SuperUsersController : JsonApiController<SuperUser>
{
public SuperUsersController(
IJsonApiOptions jsonApiOptions,
IResourceService<SuperUser> resourceService,
ILoggerFactory loggerFactory)
: base(jsonApiOptions, resourceService, loggerFactory)
{ }
}
}
31 changes: 17 additions & 14 deletions src/Examples/JsonApiDotNetCoreExample/Data/AppDbContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ public class AppDbContext : DbContext
public DbSet<Passport> Passports { get; set; }
public DbSet<Person> People { get; set; }
public DbSet<TodoItemCollection> TodoItemCollections { get; set; }
public DbSet<CamelCasedModel> CamelCasedModels { get; set; }
public DbSet<KebabCasedModel> KebabCasedModels { get; set; }
public DbSet<Article> Articles { get; set; }
public DbSet<Author> Authors { get; set; }
public DbSet<Author> AuthorDifferentDbContextName { get; set; }
public DbSet<NonJsonApiResource> NonJsonApiResources { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<SuperUser> SuperUsers { get; set; }
public DbSet<PersonRole> PersonRoles { get; set; }
public DbSet<ArticleTag> ArticleTags { get; set; }
public DbSet<IdentifiableArticleTag> IdentifiableArticleTags { get; set; }
Expand All @@ -23,6 +24,8 @@ public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SuperUser>().HasBaseType<User>();

modelBuilder.Entity<TodoItem>()
.Property(t => t.CreatedDate).HasDefaultValueSql("CURRENT_TIMESTAMP").IsRequired();

Expand All @@ -43,18 +46,18 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
.HasKey(bc => new { bc.ArticleId, bc.TagId });

modelBuilder.Entity<Person>()
.HasOne(t => t.StakeHolderTodo)
.HasOne(t => t.StakeHolderTodoItem)
.WithMany(t => t.StakeHolders)
.HasForeignKey(t => t.StakeHolderTodoId)
.HasForeignKey(t => t.StakeHolderTodoItemId)
.OnDelete(DeleteBehavior.Cascade);

modelBuilder.Entity<TodoItem>()
.HasOne(t => t.DependentTodoItem);
.HasOne(t => t.DependentOnTodo);

modelBuilder.Entity<TodoItem>()
.HasMany(t => t.ChildrenTodoItems)
.WithOne(t => t.ParentTodoItem)
.HasForeignKey(t => t.ParentTodoItemId);
.HasMany(t => t.ChildrenTodos)
.WithOne(t => t.ParentTodo)
.HasForeignKey(t => t.ParentTodoId);

modelBuilder.Entity<Passport>()
.HasOne(p => p.Person)
Expand All @@ -63,14 +66,14 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
.OnDelete(DeleteBehavior.SetNull);

modelBuilder.Entity<TodoItem>()
.HasOne(p => p.ToOnePerson)
.WithOne(p => p.ToOneTodoItem)
.HasForeignKey<TodoItem>(p => p.ToOnePersonId);
.HasOne(p => p.OneToOnePerson)
.WithOne(p => p.OneToOneTodoItem)
.HasForeignKey<TodoItem>(p => p.OneToOnePersonId);

modelBuilder.Entity<Person>()
.HasOne(p => p.ToOneTodoItem)
.WithOne(p => p.ToOnePerson)
.HasForeignKey<TodoItem>(p => p.ToOnePersonId);
.HasOne(p => p.OneToOneTodoItem)
.WithOne(p => p.OneToOnePerson)
.HasForeignKey<TodoItem>(p => p.OneToOnePersonId);
}
}
}
4 changes: 2 additions & 2 deletions src/Examples/JsonApiDotNetCoreExample/Models/Article.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ namespace JsonApiDotNetCoreExample.Models
{
public class Article : Identifiable
{
[Attr("name")]
[Attr]
public string Name { get; set; }

[HasOne("author")]
[HasOne]
public Author Author { get; set; }
public int AuthorId { get; set; }

Expand Down
4 changes: 2 additions & 2 deletions src/Examples/JsonApiDotNetCoreExample/Models/ArticleTag.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ public class ArticleTag
public class IdentifiableArticleTag : Identifiable
{
public int ArticleId { get; set; }
[HasOne("article")]
[HasOne]
public Article Article { get; set; }

public int TagId { get; set; }
[HasOne("Tag")]
[HasOne]
public Tag Tag { get; set; }

public string SomeMetaData { get; set; }
Expand Down
4 changes: 2 additions & 2 deletions src/Examples/JsonApiDotNetCoreExample/Models/Author.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ namespace JsonApiDotNetCoreExample.Models
{
public class Author : Identifiable
{
[Attr("name")]
[Attr]
public string Name { get; set; }

[HasMany("articles")]
[HasMany]
public List<Article> Articles { get; set; }
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@

namespace JsonApiDotNetCoreExample.Models
{
[Resource("camelCasedModels")]
public class CamelCasedModel : Identifiable
public class KebabCasedModel : Identifiable
{
[Attr("compoundAttr")]
[Attr]
public string CompoundAttr { get; set; }
}
}
4 changes: 2 additions & 2 deletions src/Examples/JsonApiDotNetCoreExample/Models/Passport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ namespace JsonApiDotNetCoreExample.Models
public class Passport : Identifiable
{
public virtual int? SocialSecurityNumber { get; set; }
public virtual bool IsLocked { get; set; }
public virtual bool IsLocked { get; set; }

[HasOne("person")]
[HasOne]
public virtual Person Person { get; set; }
}
}
37 changes: 17 additions & 20 deletions src/Examples/JsonApiDotNetCoreExample/Models/Person.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,51 +6,48 @@ namespace JsonApiDotNetCoreExample.Models
{
public class PersonRole : Identifiable
{
[HasOne("person")]
[HasOne]
public Person Person { get; set; }
}

public class Person : Identifiable, IIsLockable
{
public bool IsLocked { get; set; }

[Attr("first-name")]
[Attr]
public string FirstName { get; set; }

[Attr("last-name")]
[Attr]
public string LastName { get; set; }

[Attr("age")]
[Attr]
public int Age { get; set; }

[HasMany("todo-items")]
[HasMany]
public virtual List<TodoItem> TodoItems { get; set; }

[HasMany("assigned-todo-items")]
[HasMany]
public virtual List<TodoItem> AssignedTodoItems { get; set; }

[HasMany("todo-collections")]
public virtual List<TodoItemCollection> TodoItemCollections { get; set; }
[HasMany]
public virtual List<TodoItemCollection> todoCollections { get; set; }

[HasOne("role")]
[HasOne]
public virtual PersonRole Role { get; set; }
public int? PersonRoleId { get; set; }

[HasOne("one-to-one-todo-item")]
public virtual TodoItem ToOneTodoItem { get; set; }
[HasOne]
public virtual TodoItem OneToOneTodoItem { get; set; }

[HasOne]
public virtual TodoItem StakeHolderTodoItem { get; set; }
public virtual int? StakeHolderTodoItemId { get; set; }

[HasOne("stake-holder-todo-item")]
public virtual TodoItem StakeHolderTodo { get; set; }
public virtual int? StakeHolderTodoId { get; set; }

[HasOne("unincludeable-item", links: Link.All, canInclude: false)]
[HasOne(links: Link.All, canInclude: false)]
public virtual TodoItem UnIncludeableItem { get; set; }

public int? PassportId { get; set; }

[HasOne("passport")]
[HasOne]
public virtual Passport Passport { get; set; }

public int? PassportId { get; set; }
}
}
54 changes: 24 additions & 30 deletions src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,66 +13,60 @@ public TodoItem()

public bool IsLocked { get; set; }

[Attr("description")]
[Attr]
public string Description { get; set; }

[Attr("ordinal")]
[Attr]
public long Ordinal { get; set; }

[Attr("guid-property")]
[Attr]
public Guid GuidProperty { get; set; }

[Attr("created-date")]
[Attr]
public DateTime CreatedDate { get; set; }

[Attr("achieved-date", isFilterable: false, isSortable: false)]
[Attr(isFilterable: false, isSortable: false)]
public DateTime? AchievedDate { get; set; }

[Attr("updated-date")]
[Attr]
public DateTime? UpdatedDate { get; set; }

[Attr("calculated-value", isImmutable: true)]
public string CalculatedValue
{
get => "joe";
}
[Attr(isImmutable: true)]
public string CalculatedValue { get => "calculated"; }

[Attr("offset-date")]
[Attr]
public DateTimeOffset? OffsetDate { get; set; }

public int? OwnerId { get; set; }
public int? AssigneeId { get; set; }
public Guid? CollectionId { get; set; }

[HasOne("owner")]
[HasOne]
public virtual Person Owner { get; set; }

[HasOne("assignee")]
[HasOne]
public virtual Person Assignee { get; set; }

[HasOne("one-to-one-person")]
public virtual Person ToOnePerson { get; set; }
public virtual int? ToOnePersonId { get; set; }

[HasOne]
public virtual Person OneToOnePerson { get; set; }
public virtual int? OneToOnePersonId { get; set; }

[HasMany("stake-holders")]
[HasMany]
public virtual List<Person> StakeHolders { get; set; }

[HasOne("collection")]
[HasOne]
public virtual TodoItemCollection Collection { get; set; }


// cyclical to-one structure
public virtual int? DependentTodoItemId { get; set; }
[HasOne("dependent-on-todo")]
public virtual TodoItem DependentTodoItem { get; set; }

public virtual int? DependentOnTodoId { get; set; }
[HasOne]
public virtual TodoItem DependentOnTodo { get; set; }

// cyclical to-many structure
public virtual int? ParentTodoItemId {get; set;}
[HasOne("parent-todo")]
public virtual TodoItem ParentTodoItem { get; set; }
[HasMany("children-todos")]
public virtual List<TodoItem> ChildrenTodoItems { get; set; }
public virtual int? ParentTodoId {get; set;}
[HasOne]
public virtual TodoItem ParentTodo { get; set; }
[HasMany]
public virtual List<TodoItem> ChildrenTodos { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@

namespace JsonApiDotNetCoreExample.Models
{
[Resource("todo-collections")]
[Resource("todoCollections")]
public class TodoItemCollection : Identifiable<Guid>
{
[Attr("name")]
[Attr]
public string Name { get; set; }

[HasMany("todo-items")]
[HasMany]
public virtual List<TodoItem> TodoItems { get; set; }

[HasOne("owner")]
[HasOne]
public virtual Person Owner { get; set; }

public int? OwnerId { get; set; }
Expand Down
5 changes: 5 additions & 0 deletions src/Examples/JsonApiDotNetCoreExample/Models/User.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,9 @@ public class User : Identifiable
[Attr] public string Username { get; set; }
[Attr] public string Password { get; set; }
}

public class SuperUser : User
{
[Attr] public int SecurityLevel { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public override QueryFilters GetQueryFilters()
{
return new QueryFilters
{
{ "first-character", (users, queryFilter) => FirstCharacterFilter(users, queryFilter) }
{ "firstCharacter", (users, queryFilter) => FirstCharacterFilter(users, queryFilter) }
};
}

Expand Down
Loading