From 096f368aecb1c612ace2e10760babc7f3d9019dc Mon Sep 17 00:00:00 2001 From: FantasyTeddy Date: Fri, 5 Jan 2024 09:37:23 +0100 Subject: [PATCH 1/4] Cleanup project files and fix some build warnings --- Postgrest/Attributes/ReferenceAttribute.cs | 1 - Postgrest/Client.cs | 1 + Postgrest/Hooks.cs | 1 + Postgrest/Postgrest.csproj | 16 ++++++---------- PostgrestExample/PostgrestExample.csproj | 6 ++---- PostgrestTests/PostgrestTests.csproj | 9 +-------- 6 files changed, 11 insertions(+), 23 deletions(-) diff --git a/Postgrest/Attributes/ReferenceAttribute.cs b/Postgrest/Attributes/ReferenceAttribute.cs index 15b4de1..70408c4 100644 --- a/Postgrest/Attributes/ReferenceAttribute.cs +++ b/Postgrest/Attributes/ReferenceAttribute.cs @@ -97,7 +97,6 @@ public ReferenceAttribute(Type model, JoinType joinType, bool includeInQuery = t /// Model referenced /// Should referenced be included in queries? /// As to whether the query will filter top-level rows. - /// The Property Name on the C# Model /// Column this attribute references as specified in Postgres, DOES NOT need to be set if is set. /// Foreign Key this attribute references as specified in Postgres (only required if the model references the same table multiple times) /// diff --git a/Postgrest/Client.cs b/Postgrest/Client.cs index dd8f698..96e973e 100644 --- a/Postgrest/Client.cs +++ b/Postgrest/Client.cs @@ -95,6 +95,7 @@ public Client(string baseUrl, ClientOptions? options = null) GetHeaders = GetHeaders }; + /// public IPostgrestTableWithCache Table(IPostgrestCacheProvider cacheProvider) where T : BaseModel, new() => new TableWithCache(BaseUrl, cacheProvider, SerializerSettings(Options), Options) diff --git a/Postgrest/Hooks.cs b/Postgrest/Hooks.cs index 43f1ef5..e1bf25c 100644 --- a/Postgrest/Hooks.cs +++ b/Postgrest/Hooks.cs @@ -70,6 +70,7 @@ public void ClearRequestPreparedHandlers() /// /// Notifies all listeners. /// + /// /// /// /// diff --git a/Postgrest/Postgrest.csproj b/Postgrest/Postgrest.csproj index 912b34e..2fda978 100644 --- a/Postgrest/Postgrest.csproj +++ b/Postgrest/Postgrest.csproj @@ -1,4 +1,3 @@ - netstandard2.0 @@ -36,25 +35,22 @@ 3.4.0 - - + $(VersionPrefix)-$(VersionSuffix) $(VersionPrefix) - + - - - + + - - - + + diff --git a/PostgrestExample/PostgrestExample.csproj b/PostgrestExample/PostgrestExample.csproj index 1a718bb..847e7f7 100644 --- a/PostgrestExample/PostgrestExample.csproj +++ b/PostgrestExample/PostgrestExample.csproj @@ -1,12 +1,10 @@  Exe - netcoreapp3.1 - 3.1.3 - - + net8.0;net48 latest + diff --git a/PostgrestTests/PostgrestTests.csproj b/PostgrestTests/PostgrestTests.csproj index d8646e3..7954cf7 100644 --- a/PostgrestTests/PostgrestTests.csproj +++ b/PostgrestTests/PostgrestTests.csproj @@ -1,20 +1,13 @@  - + net8.0 false - 3.1.3 - net7.0 - - - enable latest CS8600;CS8602;CS8603 - - From a68fe5138cc4c38e91e9b924195b24daed91d5ee Mon Sep 17 00:00:00 2001 From: FantasyTeddy Date: Fri, 5 Jan 2024 10:27:24 +0100 Subject: [PATCH 2/4] Fix nullability warnings in tests --- PostgrestTests/ClientTests.cs | 68 +++++++------------ PostgrestTests/Models/ForeignKeyTestModel.cs | 6 +- PostgrestTests/Models/LinkedModels.cs | 6 +- .../Models/NestedForeignKeyTestModel.cs | 4 +- 4 files changed, 32 insertions(+), 52 deletions(-) diff --git a/PostgrestTests/ClientTests.cs b/PostgrestTests/ClientTests.cs index f0c7a28..9fe1ed4 100644 --- a/PostgrestTests/ClientTests.cs +++ b/PostgrestTests/ClientTests.cs @@ -39,22 +39,21 @@ public void TestQueryParams() } }); - Assert.AreEqual($"{BaseUrl}/users?some-param=foo&other-param=bar", - (client.Table() as Table)!.GenerateUrl()); + Assert.AreEqual($"{BaseUrl}/users?some-param=foo&other-param=bar", client.Table().GenerateUrl()); } [TestMethod("will use TableAttribute")] public void TestTableAttribute() { var client = new Client(BaseUrl); - Assert.AreEqual($"{BaseUrl}/users", (client.Table() as Table)!.GenerateUrl()); + Assert.AreEqual($"{BaseUrl}/users", client.Table().GenerateUrl()); } [TestMethod("will default to Class.name in absence of TableAttribute")] public void TestTableAttributeDefault() { var client = new Client(BaseUrl); - Assert.AreEqual($"{BaseUrl}/Stub", (client.Table() as Table)!.GenerateUrl()); + Assert.AreEqual($"{BaseUrl}/Stub", client.Table().GenerateUrl()); } [TestMethod("will set header from options")] @@ -76,7 +75,7 @@ public void TestQueryApiKey() { "apikey", "some-key" } } }); - Assert.AreEqual($"{BaseUrl}/users?apikey=some-key", (client.Table() as Table)!.GenerateUrl()); + Assert.AreEqual($"{BaseUrl}/users?apikey=some-key", client.Table().GenerateUrl()); } [TestMethod("filters: simple")] @@ -97,7 +96,7 @@ public void TestFiltersSimple() foreach (var pair in dict) { var filter = new QueryFilter("foo", pair.Key, "bar"); - var result = (client.Table() as Table)!.PrepareFilter(filter); + var result = ((Table)client.Table()).PrepareFilter(filter); Assert.AreEqual("foo", result.Key); Assert.AreEqual(pair.Value, result.Value); } @@ -116,7 +115,7 @@ public void TestFiltersLike() foreach (var pair in dict) { var filter = new QueryFilter("foo", pair.Key, "%bar%"); - var result = (client.Table() as Table)!.PrepareFilter(filter); + var result = ((Table)client.Table()).PrepareFilter(filter); Assert.AreEqual("foo", result.Key); Assert.AreEqual(pair.Value, result.Value); } @@ -141,7 +140,7 @@ public void TestFiltersArraysWithLists() { var list = new List { "bar", "buzz" }; var filter = new QueryFilter("foo", pair.Key, list); - var result = (client.Table() as Table)!.PrepareFilter(filter); + var result = ((Table)client.Table()).PrepareFilter(filter); Assert.AreEqual("foo", result.Key); Assert.AreEqual(pair.Value, result.Value); } @@ -168,7 +167,7 @@ public void TestFiltersContainsArraysWithLists() { var list = new List { "bar", "buzz" }; var filter = new QueryFilter("foo", pair.Key, list); - var result = (client.Table() as Table)!.PrepareFilter(filter); + var result = ((Table)client.Table()).PrepareFilter(filter); Assert.AreEqual("foo", result.Key); Assert.AreEqual(pair.Value, result.Value); } @@ -192,7 +191,7 @@ public void TestFiltersArraysWithDictionaries() { var value = new Dictionary { { "bar", 100 }, { "buzz", "zap" } }; var filter = new QueryFilter("foo", pair.Key, value); - var result = (client.Table() as Table)!.PrepareFilter(filter); + var result = ((Table)client.Table()).PrepareFilter(filter); Assert.AreEqual("foo", result.Key); Assert.AreEqual(pair.Value, result.Value); } @@ -217,7 +216,7 @@ public void TestFiltersFullTextSearch() { var config = new FullTextSearchConfig("bar", "english"); var filter = new QueryFilter("foo", pair.Key, config); - var result = (client.Table() as Table)!.PrepareFilter(filter); + var result = ((Table)client.Table()).PrepareFilter(filter); Assert.AreEqual("foo", result.Key); Assert.AreEqual(pair.Value, result.Value); } @@ -242,7 +241,7 @@ public void TestFiltersRanges() { var config = new IntRange(2, 3); var filter = new QueryFilter("foo", pair.Key, config); - var result = (client.Table() as Table)!.PrepareFilter(filter); + var result = ((Table)client.Table()).PrepareFilter(filter); Assert.AreEqual("foo", result.Key); Assert.AreEqual(pair.Value, result.Value); } @@ -254,7 +253,7 @@ public void TestFiltersNot() var client = new Client(BaseUrl); var filter = new QueryFilter("foo", Operator.Equals, "bar"); var notFilter = new QueryFilter(Operator.Not, filter); - var result = (client.Table() as Table)!.PrepareFilter(notFilter); + var result = ((Table)client.Table()).PrepareFilter(notFilter); Assert.AreEqual("foo", result.Key); Assert.AreEqual("not.eq.bar", result.Value); @@ -281,7 +280,7 @@ public void TestFiltersAndOr() foreach (var pair in dict) { var filter = new QueryFilter(pair.Key, filters); - var result = (client.Table() as Table)!.PrepareFilter(filter); + var result = ((Table)client.Table()).PrepareFilter(filter); Assert.AreEqual(pair.Value, $"{result.Key}={result.Value}"); } } @@ -293,21 +292,20 @@ public async Task TestBasicUpdate() var user = await client.Table().Filter("username", Operator.Equals, "supabot").Single(); - if (user != null) - { - // Update user status - user.Status = "OFFLINE"; - var response = await user.Update(); + Assert.IsNotNull(user); - var updatedUser = response.Models.FirstOrDefault(); + // Update user status + user.Status = "OFFLINE"; + var response = await user.Update(); - if (updatedUser == null) - Assert.Fail(); + var updatedUser = response.Models.FirstOrDefault(); - Assert.AreEqual(1, response.Models.Count); - Assert.AreEqual(user.Username, updatedUser.Username); - Assert.AreEqual(user.Status, updatedUser.Status); - } + if (updatedUser == null) + Assert.Fail(); + + Assert.AreEqual(1, response.Models.Count); + Assert.AreEqual(user.Username, updatedUser.Username); + Assert.AreEqual(user.Status, updatedUser.Status); } @@ -1133,24 +1131,6 @@ public async Task TestCancellationToken() } } - private string? GetEnumMemberAttrValue(T enumVal) - { - var enumType = typeof(T); - var memInfo = enumType.GetMember(enumVal!.ToString()!); - - if (memInfo == null) - throw new ArgumentException("Supplied enum value is unknown."); - - var attr = memInfo.FirstOrDefault()?.GetCustomAttributes(false).OfType() - .FirstOrDefault(); - if (attr != null) - { - return attr.Value; - } - - return null; - } - [TestMethod("columns")] public async Task TestColumns() { diff --git a/PostgrestTests/Models/ForeignKeyTestModel.cs b/PostgrestTests/Models/ForeignKeyTestModel.cs index 4f43859..bcfbaa4 100644 --- a/PostgrestTests/Models/ForeignKeyTestModel.cs +++ b/PostgrestTests/Models/ForeignKeyTestModel.cs @@ -9,10 +9,10 @@ public class ForeignKeyTestModel : BaseModel [PrimaryKey("id")] public int Id { get; set; } [Reference(typeof(Movie), foreignKey: "foreign_key_test_relation_1")] - public Movie MovieFK1 { get; set; } + public Movie MovieFK1 { get; set; } = null!; [Reference(typeof(Movie), foreignKey: "foreign_key_test_relation_2")] - public Movie MovieFK2 { get; set; } + public Movie MovieFK2 { get; set; } = null!; - [Reference(typeof(Person))] public Person RandomPersonFK { get; set; } + [Reference(typeof(Person))] public Person RandomPersonFK { get; set; } = null!; } \ No newline at end of file diff --git a/PostgrestTests/Models/LinkedModels.cs b/PostgrestTests/Models/LinkedModels.cs index b9ddd64..9e9b7df 100644 --- a/PostgrestTests/Models/LinkedModels.cs +++ b/PostgrestTests/Models/LinkedModels.cs @@ -8,7 +8,7 @@ namespace PostgrestTests.Models; [Table("movie")] public class Movie : BaseModel { - [PrimaryKey("id")] public string Id { get; set; } + [PrimaryKey("id")] public string Id { get; set; } = null!; [Column("name")] public string? Name { get; set; } @@ -29,7 +29,7 @@ public enum MovieStatus [Table("person")] public class Person : BaseModel { - [PrimaryKey("id")] public string Id { get; set; } + [PrimaryKey("id")] public string Id { get; set; } = null!; [Reference(typeof(Movie))] public List Movies { get; set; } = new(); @@ -46,7 +46,7 @@ public class Person : BaseModel [Table("profile")] public class Profile : BaseModel { - [PrimaryKey("person_id", true)] public string PersonId { get; set; } + [PrimaryKey("person_id", true)] public string PersonId { get; set; } = null!; [Reference(typeof(Person))] public Person? Person { get; set; } [Column("email")] public string? Email { get; set; } diff --git a/PostgrestTests/Models/NestedForeignKeyTestModel.cs b/PostgrestTests/Models/NestedForeignKeyTestModel.cs index bfd180e..8d0fbb4 100644 --- a/PostgrestTests/Models/NestedForeignKeyTestModel.cs +++ b/PostgrestTests/Models/NestedForeignKeyTestModel.cs @@ -9,7 +9,7 @@ public class NestedForeignKeyTestModel : BaseModel [PrimaryKey("id")] public int Id { get; set; } [Reference(typeof(ForeignKeyTestModel))] - public ForeignKeyTestModel FKTestModel { get; set; } + public ForeignKeyTestModel FKTestModel { get; set; } = null!; - [Reference(typeof(User))] public User User { get; set; } + [Reference(typeof(User))] public User User { get; set; } = null!; } \ No newline at end of file From c7fee2184a7b530a77b539cc9ed4fcb8834f98b4 Mon Sep 17 00:00:00 2001 From: FantasyTeddy Date: Fri, 5 Jan 2024 10:32:12 +0100 Subject: [PATCH 3/4] Enable nullable referenc types for example project --- PostgrestExample/Models/Message.cs | 6 +++--- PostgrestExample/Models/Movie.cs | 12 ++++++------ PostgrestExample/Models/User.cs | 10 +++++----- PostgrestExample/PostgrestExample.csproj | 1 + 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/PostgrestExample/Models/Message.cs b/PostgrestExample/Models/Message.cs index 1c46a67..fabc148 100644 --- a/PostgrestExample/Models/Message.cs +++ b/PostgrestExample/Models/Message.cs @@ -10,12 +10,12 @@ public class Message : BaseModel public int ChannelId { get; set; } [Column("message")] - public string MessageData { get; set; } + public string MessageData { get; set; } = null!; [Column("data")] - public string Data { get; set; } + public string Data { get; set; } = null!; [Column("username")] - public string Username { get; set; } + public string Username { get; set; } = null!; } } diff --git a/PostgrestExample/Models/Movie.cs b/PostgrestExample/Models/Movie.cs index c4544d5..9f3298b 100644 --- a/PostgrestExample/Models/Movie.cs +++ b/PostgrestExample/Models/Movie.cs @@ -12,10 +12,10 @@ public class Movie : BaseModel public int Id { get; set; } [Column("name")] - public string Name { get; set; } + public string Name { get; set; } = null!; [Reference(typeof(Person))] - public List Persons { get; set; } + public List Persons { get; set; } = new(); [Column("created_at")] @@ -29,13 +29,13 @@ public class Person : BaseModel public int Id { get; set; } [Column("first_name")] - public string FirstName { get; set; } + public string FirstName { get; set; } = null!; [Column("last_name")] - public string LastName { get; set; } + public string LastName { get; set; } = null!; [Reference(typeof(Profile))] - public Profile Profile { get; set; } + public Profile Profile { get; set; } = null!; [Column("created_at")] public DateTime CreatedAt { get; set; } @@ -45,7 +45,7 @@ public class Person : BaseModel public class Profile : BaseModel { [Column("email")] - public string Email { get; set; } + public string Email { get; set; } = null!; } [Table("movie_person")] diff --git a/PostgrestExample/Models/User.cs b/PostgrestExample/Models/User.cs index 010a3d2..e12af20 100644 --- a/PostgrestExample/Models/User.cs +++ b/PostgrestExample/Models/User.cs @@ -9,19 +9,19 @@ namespace PostgrestExample.Models public class User : BaseModel { [PrimaryKey("username")] - public string Username { get; set; } + public string Username { get; set; } = null!; [Column("data")] - public string Data { get; set; } + public string Data { get; set; } = null!; [Column("age_range")] - public IntRange AgeRange { get; set; } + public IntRange AgeRange { get; set; } = null!; [Column("catchphrase")] - public string Catchphrase { get; set; } + public string Catchphrase { get; set; } = null!; [Column("status")] - public string Status { get; set; } + public string Status { get; set; } = null!; [Column("inserted_at")] public DateTime InsertedAt { get; set; } diff --git a/PostgrestExample/PostgrestExample.csproj b/PostgrestExample/PostgrestExample.csproj index 847e7f7..b99899c 100644 --- a/PostgrestExample/PostgrestExample.csproj +++ b/PostgrestExample/PostgrestExample.csproj @@ -3,6 +3,7 @@ Exe net8.0;net48 latest + enable From 57dc092edda24328296bc4d8ed8b8cfcf51f2347 Mon Sep 17 00:00:00 2001 From: FantasyTeddy Date: Fri, 5 Jan 2024 10:40:02 +0100 Subject: [PATCH 4/4] Update NuGet packages --- PostgrestTests/PostgrestTests.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PostgrestTests/PostgrestTests.csproj b/PostgrestTests/PostgrestTests.csproj index 7954cf7..015034e 100644 --- a/PostgrestTests/PostgrestTests.csproj +++ b/PostgrestTests/PostgrestTests.csproj @@ -8,10 +8,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all