Skip to content
Closed
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 README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ The following steps describe how to create a JSON:API project.
public class Person : Identifiable<long>
{
[Attr] public string? FirstName { get; set; }
[Attr] public string LastName { get; set; } = null!;
[Attr] public required string LastName { get; set; }
[HasMany] public ISet<Person> Children { get; set; } = new HashSet<Person>();
}
```
Expand Down
22 changes: 11 additions & 11 deletions benchmarks/Deserialization/DeserializationBenchmarkBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public sealed class IncomingResource : Identifiable<long>
public float? Attribute05 { get; set; }

[Attr]
public string Attribute06 { get; set; } = null!;
public required string Attribute06 { get; set; }

[Attr]
public DateTime? Attribute07 { get; set; }
Expand All @@ -104,33 +104,33 @@ public sealed class IncomingResource : Identifiable<long>
public DayOfWeek Attribute10 { get; set; }

[HasOne]
public IncomingResource Single1 { get; set; } = null!;
public required IncomingResource Single1 { get; set; }

[HasOne]
public IncomingResource Single2 { get; set; } = null!;
public required IncomingResource Single2 { get; set; }

[HasOne]
public IncomingResource Single3 { get; set; } = null!;
public required IncomingResource Single3 { get; set; }

[HasOne]
public IncomingResource Single4 { get; set; } = null!;
public required IncomingResource Single4 { get; set; }

[HasOne]
public IncomingResource Single5 { get; set; } = null!;
public required IncomingResource Single5 { get; set; }

[HasMany]
public ISet<IncomingResource> Multi1 { get; set; } = null!;
public required ISet<IncomingResource> Multi1 { get; set; }

[HasMany]
public ISet<IncomingResource> Multi2 { get; set; } = null!;
public required ISet<IncomingResource> Multi2 { get; set; }

[HasMany]
public ISet<IncomingResource> Multi3 { get; set; } = null!;
public required ISet<IncomingResource> Multi3 { get; set; }

[HasMany]
public ISet<IncomingResource> Multi4 { get; set; } = null!;
public required ISet<IncomingResource> Multi4 { get; set; }

[HasMany]
public ISet<IncomingResource> Multi5 { get; set; } = null!;
public required ISet<IncomingResource> Multi5 { get; set; }
}
}
2 changes: 1 addition & 1 deletion benchmarks/Serialization/SerializationBenchmarkBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public sealed class OutgoingResource : Identifiable<long>
public float? Attribute05 { get; set; }

[Attr]
public string Attribute06 { get; set; } = null!;
public required string Attribute06 { get; set; }

[Attr]
public DateTime? Attribute07 { get; set; }
Expand Down
4 changes: 2 additions & 2 deletions docs/home/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ <h4 class="title">Resource</h4>
{
[Attr]
[MaxLength(30)]
public string Title { get; set; } = null!;
public required string Title { get; set; }

[Attr(Capabilities = AttrCapabilities.AllowFilter)]
public string? Summary { get; set; }
Expand All @@ -205,7 +205,7 @@ <h4 class="title">Resource</h4>
public DateTimeOffset LastModifiedAt { get; set; }

[HasOne]
public Person Author { get; set; } = null!;
public required required Person Author { get; set; }

[HasOne]
public Person? Reviewer { get; set; }
Expand Down
6 changes: 3 additions & 3 deletions docs/usage/common-pitfalls.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Now let's try to define the resource classes:
public sealed class WebCustomer : Identifiable<long>
{
[Attr]
public string Name { get; set; } = null!;
public required string Name { get; set; }

[HasOne]
public LoginAccount? Account { get; set; }
Expand All @@ -27,7 +27,7 @@ public sealed class WebCustomer : Identifiable<long>
public sealed class AdminCustomer : Identifiable<long>
{
[Attr]
public string Name { get; set; } = null!;
public required string Name { get; set; }

[Attr]
public string? CreditRating { get; set; }
Expand All @@ -40,7 +40,7 @@ public sealed class AdminCustomer : Identifiable<long>
public sealed class LoginAccount : Identifiable<long>
{
[Attr]
public string EmailAddress { get; set; } = null!;
public required string EmailAddress { get; set; }

[HasOne]
public ??? Customer { get; set; }
Expand Down
4 changes: 2 additions & 2 deletions docs/usage/options.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,13 +141,13 @@ public class Person : Identifiable<long>
{
[Attr]
[MinLength(3)]
public string FirstName { get; set; } = null!;
public required string FirstName { get; set; }

[Attr]
[Required]
public int? Age { get; set; }

[HasOne]
public LoginAccount Account { get; set; } = null!;
public required LoginAccount Account { get; set; }
}
```
4 changes: 2 additions & 2 deletions docs/usage/resources/attributes.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class Person : Identifiable<long>
public string? FirstName { get; set; }

