Add project files.
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
using JSMR.Application.Circles.Ports;
|
||||
|
||||
namespace JSMR.Application.Circles.Commands.UpdateCircleStatus;
|
||||
|
||||
public class UpdateCircleStatusHandler(ICircleWriter writer)
|
||||
{
|
||||
public Task<UpdateCircleStatusResponse> HandleAsync(UpdateCircleStatusRequest request, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return writer.UpdateStatusAsync(request, cancellationToken);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
using JSMR.Application.Circles.Contracts;
|
||||
|
||||
namespace JSMR.Application.Circles.Commands.UpdateCircleStatus;
|
||||
|
||||
public sealed record UpdateCircleStatusRequest(int CircleId, CircleStatus CircleStatus);
|
||||
@@ -0,0 +1,5 @@
|
||||
using JSMR.Application.Circles.Contracts;
|
||||
|
||||
namespace JSMR.Application.Circles.Commands.UpdateCircleStatus;
|
||||
|
||||
public sealed record UpdateCircleStatusResponse(int CircleId, CircleStatus CircleStatus);
|
||||
9
JSMR.Application/Circles/Contracts/CircleStatus.cs
Normal file
9
JSMR.Application/Circles/Contracts/CircleStatus.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace JSMR.Application.Circles.Contracts;
|
||||
|
||||
public enum CircleStatus
|
||||
{
|
||||
Neutral,
|
||||
Favorite,
|
||||
Blacklisted,
|
||||
Spam
|
||||
}
|
||||
6
JSMR.Application/Circles/Ports/ICircleReader.cs
Normal file
6
JSMR.Application/Circles/Ports/ICircleReader.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace JSMR.Application.Circles.Ports;
|
||||
|
||||
public interface ICircleReader
|
||||
{
|
||||
|
||||
}
|
||||
8
JSMR.Application/Circles/Ports/ICircleWriter.cs
Normal file
8
JSMR.Application/Circles/Ports/ICircleWriter.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using JSMR.Application.Circles.Commands.UpdateCircleStatus;
|
||||
|
||||
namespace JSMR.Application.Circles.Ports;
|
||||
|
||||
public interface ICircleWriter
|
||||
{
|
||||
Task<UpdateCircleStatusResponse> UpdateStatusAsync(UpdateCircleStatusRequest request, CancellationToken cancellationToken = default);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
namespace JSMR.Application.Circles.Queries.GetCreators;
|
||||
|
||||
public sealed record CircleCreatorItem(
|
||||
string CreatorName,
|
||||
DateTime? FirstCollaborationDate,
|
||||
DateTime? LastCollaborationDate,
|
||||
int Downloads,
|
||||
int Count)
|
||||
{
|
||||
public readonly int AverageDownloads = Downloads / Count;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace JSMR.Application.Circles.Queries.GetCreators;
|
||||
|
||||
public sealed class GetCircleCreatorsHandler(ICircleCreatorsProvider provider)
|
||||
{
|
||||
public Task<GetCircleCreatorsResponse> HandleAsync(GetCircleCreatorsRequest request, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return provider.HandleAsync(request, cancellationToken);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace JSMR.Application.Circles.Queries.GetCreators;
|
||||
|
||||
public sealed record GetCircleCreatorsRequest(int? CircleId, string? NameOrMakerId);
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace JSMR.Application.Circles.Queries.GetCreators;
|
||||
|
||||
public sealed record GetCircleCreatorsResponse(IReadOnlyList<CircleCreatorItem> Items);
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace JSMR.Application.Circles.Queries.GetCreators;
|
||||
|
||||
public interface ICircleCreatorsProvider
|
||||
{
|
||||
Task<GetCircleCreatorsResponse> HandleAsync(GetCircleCreatorsRequest request, CancellationToken cancellationToken = default);
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace JSMR.Application.Circles.Queries.GetTags;
|
||||
|
||||
public sealed record CircleTagItem(string TagName, string? EnglishTagName, int Count);
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace JSMR.Application.Circles.Queries.GetTags;
|
||||
|
||||
public sealed class GetCircleTagsHandler(ICircleTagsProvider provider)
|
||||
{
|
||||
public Task<GetCircleTagsResponse> HandleAsync(GetCircleTagsRequest request, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return provider.HandleAsync(request, cancellationToken);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace JSMR.Application.Circles.Queries.GetTags;
|
||||
|
||||
public sealed record GetCircleTagsRequest(int? CircleId, string? NameOrMakerId);
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace JSMR.Application.Circles.Queries.GetTags;
|
||||
|
||||
public sealed record GetCircleTagsResponse(IReadOnlyList<CircleTagItem> Items);
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace JSMR.Application.Circles.Queries.GetTags;
|
||||
|
||||
public interface ICircleTagsProvider
|
||||
{
|
||||
Task<GetCircleTagsResponse> HandleAsync(GetCircleTagsRequest request, CancellationToken cancellationToken = default);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace JSMR.Application.Circles.Queries.Search;
|
||||
|
||||
public class CircleSearchCriteria
|
||||
{
|
||||
public string? Name { get; init; }
|
||||
}
|
||||
19
JSMR.Application/Circles/Queries/Search/CircleSearchItem.cs
Normal file
19
JSMR.Application/Circles/Queries/Search/CircleSearchItem.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
namespace JSMR.Application.Circles.Queries.Search;
|
||||
|
||||
public record CircleSearchItem
|
||||
{
|
||||
public int CircleId { get; init; }
|
||||
public string Name { get; init; } = string.Empty;
|
||||
public string MakerId { get; init; } = string.Empty;
|
||||
public bool Blacklisted { get; init; }
|
||||
public bool Favorite { get; init; }
|
||||
public bool Spam { get; init; }
|
||||
public int Downloads { get; init; }
|
||||
public int Releases { get; init; }
|
||||
public int Pending { get; init; }
|
||||
public DateTime? FirstReleaseDate { get; init; }
|
||||
public DateTime? LatestReleaseDate { get; init; }
|
||||
public string? LatestProductId { get; init; }
|
||||
public bool? LatestVoiceWorkHasImage { get; init; }
|
||||
public DateTime? LatestVoiceWorkSalesDate { get; init; }
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
using JSMR.Application.Common.Search;
|
||||
|
||||
namespace JSMR.Application.Circles.Queries.Search;
|
||||
|
||||
//public record TagSearchOptions : SearchOptions<TagSearchCriteria, TagSortField>
|
||||
//{
|
||||
|
||||
//}
|
||||
@@ -0,0 +1,8 @@
|
||||
using JSMR.Application.Common.Search;
|
||||
|
||||
namespace JSMR.Application.Circles.Queries.Search;
|
||||
|
||||
public record CircleSearchResults : SearchResult<CircleSearchItem>
|
||||
{
|
||||
|
||||
}
|
||||
10
JSMR.Application/Circles/Queries/Search/CircleSortField.cs
Normal file
10
JSMR.Application/Circles/Queries/Search/CircleSortField.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace JSMR.Application.Circles.Queries.Search;
|
||||
|
||||
public enum CircleSortField
|
||||
{
|
||||
Name,
|
||||
Blacklisted,
|
||||
Favorite,
|
||||
Spam,
|
||||
VoiceWorkCount
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
using JSMR.Application.Common.Search;
|
||||
|
||||
namespace JSMR.Application.Circles.Queries.Search;
|
||||
|
||||
public interface ICircleSearchProvider : ISearchProvider<CircleSearchItem, CircleSearchCriteria, CircleSortField>
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using JSMR.Application.Common.Search;
|
||||
|
||||
namespace JSMR.Application.Circles.Queries.Search;
|
||||
|
||||
public sealed class SearchCirclesHandler(ICircleSearchProvider searchProvider)
|
||||
{
|
||||
public async Task<SearchCirclesResponse> HandleAsync(SearchCirclesRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
SearchOptions<CircleSearchCriteria, CircleSortField> searchOptions = request.Options;
|
||||
|
||||
SearchResult<CircleSearchItem> results = await searchProvider.SearchAsync(searchOptions, cancellationToken);
|
||||
|
||||
return new SearchCirclesResponse(results);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
using JSMR.Application.Common.Search;
|
||||
|
||||
namespace JSMR.Application.Circles.Queries.Search;
|
||||
|
||||
public sealed record SearchCirclesRequest(SearchOptions<CircleSearchCriteria, CircleSortField> Options);
|
||||
@@ -0,0 +1,5 @@
|
||||
using JSMR.Application.Common.Search;
|
||||
|
||||
namespace JSMR.Application.Circles.Queries.Search;
|
||||
|
||||
public sealed record SearchCirclesResponse(SearchResult<CircleSearchItem> Results);
|
||||
Reference in New Issue
Block a user