Add group suggestions feature with API endpoints and frontend integration
Implemented new API endpoints for suggesting groups based on the current library, allowing admins to retrieve and create groups from suggestions. Updated the backend to include error handling for suggestions and added necessary DTOs. Enhanced the frontend with new API functions and UI components to display suggestions, improving the user experience for group management. Localization updates were made to support new features in both English and Russian.
This commit is contained in:
@@ -10,6 +10,7 @@ using TeleWave.Application.Programming.Groups.ListGroups;
|
||||
using TeleWave.Application.Programming.Groups.RemoveGroupItem;
|
||||
using TeleWave.Application.Programming.Groups.ReorderGroup;
|
||||
using TeleWave.Application.Programming.Groups.SetGroupItemWeight;
|
||||
using TeleWave.Application.Programming.Groups.Suggest;
|
||||
using TeleWave.Application.Programming.Groups.UpdateGroup;
|
||||
using TeleWave.Infrastructure.Identity;
|
||||
|
||||
@@ -34,6 +35,12 @@ public static class GroupEndpoints
|
||||
.MapPost("/{id:guid}/candidates", FindCandidates)
|
||||
.Produces<IReadOnlyList<GroupCandidateDto>>();
|
||||
|
||||
// Предложения: что имеет смысл завести группой при нынешней библиотеке.
|
||||
admin.MapGet("/suggestions", Suggestions).Produces<IReadOnlyList<GroupSuggestionDto>>();
|
||||
admin
|
||||
.MapPost("/suggestions", CreateFromSuggestion)
|
||||
.Produces<CreatedIdResponse>(StatusCodes.Status201Created);
|
||||
|
||||
admin.MapPost("/{id:guid}/items", AddElements).Produces<AddedCountResponse>();
|
||||
admin
|
||||
.MapDelete("/{id:guid}/items/{itemId:guid}", RemoveItem)
|
||||
@@ -80,6 +87,33 @@ public static class GroupEndpoints
|
||||
: result.ToHttpResult();
|
||||
}
|
||||
|
||||
private static async Task<IResult> Suggestions(
|
||||
ISender sender,
|
||||
CancellationToken cancellationToken
|
||||
)
|
||||
{
|
||||
var result = await sender.Send(new SuggestGroupsQuery(), cancellationToken);
|
||||
return Results.Ok(result);
|
||||
}
|
||||
|
||||
private static async Task<IResult> CreateFromSuggestion(
|
||||
CreateGroupFromSuggestionBody body,
|
||||
ISender sender,
|
||||
CancellationToken cancellationToken
|
||||
)
|
||||
{
|
||||
var result = await sender.Send(
|
||||
new CreateGroupFromSuggestionCommand(body.Key),
|
||||
cancellationToken
|
||||
);
|
||||
return result.IsSuccess
|
||||
? Results.Created(
|
||||
$"/api/admin/groups/{result.Value}",
|
||||
new CreatedIdResponse(result.Value)
|
||||
)
|
||||
: result.ToHttpResult();
|
||||
}
|
||||
|
||||
private static async Task<IResult> UpdateGroup(
|
||||
Guid id,
|
||||
UpdateGroupBody body,
|
||||
@@ -179,6 +213,8 @@ public sealed record UpdateGroupBody(string Name, string? Description, GroupFilt
|
||||
|
||||
public sealed record FindCandidatesBody(GroupFilter? Filter);
|
||||
|
||||
public sealed record CreateGroupFromSuggestionBody(string Key);
|
||||
|
||||
public sealed record AddGroupElementsBody(IReadOnlyList<GroupElementRef> Elements);
|
||||
|
||||
public sealed record GroupItemWeightBody(int Weight);
|
||||
|
||||
Reference in New Issue
Block a user