Skip to content
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
1 change: 0 additions & 1 deletion Postgrest/Attributes/ReferenceAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ public ReferenceAttribute(Type model, JoinType joinType, bool includeInQuery = t
/// <param name="model">Model referenced</param>
/// <param name="includeInQuery">Should referenced be included in queries?</param>
/// <param name="useInnerJoin">As to whether the query will filter top-level rows.</param>
/// <param name="propertyName">The Property Name on the C# Model</param>
/// <param name="columnName">Column this attribute references as specified in Postgres, DOES NOT need to be set if <see cref="ForeignKey"/> is set.</param>
/// <param name="foreignKey">Foreign Key this attribute references as specified in Postgres (only required if the model references the same table multiple times)</param>
/// <exception cref="Exception"></exception>
Expand Down
1 change: 1 addition & 0 deletions Postgrest/Client.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ public Client(string baseUrl, ClientOptions? options = null)
GetHeaders = GetHeaders
};

/// <inheritdoc />
public IPostgrestTableWithCache<T> Table<T>(IPostgrestCacheProvider cacheProvider)
where T : BaseModel, new() =>
new TableWithCache<T>(BaseUrl, cacheProvider, SerializerSettings(Options), Options)
Expand Down
1 change: 1 addition & 0 deletions Postgrest/Hooks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ public void ClearRequestPreparedHandlers()
/// <summary>
/// Notifies all listeners.
/// </summary>
/// <param name="sender"></param>
/// <param name="clientOptions"></param>
/// <param name="method"></param>
/// <param name="url"></param>
Expand Down
16 changes: 6 additions & 10 deletions Postgrest/Postgrest.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
Expand Down Expand Up @@ -36,25 +35,22 @@

<PropertyGroup Condition=" '$(Version)' == '' ">
<VersionPrefix Condition=" '$(VersionPrefix)' == '' ">3.4.0</VersionPrefix>
<VersionSuffix Condition=" '$(VersionSuffix)' == '' ">
</VersionSuffix>
<VersionSuffix Condition=" '$(VersionSuffix)' == '' "></VersionSuffix>
<Version Condition=" '$(VersionSuffix)' != '' ">$(VersionPrefix)-$(VersionSuffix)</Version>
<Version Condition=" '$(Version)' == '' ">$(VersionPrefix)</Version>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All"/>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
<PackageReference Include="supabase-core" Version="0.0.3"/>
<PackageReference Include="System.Linq.Expressions" Version="4.3.0"/>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="supabase-core" Version="0.0.3" />
</ItemGroup>

<ItemGroup>
<Folder Include="Converters\"/>
<None Include="..\.github\icon.png" Pack="true" Link="icon.png" PackagePath="\"/>
<None Include="..\README.md" Pack="true" Link="README.md" PackagePath="\"/>
<None Include="..\.github\icon.png" Pack="true" Link="icon.png" PackagePath="\" />
<None Include="..\README.md" Pack="true" Link="README.md" PackagePath="\" />
</ItemGroup>
</Project>
6 changes: 3 additions & 3 deletions PostgrestExample/Models/Message.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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!;
}
}
12 changes: 6 additions & 6 deletions PostgrestExample/Models/Movie.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Person> Persons { get; set; }
public List<Person> Persons { get; set; } = new();


[Column("created_at")]
Expand All @@ -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; }
Expand All @@ -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")]
Expand Down
10 changes: 5 additions & 5 deletions PostgrestExample/Models/User.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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; }
Expand Down
7 changes: 3 additions & 4 deletions PostgrestExample/PostgrestExample.csproj
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<ReleaseVersion>3.1.3</ReleaseVersion>
</PropertyGroup>
<PropertyGroup>
<TargetFrameworks>net8.0;net48</TargetFrameworks>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Postgrest\Postgrest.csproj" />
</ItemGroup>
Expand Down
68 changes: 24 additions & 44 deletions PostgrestTests/ClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,21 @@ public void TestQueryParams()
}
});

Assert.AreEqual($"{BaseUrl}/users?some-param=foo&other-param=bar",
(client.Table<User>() as Table<User>)!.GenerateUrl());
Assert.AreEqual($"{BaseUrl}/users?some-param=foo&other-param=bar", client.Table<User>().GenerateUrl());
}

[TestMethod("will use TableAttribute")]
public void TestTableAttribute()
{
var client = new Client(BaseUrl);
Assert.AreEqual($"{BaseUrl}/users", (client.Table<User>() as Table<User>)!.GenerateUrl());
Assert.AreEqual($"{BaseUrl}/users", client.Table<User>().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<Stub>() as Table<Stub>)!.GenerateUrl());
Assert.AreEqual($"{BaseUrl}/Stub", client.Table<Stub>().GenerateUrl());
}

[TestMethod("will set header from options")]
Expand All @@ -76,7 +75,7 @@ public void TestQueryApiKey()
{ "apikey", "some-key" }
}
});
Assert.AreEqual($"{BaseUrl}/users?apikey=some-key", (client.Table<User>() as Table<User>)!.GenerateUrl());
Assert.AreEqual($"{BaseUrl}/users?apikey=some-key", client.Table<User>().GenerateUrl());
}

