From 992db8f0cf17de6ede7e27dfe3ce06f861b94f16 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Thu, 18 Mar 2021 19:52:42 +0100 Subject: [PATCH 1/2] Adds support for free-format client-generated IDs, by introducing MongoStringIdentifiable side-by-side with MongoObjectIdentifiable (formerly MongoIdentifiable), both implementing the marker interface IMongoIdentifiable. --- src/Examples/GettingStarted/Models/Book.cs | 2 +- .../Models/TodoItem.cs | 2 +- .../Resources/IMongoIdentifiable.cs | 11 ++++++++ ...tifiable.cs => MongoObjectIdentifiable.cs} | 5 ++-- .../Resources/MongoStringIdentifiable.cs | 28 +++++++++++++++++++ ...ationshipsResponseResourceObjectBuilder.cs | 4 +-- ...reateResourceWithClientGeneratedIdTests.cs | 4 +-- .../AtomicOperations/Lyric.cs | 2 +- .../AtomicOperations/MusicTrack.cs | 2 +- .../AtomicOperations/Performer.cs | 2 +- .../AtomicOperations/Playlist.cs | 2 +- .../AtomicOperations/RecordCompany.cs | 2 +- .../AtomicOperations/TextLanguage.cs | 2 +- .../IntegrationTests/Meta/SupportTicket.cs | 2 +- .../QueryStrings/AccountPreferences.cs | 2 +- .../QueryStrings/Appointment.cs | 2 +- .../IntegrationTests/QueryStrings/Blog.cs | 2 +- .../IntegrationTests/QueryStrings/BlogPost.cs | 2 +- .../IntegrationTests/QueryStrings/Calendar.cs | 2 +- .../IntegrationTests/QueryStrings/Comment.cs | 2 +- .../Filtering/FilterableResource.cs | 2 +- .../IntegrationTests/QueryStrings/Label.cs | 2 +- .../QueryStrings/WebAccount.cs | 2 +- ...reateResourceWithClientGeneratedIdTests.cs | 4 +-- .../IntegrationTests/ReadWrite/RgbColor.cs | 2 +- .../IntegrationTests/ReadWrite/UserAccount.cs | 2 +- .../IntegrationTests/ReadWrite/WorkItem.cs | 2 +- .../ReadWrite/WorkItemGroup.cs | 2 +- .../IntegrationTests/ReadWrite/WorkTag.cs | 2 +- .../ResourceDefinitions/CallableResource.cs | 2 +- .../MongoQueryableExtensions.cs | 6 ++-- 31 files changed, 74 insertions(+), 36 deletions(-) create mode 100644 src/JsonApiDotNetCore.MongoDb/Resources/IMongoIdentifiable.cs rename src/JsonApiDotNetCore.MongoDb/Resources/{MongoIdentifiable.cs => MongoObjectIdentifiable.cs} (72%) create mode 100644 src/JsonApiDotNetCore.MongoDb/Resources/MongoStringIdentifiable.cs diff --git a/src/Examples/GettingStarted/Models/Book.cs b/src/Examples/GettingStarted/Models/Book.cs index 063b2f7..eac2413 100644 --- a/src/Examples/GettingStarted/Models/Book.cs +++ b/src/Examples/GettingStarted/Models/Book.cs @@ -5,7 +5,7 @@ namespace GettingStarted.Models { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class Book : MongoIdentifiable + public sealed class Book : MongoObjectIdentifiable { [Attr] public string Title { get; set; } diff --git a/src/Examples/JsonApiDotNetCoreMongoDbExample/Models/TodoItem.cs b/src/Examples/JsonApiDotNetCoreMongoDbExample/Models/TodoItem.cs index 42962c2..d1dc2c2 100644 --- a/src/Examples/JsonApiDotNetCoreMongoDbExample/Models/TodoItem.cs +++ b/src/Examples/JsonApiDotNetCoreMongoDbExample/Models/TodoItem.cs @@ -6,7 +6,7 @@ namespace JsonApiDotNetCoreMongoDbExample.Models { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class TodoItem : MongoIdentifiable + public sealed class TodoItem : MongoObjectIdentifiable { [Attr] public string Description { get; set; } diff --git a/src/JsonApiDotNetCore.MongoDb/Resources/IMongoIdentifiable.cs b/src/JsonApiDotNetCore.MongoDb/Resources/IMongoIdentifiable.cs new file mode 100644 index 0000000..d1c110c --- /dev/null +++ b/src/JsonApiDotNetCore.MongoDb/Resources/IMongoIdentifiable.cs @@ -0,0 +1,11 @@ +using JsonApiDotNetCore.Resources; + +namespace JsonApiDotNetCore.MongoDb.Resources +{ + /// + /// Marker interface to indicate a resource that is stored in MongoDB. + /// + public interface IMongoIdentifiable : IIdentifiable + { + } +} diff --git a/src/JsonApiDotNetCore.MongoDb/Resources/MongoIdentifiable.cs b/src/JsonApiDotNetCore.MongoDb/Resources/MongoObjectIdentifiable.cs similarity index 72% rename from src/JsonApiDotNetCore.MongoDb/Resources/MongoIdentifiable.cs rename to src/JsonApiDotNetCore.MongoDb/Resources/MongoObjectIdentifiable.cs index ded90d5..630b47d 100644 --- a/src/JsonApiDotNetCore.MongoDb/Resources/MongoIdentifiable.cs +++ b/src/JsonApiDotNetCore.MongoDb/Resources/MongoObjectIdentifiable.cs @@ -1,13 +1,12 @@ -using JsonApiDotNetCore.Resources; using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; namespace JsonApiDotNetCore.MongoDb.Resources { /// - /// A convenient basic implementation of for use with MongoDB models. + /// Basic implementation of a JSON:API resource whose Id is stored as a 12-byte hexadecimal ObjectId in MongoDB. /// - public abstract class MongoIdentifiable : IIdentifiable + public abstract class MongoObjectIdentifiable : IMongoIdentifiable { /// [BsonId] diff --git a/src/JsonApiDotNetCore.MongoDb/Resources/MongoStringIdentifiable.cs b/src/JsonApiDotNetCore.MongoDb/Resources/MongoStringIdentifiable.cs new file mode 100644 index 0000000..383d582 --- /dev/null +++ b/src/JsonApiDotNetCore.MongoDb/Resources/MongoStringIdentifiable.cs @@ -0,0 +1,28 @@ +using MongoDB.Bson.Serialization.Attributes; +using MongoDB.Bson.Serialization.IdGenerators; + +namespace JsonApiDotNetCore.MongoDb.Resources +{ + /// + /// Basic implementation of a JSON:API resource whose Id is stored as a free-format string in MongoDB. + /// Intended for resources that are created using client-generated IDs. + /// + public abstract class MongoStringIdentifiable : IMongoIdentifiable + { + /// + [BsonId(IdGenerator = typeof(StringObjectIdGenerator))] + public virtual string Id { get; set; } + + /// + [BsonIgnore] + public string StringId + { + get => Id; + set => Id = value; + } + + /// + [BsonIgnore] + public string LocalId { get; set; } + } +} diff --git a/src/JsonApiDotNetCore.MongoDb/Serialization/Building/IgnoreRelationshipsResponseResourceObjectBuilder.cs b/src/JsonApiDotNetCore.MongoDb/Serialization/Building/IgnoreRelationshipsResponseResourceObjectBuilder.cs index 87171e0..4a23cf3 100644 --- a/src/JsonApiDotNetCore.MongoDb/Serialization/Building/IgnoreRelationshipsResponseResourceObjectBuilder.cs +++ b/src/JsonApiDotNetCore.MongoDb/Serialization/Building/IgnoreRelationshipsResponseResourceObjectBuilder.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.MongoDb.Resources; using JsonApiDotNetCore.Queries; @@ -22,7 +22,7 @@ public IgnoreRelationshipsResponseResourceObjectBuilder(ILinkBuilder linkBuilder /// protected override RelationshipEntry GetRelationshipData(RelationshipAttribute relationship, IIdentifiable resource) { - if (resource is MongoIdentifiable) + if (resource is IMongoIdentifiable) { return null; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs index 6ef4930..92d5f17 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs @@ -32,7 +32,7 @@ public async Task Can_create_resource_with_client_generated_string_ID_having_sid { // Arrange TextLanguage newLanguage = _fakers.TextLanguage.Generate(); - newLanguage.Id = "507f191e810c19729de860ea"; + newLanguage.Id = "free-format-client-generated-id"; await _testContext.RunOnDatabaseAsync(async db => { @@ -88,7 +88,7 @@ public async Task Can_create_resource_with_client_generated_string_ID_having_no_ { // Arrange MusicTrack newTrack = _fakers.MusicTrack.Generate(); - newTrack.Id = "5ffcc0d1d69a27c92b8c62dd"; + newTrack.Id = "free-format-client-generated-id"; await _testContext.RunOnDatabaseAsync(async db => { diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Lyric.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Lyric.cs index c9a23f4..afacade 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Lyric.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Lyric.cs @@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.AtomicOperations { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class Lyric : MongoIdentifiable + public sealed class Lyric : MongoObjectIdentifiable { [Attr] public string Format { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/MusicTrack.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/MusicTrack.cs index 25a1b7f..8443052 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/MusicTrack.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/MusicTrack.cs @@ -9,7 +9,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.AtomicOperations { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class MusicTrack : MongoIdentifiable + public sealed class MusicTrack : MongoStringIdentifiable { [RegularExpression(@"(?im)^[{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$")] public override string Id { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Performer.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Performer.cs index 5d15d9c..2f17e9d 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Performer.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Performer.cs @@ -6,7 +6,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.AtomicOperations { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class Performer : MongoIdentifiable + public sealed class Performer : MongoObjectIdentifiable { [Attr] public string ArtistName { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Playlist.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Playlist.cs index e76652d..190ea31 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Playlist.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/Playlist.cs @@ -8,7 +8,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.AtomicOperations { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class Playlist : MongoIdentifiable + public sealed class Playlist : MongoObjectIdentifiable { [Attr] [Required] diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/RecordCompany.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/RecordCompany.cs index 0295252..e5a4ce8 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/RecordCompany.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/RecordCompany.cs @@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.AtomicOperations { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class RecordCompany : MongoIdentifiable + public sealed class RecordCompany : MongoObjectIdentifiable { [Attr] public string Name { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/TextLanguage.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/TextLanguage.cs index 84d1288..b0194a1 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/TextLanguage.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/AtomicOperations/TextLanguage.cs @@ -8,7 +8,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.AtomicOperations { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class TextLanguage : MongoIdentifiable + public sealed class TextLanguage : MongoStringIdentifiable { [Attr] public string IsoCode { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/Meta/SupportTicket.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/Meta/SupportTicket.cs index aaee7e8..237d02a 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/Meta/SupportTicket.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/Meta/SupportTicket.cs @@ -5,7 +5,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.Meta { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class SupportTicket : MongoIdentifiable + public sealed class SupportTicket : MongoObjectIdentifiable { [Attr] public string Description { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/AccountPreferences.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/AccountPreferences.cs index 5f3de6e..d4b552d 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/AccountPreferences.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/AccountPreferences.cs @@ -5,7 +5,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.QueryStrings { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class AccountPreferences : MongoIdentifiable + public sealed class AccountPreferences : MongoObjectIdentifiable { [Attr] public bool UseDarkTheme { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Appointment.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Appointment.cs index a9fd483..972baef 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Appointment.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Appointment.cs @@ -6,7 +6,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.QueryStrings { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class Appointment : MongoIdentifiable + public sealed class Appointment : MongoObjectIdentifiable { [Attr] public string Title { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Blog.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Blog.cs index 7ef49d6..135b50a 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Blog.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Blog.cs @@ -8,7 +8,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.QueryStrings { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class Blog : MongoIdentifiable + public sealed class Blog : MongoObjectIdentifiable { [Attr] public string Title { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/BlogPost.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/BlogPost.cs index 4678864..c05f458 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/BlogPost.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/BlogPost.cs @@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.QueryStrings { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class BlogPost : MongoIdentifiable + public sealed class BlogPost : MongoObjectIdentifiable { [Attr] public string Caption { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Calendar.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Calendar.cs index 1298699..02aad93 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Calendar.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Calendar.cs @@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.QueryStrings { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class Calendar : MongoIdentifiable + public sealed class Calendar : MongoObjectIdentifiable { [Attr] public string TimeZone { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Comment.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Comment.cs index a475835..594e481 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Comment.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Comment.cs @@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.QueryStrings { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class Comment : MongoIdentifiable + public sealed class Comment : MongoObjectIdentifiable { [Attr] public string Text { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Filtering/FilterableResource.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Filtering/FilterableResource.cs index ad4fdb8..6c0b7f4 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Filtering/FilterableResource.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Filtering/FilterableResource.cs @@ -8,7 +8,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.QueryStrings.Filtering { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class FilterableResource : MongoIdentifiable + public sealed class FilterableResource : MongoObjectIdentifiable { [Attr] public string SomeString { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Label.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Label.cs index e5624b9..d631865 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Label.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/Label.cs @@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.QueryStrings { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class Label : MongoIdentifiable + public sealed class Label : MongoObjectIdentifiable { [Attr] public string Name { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/WebAccount.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/WebAccount.cs index 34cb170..3bf6471 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/WebAccount.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/QueryStrings/WebAccount.cs @@ -8,7 +8,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.QueryStrings { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class WebAccount : MongoIdentifiable + public sealed class WebAccount : MongoObjectIdentifiable { [Attr] public string UserName { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs index 8193d4d..5347c61 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs @@ -31,7 +31,7 @@ public async Task Can_create_resource_with_client_generated_string_ID_having_no_ { // Arrange RgbColor newColor = _fakers.RgbColor.Generate(); - newColor.Id = "507f191e810c19729de860ea"; + newColor.Id = "free-format-client-generated-id"; var requestBody = new { @@ -72,7 +72,7 @@ public async Task Can_create_resource_with_client_generated_string_ID_having_sid { // Arrange WorkItemGroup newGroup = _fakers.WorkItemGroup.Generate(); - newGroup.Id = "5ffcc0d1d69a27c92b8c62dd"; + newGroup.Id = "free-format-client-generated-id"; var requestBody = new { diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/RgbColor.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/RgbColor.cs index c1c8148..bb84ade 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/RgbColor.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/RgbColor.cs @@ -6,7 +6,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.ReadWrite { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class RgbColor : MongoIdentifiable + public sealed class RgbColor : MongoStringIdentifiable { [Attr] public string DisplayName { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/UserAccount.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/UserAccount.cs index 97f87b4..a26873f 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/UserAccount.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/UserAccount.cs @@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.ReadWrite { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class UserAccount : MongoIdentifiable + public sealed class UserAccount : MongoObjectIdentifiable { [Attr] public string FirstName { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkItem.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkItem.cs index 1ae2ae7..16edd2d 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkItem.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkItem.cs @@ -8,7 +8,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.ReadWrite { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class WorkItem : MongoIdentifiable + public sealed class WorkItem : MongoObjectIdentifiable { [Attr] public string Description { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkItemGroup.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkItemGroup.cs index 0755abd..82dedba 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkItemGroup.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkItemGroup.cs @@ -8,7 +8,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.ReadWrite { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class WorkItemGroup : MongoIdentifiable + public sealed class WorkItemGroup : MongoStringIdentifiable { [Attr] public string Name { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkTag.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkTag.cs index 8c6f8fc..85720b8 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkTag.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ReadWrite/WorkTag.cs @@ -5,7 +5,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.ReadWrite { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class WorkTag : MongoIdentifiable + public sealed class WorkTag : MongoObjectIdentifiable { [Attr] public string Text { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ResourceDefinitions/CallableResource.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ResourceDefinitions/CallableResource.cs index 8946883..6d1973d 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ResourceDefinitions/CallableResource.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/IntegrationTests/ResourceDefinitions/CallableResource.cs @@ -8,7 +8,7 @@ namespace JsonApiDotNetCoreMongoDbExampleTests.IntegrationTests.ResourceDefinitions { [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class CallableResource : MongoIdentifiable + public sealed class CallableResource : MongoObjectIdentifiable { [Attr] public string Label { get; set; } diff --git a/test/JsonApiDotNetCoreMongoDbExampleTests/TestBuildingBlocks/MongoQueryableExtensions.cs b/test/JsonApiDotNetCoreMongoDbExampleTests/TestBuildingBlocks/MongoQueryableExtensions.cs index d7c9e58..8f85667 100644 --- a/test/JsonApiDotNetCoreMongoDbExampleTests/TestBuildingBlocks/MongoQueryableExtensions.cs +++ b/test/JsonApiDotNetCoreMongoDbExampleTests/TestBuildingBlocks/MongoQueryableExtensions.cs @@ -1,7 +1,7 @@ using System; using System.Threading; using System.Threading.Tasks; -using JsonApiDotNetCore.Resources; +using JsonApiDotNetCore.MongoDb.Resources; using MongoDB.Driver.Linq; namespace JsonApiDotNetCoreMongoDbExampleTests.TestBuildingBlocks @@ -10,7 +10,7 @@ internal static class MongoQueryableExtensions { public static async Task FirstWithIdAsync(this IMongoQueryable resources, TId id, CancellationToken cancellationToken = default) - where TResource : IIdentifiable + where TResource : IMongoIdentifiable { TResource firstOrDefault = await resources.FirstOrDefaultAsync(resource => Equals(resource.Id, id), cancellationToken); @@ -24,7 +24,7 @@ public static async Task FirstWithIdAsync(this IMongo public static Task FirstWithIdOrDefaultAsync(this IMongoQueryable resources, TId id, CancellationToken cancellationToken = default) - where TResource : IIdentifiable + where TResource : IMongoIdentifiable { return resources.FirstOrDefaultAsync(resource => Equals(resource.Id, id), cancellationToken); } From abdbe1497fd7bdd10f1c4401e9d9332d3aac7d32 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Fri, 19 Mar 2021 09:49:56 +0100 Subject: [PATCH 2/2] Automated code cleanup --- .../Resources/MongoStringIdentifiable.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/JsonApiDotNetCore.MongoDb/Resources/MongoStringIdentifiable.cs b/src/JsonApiDotNetCore.MongoDb/Resources/MongoStringIdentifiable.cs index 383d582..5426c5d 100644 --- a/src/JsonApiDotNetCore.MongoDb/Resources/MongoStringIdentifiable.cs +++ b/src/JsonApiDotNetCore.MongoDb/Resources/MongoStringIdentifiable.cs @@ -4,8 +4,8 @@ namespace JsonApiDotNetCore.MongoDb.Resources { /// - /// Basic implementation of a JSON:API resource whose Id is stored as a free-format string in MongoDB. - /// Intended for resources that are created using client-generated IDs. + /// Basic implementation of a JSON:API resource whose Id is stored as a free-format string in MongoDB. Intended for resources that are created using + /// client-generated IDs. /// public abstract class MongoStringIdentifiable : IMongoIdentifiable {