[Attr]
public string LastName { get; set; } = null!;
public required string LastName { get; set; }
}
```

Expand Down Expand Up @@ -54,7 +54,7 @@ Otherwise, the attribute is silently omitted.
public class User : Identifiable<long>
{
[Attr(Capabilities = ~AttrCapabilities.AllowView)]
public string Password { get; set; } = null!;
public required string Password { get; set; }
}
```

Expand Down
2 changes: 1 addition & 1 deletion docs/usage/resources/inheritance.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Resource classes can be part of a type hierarchy. For example:
public abstract class Human : Identifiable<long>
{
[Attr]
public string Name { get; set; } = null!;
public required string Name { get; set; }

[HasOne]
public Man? Father { get; set; }
Expand Down
4 changes: 2 additions & 2 deletions docs/usage/resources/nullability.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,13 @@ Example:
public sealed class Label : Identifiable<long>
{
[Attr]
public string Name { get; set; } = null!;
public required string Name { get; set; }

[Attr]
public string? RgbColor { get; set; }

[HasOne]
public Person Creator { get; set; } = null!;
public required Person Creator { get; set; }

[HasOne]
public Label? Parent { get; set; }
Expand Down
14 changes: 7 additions & 7 deletions docs/usage/resources/relationships.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ The next example defines that each car requires an engine, while an engine is op
public sealed class Car : Identifiable<long>
{
[HasOne]
public Engine Engine { get; set; } = null!;
public required Engine Engine { get; set; }
}

public sealed class Engine : Identifiable<long>
Expand Down Expand Up @@ -264,7 +264,7 @@ There are two ways the exposed relationship name is determined:
public class TodoItem : Identifiable<long>
{
[HasOne(PublicName = "item-owner")]
public Person Owner { get; set; } = null!;
public required Person Owner { get; set; }
}
```

Expand Down Expand Up @@ -297,7 +297,7 @@ Otherwise, the relationship (and its related resources, when included) are silen
public class User : Identifiable<long>
{
[HasOne(Capabilities = ~HasOneCapabilities.AllowView)]
public LoginAccount Account { get; set; } = null!;
public required LoginAccount Account { get; set; }
}
```

Expand Down Expand Up @@ -339,7 +339,7 @@ Indicates whether POST and PATCH requests can replace the relationship. When sen
public class User : Identifiable<long>
{
[HasOne(Capabilities = ~HasOneCapabilities.AllowSet)]
public LoginAccount Account { get; set; } = null!;
public required LoginAccount Account { get; set; }
}
```

Expand Down Expand Up @@ -400,7 +400,7 @@ So for the calculated property to be evaluated correctly, the related entity mus
public class ShippingAddress : Identifiable<long>
{
[Attr]
public string Street { get; set; } = null!;
public required string Street { get; set; }

[Attr]
public string? CountryName => Country?.DisplayName;
Expand All @@ -412,7 +412,7 @@ public class ShippingAddress : Identifiable<long>

public class Country
{
public string IsoCode { get; set; } = null!;
public string DisplayName { get; set; } = null!;
public required string IsoCode { get; set; }
public required string DisplayName { get; set; }
}
```
2 changes: 1 addition & 1 deletion src/Examples/DapperExample/Models/LoginAccount.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace DapperExample.Models;
public sealed class LoginAccount : Identifiable<long>
{
[Attr]
public string UserName { get; set; } = null!;
public required string UserName { get; set; }

public DateTimeOffset? LastUsedAt { get; set; }

Expand Down
2 changes: 1 addition & 1 deletion src/Examples/DapperExample/Models/Person.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public sealed class Person : Identifiable<long>
public string? FirstName { get; set; }

[Attr]
public string LastName { get; set; } = null!;
public required string LastName { get; set; }

// Mistakenly includes AllowFilter, so we can test for the error produced.
[Attr(Capabilities = AttrCapabilities.AllowView | AttrCapabilities.AllowFilter)]
Expand Down
2 changes: 1 addition & 1 deletion src/Examples/DapperExample/Models/Tag.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public sealed class Tag : Identifiable<long>
{
[Attr]
[MinLength(1)]
public string Name { get; set; } = null!;
public required string Name { get; set; }

[HasOne]
public RgbColor? Color { get; set; }
Expand Down
4 changes: 2 additions & 2 deletions src/Examples/DapperExample/Models/TodoItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace DapperExample.Models;
public sealed class TodoItem : Identifiable<long>
{
[Attr]
public string Description { get; set; } = null!;
public required string Description { get; set; }

[Attr]
[Required]
Expand All @@ -26,7 +26,7 @@ public sealed class TodoItem : Identifiable<long>
public DateTimeOffset? LastModifiedAt { get; set; }

[HasOne]
public Person Owner { get; set; } = null!;
public required Person Owner { get; set; }

[HasOne]
public Person? Assignee { get; set; }
Expand Down
6 changes: 3 additions & 3 deletions src/Examples/DatabasePerTenantExample/Models/Employee.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ namespace DatabasePerTenantExample.Models;
public sealed class Employee : Identifiable<Guid>
{
[Attr]
public string FirstName { get; set; } = null!;
public required string FirstName { get; set; }

[Attr]
public string LastName { get; set; } = null!;
public required string LastName { get; set; }

[Attr]
public string CompanyName { get; set; } = null!;
public required string CompanyName { get; set; }
}
4 changes: 2 additions & 2 deletions src/Examples/GettingStarted/Models/Book.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ namespace GettingStarted.Models;
public sealed class Book : Identifiable<long>
{
[Attr]
public string Title { get; set; } = null!;
public required string Title { get; set; }

[Attr]
public int PublishYear { get; set; }

[HasOne]
public Person Author { get; set; } = null!;
public required Person Author { get; set; }
}
2 changes: 1 addition & 1 deletion src/Examples/GettingStarted/Models/Person.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace GettingStarted.Models;
public sealed class Person : Identifiable<long>
{
[Attr]
public string Name { get; set; } = null!;
public required string Name { get; set; }

[HasMany]
public ICollection<Book> Books { get; set; } = new List<Book>();
Expand Down
2 changes: 1 addition & 1 deletion src/Examples/JsonApiDotNetCoreExample/Models/Person.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public sealed class Person : Identifiable<long>
public string? FirstName { get; set; }

[Attr]
public string LastName { get; set; } = null!;
public required string LastName { get; set; }

[Attr(Capabilities = AttrCapabilities.AllowView)]
[NotMapped]
Expand Down
2 changes: 1 addition & 1 deletion src/Examples/JsonApiDotNetCoreExample/Models/Tag.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public sealed class Tag : Identifiable<long>
{
[Attr]
[MinLength(1)]
public string Name { get; set; } = null!;
public required string Name { get; set; }

[HasMany]
public ISet<TodoItem> TodoItems { get; set; } = new HashSet<TodoItem>();
Expand Down
4 changes: 2 additions & 2 deletions src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace JsonApiDotNetCoreExample.Models;
public sealed class TodoItem : Identifiable<long>
{
[Attr]
public string Description { get; set; } = null!;
public required string Description { get; set; }

[Attr]
[Required]
Expand All @@ -26,7 +26,7 @@ public sealed class TodoItem : Identifiable<long>
public DateTimeOffset? LastModifiedAt { get; set; }

[HasOne]
public Person Owner { get; set; } = null!;
public required Person Owner { get; set; }

[HasOne]
public Person? Assignee { get; set; }
Expand Down
2 changes: 1 addition & 1 deletion src/Examples/NoEntityFrameworkExample/Models/Person.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public sealed class Person : Identifiable<long>
public string? FirstName { get; set; }

[Attr]
public string LastName { get; set; } = null!;
public required string LastName { get; set; }

[Attr(Capabilities = AttrCapabilities.AllowView)]
[NotMapped]
Expand Down
2 changes: 1 addition & 1 deletion src/Examples/NoEntityFrameworkExample/Models/Tag.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public sealed class Tag : Identifiable<long>
{
[Attr]
[MinLength(1)]
public string Name { get; set; } = null!;
public required string Name { get; set; }

[HasMany]
public ISet<TodoItem> TodoItems { get; set; } = new HashSet<TodoItem>();
Expand Down
4 changes: 2 additions & 2 deletions src/Examples/NoEntityFrameworkExample/Models/TodoItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace NoEntityFrameworkExample.Models;
public sealed class TodoItem : Identifiable<long>
{
[Attr]
public string Description { get; set; } = null!;
public required string Description { get; set; }

[Attr]
[Required]
Expand All @@ -21,7 +21,7 @@ public sealed class TodoItem : Identifiable<long>
public long? DurationInHours { get; set; }

[HasOne]
public Person Owner { get; set; } = null!;
public required Person Owner { get; set; }

[HasOne]
public Person? Assignee { get; set; }
Expand Down
4 changes: 2 additions & 2 deletions src/Examples/ReportsExample/Models/Report.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ namespace ReportsExample.Models;
public sealed class Report : Identifiable<long>
{
[Attr]
public string Title { get; set; } = null!;
public required string Title { get; set; }

[Attr]
public ReportStatistics Statistics { get; set; } = null!;
public required ReportStatistics Statistics { get; set; }
}
Loading