[TestMethod("filters: simple")]
Expand All @@ -97,7 +96,7 @@ public void TestFiltersSimple()
foreach (var pair in dict)
{
var filter = new QueryFilter("foo", pair.Key, "bar");
var result = (client.Table<User>() as Table<User>)!.PrepareFilter(filter);
var result = ((Table<User>)client.Table<User>()).PrepareFilter(filter);
Assert.AreEqual("foo", result.Key);
Assert.AreEqual(pair.Value, result.Value);
}
Expand All @@ -116,7 +115,7 @@ public void TestFiltersLike()
foreach (var pair in dict)
{
var filter = new QueryFilter("foo", pair.Key, "%bar%");
var result = (client.Table<User>() as Table<User>)!.PrepareFilter(filter);
var result = ((Table<User>)client.Table<User>()).PrepareFilter(filter);
Assert.AreEqual("foo", result.Key);
Assert.AreEqual(pair.Value, result.Value);
}
Expand All @@ -141,7 +140,7 @@ public void TestFiltersArraysWithLists()
{
var list = new List<object> { "bar", "buzz" };
var filter = new QueryFilter("foo", pair.Key, list);
var result = (client.Table<User>() as Table<User>)!.PrepareFilter(filter);
var result = ((Table<User>)client.Table<User>()).PrepareFilter(filter);
Assert.AreEqual("foo", result.Key);
Assert.AreEqual(pair.Value, result.Value);
}
Expand All @@ -168,7 +167,7 @@ public void TestFiltersContainsArraysWithLists()
{
var list = new List<object> { "bar", "buzz" };
var filter = new QueryFilter("foo", pair.Key, list);
var result = (client.Table<User>() as Table<User>)!.PrepareFilter(filter);
var result = ((Table<User>)client.Table<User>()).PrepareFilter(filter);
Assert.AreEqual("foo", result.Key);
Assert.AreEqual(pair.Value, result.Value);
}
Expand All @@ -192,7 +191,7 @@ public void TestFiltersArraysWithDictionaries()
{
var value = new Dictionary<string, object> { { "bar", 100 }, { "buzz", "zap" } };
var filter = new QueryFilter("foo", pair.Key, value);
var result = (client.Table<User>() as Table<User>)!.PrepareFilter(filter);
var result = ((Table<User>)client.Table<User>()).PrepareFilter(filter);
Assert.AreEqual("foo", result.Key);
Assert.AreEqual(pair.Value, result.Value);
}
Expand All @@ -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<User>() as Table<User>)!.PrepareFilter(filter);
var result = ((Table<User>)client.Table<User>()).PrepareFilter(filter);
Assert.AreEqual("foo", result.Key);
Assert.AreEqual(pair.Value, result.Value);
}
Expand All @@ -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<User>() as Table<User>)!.PrepareFilter(filter);
var result = ((Table<User>)client.Table<User>()).PrepareFilter(filter);
Assert.AreEqual("foo", result.Key);
Assert.AreEqual(pair.Value, result.Value);
}
Expand All @@ -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<User>() as Table<User>)!.PrepareFilter(notFilter);
var result = ((Table<User>)client.Table<User>()).PrepareFilter(notFilter);

Assert.AreEqual("foo", result.Key);
Assert.AreEqual("not.eq.bar", result.Value);
Expand All @@ -281,7 +280,7 @@ public void TestFiltersAndOr()
foreach (var pair in dict)
{
var filter = new QueryFilter(pair.Key, filters);
var result = (client.Table<User>() as Table<User>)!.PrepareFilter(filter);
var result = ((Table<User>)client.Table<User>()).PrepareFilter(filter);
Assert.AreEqual(pair.Value, $"{result.Key}={result.Value}");
}
}
Expand All @@ -293,21 +292,20 @@ public async Task TestBasicUpdate()

var user = await client.Table<User>().Filter("username", Operator.Equals, "supabot").Single();

if (user != null)
{
// Update user status
user.Status = "OFFLINE";
var response = await user.Update<User>();
Assert.IsNotNull(user);

var updatedUser = response.Models.FirstOrDefault();
// Update user status
user.Status = "OFFLINE";
var response = await user.Update<User>();

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);
}


Expand Down Expand Up @@ -1133,24 +1131,6 @@ public async Task TestCancellationToken()
}
}

private string? GetEnumMemberAttrValue<T>(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<EnumMemberAttribute>()
.FirstOrDefault();
if (attr != null)
{
return attr.Value;
}

return null;
}

[TestMethod("columns")]
public async Task TestColumns()
{
Expand Down
6 changes: 3 additions & 3 deletions PostgrestTests/Models/ForeignKeyTestModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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!;
}
6 changes: 3 additions & 3 deletions PostgrestTests/Models/LinkedModels.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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; }

Expand All @@ -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<Movie> Movies { get; set; } = new();

Expand All @@ -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; }
Expand Down
4 changes: 2 additions & 2 deletions PostgrestTests/Models/NestedForeignKeyTestModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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!;
}
Loading