Skip to content

Commit 99dd578

Browse files
committed
add facets
1 parent 33046a2 commit 99dd578

File tree

5 files changed

+124
-12
lines changed

5 files changed

+124
-12
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using Modrinth.Models.Facets;
2+
using Newtonsoft.Json;
3+
4+
namespace Modrinth.Net.Test;
5+
6+
[TestFixture]
7+
public class FacetCollectionTests
8+
{
9+
[Test]
10+
public void CollectionWithOnlyOneFacet()
11+
{
12+
var collection = new FacetCollection();
13+
collection.Add(Facet.Category("test"));
14+
Assert.That(collection.ToString(), Is.EqualTo("[[\"category:test\"]]"));
15+
}
16+
17+
[Test]
18+
public void CollectionWithMultipleFacets_OR()
19+
{
20+
var collection = new FacetCollection();
21+
collection.Add(Facet.Category("test"), Facet.Category("test2"));
22+
Assert.That(collection.ToString(), Is.EqualTo("[[\"category:test\",\"category:test2\"]]"));
23+
}
24+
25+
[Test]
26+
public void CollectionWithMultipleFacets_AND()
27+
{
28+
var collection = new FacetCollection();
29+
collection.Add(Facet.Category("test"));
30+
collection.Add(Facet.Category("test2"));
31+
Assert.That(collection.ToString(), Is.EqualTo("[[\"category:test\"],[\"category:test2\"]]"));
32+
}
33+
34+
[Test]
35+
public void CollectionWithMultipleFacets_AND_OR()
36+
{
37+
var collection = new FacetCollection();
38+
collection.Add(Facet.Category("test"));
39+
collection.Add(Facet.Category("test2"), Facet.Category("test3"));
40+
Assert.That(collection.ToString(), Is.EqualTo("[[\"category:test\"],[\"category:test2\",\"category:test3\"]]"));
41+
}
42+
}

Modrinth.Net.Test/Modrinth.Net.Test.csproj

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Flurl" Version="3.0.7"/>
13-
<PackageReference Include="Flurl.Http" Version="3.2.4"/>
14-
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0"/>
15-
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0"/>
16-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1"/>
17-
<PackageReference Include="NUnit" Version="3.13.3"/>
18-
<PackageReference Include="NUnit3TestAdapter" Version="4.3.1"/>
12+
<PackageReference Include="Flurl" Version="3.0.7" />
13+
<PackageReference Include="Flurl.Http" Version="3.2.4" />
14+
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
15+
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
16+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
17+
<PackageReference Include="NUnit" Version="3.13.3" />
18+
<PackageReference Include="NUnit3TestAdapter" Version="4.3.1" />
1919
<PackageReference Include="NUnit.Analyzers" Version="3.5.0">
2020
<PrivateAssets>all</PrivateAssets>
2121
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
@@ -27,11 +27,11 @@
2727
</ItemGroup>
2828

2929
<ItemGroup>
30-
<ProjectReference Include="..\Modrinth.Net\Modrinth.Net.csproj"/>
30+
<ProjectReference Include="..\Modrinth.Net\Modrinth.Net.csproj" />
3131
</ItemGroup>
3232

3333
<ItemGroup>
34-
<None Include="appsettings.json" CopyToOutputDirectory="Always"/>
34+
<None Include="appsettings.json" CopyToOutputDirectory="Always" />
3535
</ItemGroup>
3636

3737
</Project>

Modrinth.Net/Models/Facets/Facet.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
namespace Modrinth.Models.Facets;
2+
3+
public class Facet
4+
{
5+
public FacetType Type { get; }
6+
public string Value { get; }
7+
8+
private Facet(FacetType type, string value)
9+
{
10+
Type = type;
11+
Value = value;
12+
}
13+
14+
public static Facet Category(string value) => new(FacetType.Categories, value);
15+
16+
public static Facet Version(string value) => new(FacetType.Versions, value);
17+
18+
public static Facet License(string value) => new(FacetType.License, value);
19+
20+
public static Facet ProjectType(string value) => new(FacetType.ProjectType, value);
21+
22+
public override string ToString()
23+
{
24+
return Type switch
25+
{
26+
FacetType.Categories => $"category:{Value}",
27+
FacetType.Versions => $"version:{Value}",
28+
FacetType.License => $"license:{Value}",
29+
FacetType.ProjectType => $"project_type:{Value}",
30+
_ => string.Empty
31+
};
32+
}
33+
}
34+
35+
public enum FacetType
36+
{
37+
Categories,
38+
Versions,
39+
License,
40+
ProjectType
41+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
namespace Modrinth.Models.Facets;
2+
3+
public class FacetCollection
4+
{
5+
private readonly List<Facet[]> _facets = new();
6+
7+
/// <summary>
8+
/// Adds a facets to the collection, it will be added as a new group
9+
/// Facets in a group are OR'd together
10+
/// Facets in different groups are AND'd together
11+
/// </summary>
12+
/// <param name="facets"></param>
13+
public void Add(params Facet[] facets)
14+
{
15+
if (facets.Length == 0)
16+
return;
17+
_facets.Add(facets);
18+
}
19+
20+
public override string ToString()
21+
{
22+
// Serialize the facets into a Javascript array
23+
var serializedFacets = _facets.Select(
24+
facets =>
25+
$"[{string.Join(',', facets.Select(facet => $"\"{facet}\""))}]");
26+
27+
return $"[{string.Join(',', serializedFacets)}]";
28+
}
29+
}

Modrinth.Net/Modrinth.Net.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
</ItemGroup>
2626

2727
<ItemGroup>
28-
<PackageReference Include="Flurl" Version="3.0.7"/>
29-
<PackageReference Include="Flurl.Http" Version="3.2.4"/>
30-
<PackageReference Include="Newtonsoft.Json" Version="13.0.2"/>
28+
<PackageReference Include="Flurl" Version="3.0.7" />
29+
<PackageReference Include="Flurl.Http" Version="3.2.4" />
30+
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
3131
</ItemGroup>
3232

3333
</Project>

0 commit comments

Comments
 (0)