Refactor user and media endpoints: remove unused GetUser and GetMedia methods, streamline AdminUserEndpoints and MediaEndpoints, and enhance metadata handling in MetadataEndpoints. Update Program.cs to remove legacy image relocation logic and improve overall code clarity.
This commit is contained in:
@@ -1,7 +0,0 @@
|
||||
using LiteCqrs;
|
||||
using TeleWave.Application.Common.Interfaces;
|
||||
using TeleWave.Application.Common.Models;
|
||||
|
||||
namespace TeleWave.Application.Admin.Users.GetUser;
|
||||
|
||||
public sealed record GetUserQuery(Guid Id) : IQuery<Result<UserSummaryDto>>;
|
||||
@@ -1,20 +0,0 @@
|
||||
using LiteCqrs;
|
||||
using TeleWave.Application.Common.Interfaces;
|
||||
using TeleWave.Application.Common.Models;
|
||||
|
||||
namespace TeleWave.Application.Admin.Users.GetUser;
|
||||
|
||||
public sealed class GetUserQueryHandler(IIdentityService identityService)
|
||||
: IQueryHandler<GetUserQuery, Result<UserSummaryDto>>
|
||||
{
|
||||
public async Task<Result<UserSummaryDto>> Handle(
|
||||
GetUserQuery query,
|
||||
CancellationToken cancellationToken
|
||||
)
|
||||
{
|
||||
var user = await identityService.GetUserAsync(query.Id, cancellationToken);
|
||||
return user is null
|
||||
? Result.Failure<UserSummaryDto>(UserErrors.NotFound)
|
||||
: Result.Success(user);
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Options;
|
||||
using TeleWave.Application.Broadcast.Bumpers;
|
||||
using TeleWave.Application.Common.Interfaces;
|
||||
using TeleWave.Application.Streaming;
|
||||
using TeleWave.Domain.Broadcast;
|
||||
using TeleWave.Domain.Broadcast.Scheduling;
|
||||
using TeleWave.Domain.Media;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace TeleWave.Application.Broadcast.Scheduling;
|
||||
|
||||
|
||||
@@ -3,6 +3,4 @@ namespace TeleWave.Application.Common.Interfaces;
|
||||
public interface ICurrentUser
|
||||
{
|
||||
Guid? UserId { get; }
|
||||
string? UserName { get; }
|
||||
bool IsAuthenticated { get; }
|
||||
}
|
||||
|
||||
@@ -2,13 +2,7 @@ using TeleWave.Application.Common.Models;
|
||||
|
||||
namespace TeleWave.Application.Common.Interfaces;
|
||||
|
||||
public sealed record CurrentUserProfile(
|
||||
Guid Id,
|
||||
string UserName,
|
||||
Guid RoleId,
|
||||
string Role,
|
||||
bool IsBlocked
|
||||
);
|
||||
public sealed record CurrentUserProfile(Guid Id, string UserName, string Role, bool IsBlocked);
|
||||
|
||||
public sealed record UserSummaryDto(
|
||||
Guid Id,
|
||||
@@ -72,6 +66,4 @@ public interface IIdentityService
|
||||
bool desc,
|
||||
CancellationToken cancellationToken
|
||||
);
|
||||
|
||||
Task<UserSummaryDto?> GetUserAsync(Guid userId, CancellationToken cancellationToken);
|
||||
}
|
||||
|
||||
@@ -37,5 +37,9 @@ public interface IMediaStorage
|
||||
);
|
||||
|
||||
/// <summary>Удаляет все артефакты ассета: исходник в <c>originals/</c> и каталог сегментов <c>assets/{id}/</c>.</summary>
|
||||
Task DeleteAssetArtifactsAsync(Guid assetId, string extension, CancellationToken cancellationToken);
|
||||
Task DeleteAssetArtifactsAsync(
|
||||
Guid assetId,
|
||||
string extension,
|
||||
CancellationToken cancellationToken
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
using LiteCqrs;
|
||||
using TeleWave.Application.Common.Models;
|
||||
|
||||
namespace TeleWave.Application.Media.GetMedia;
|
||||
|
||||
public sealed record GetMediaAssetQuery(Guid Id) : IQuery<Result<MediaAssetDto>>;
|
||||
@@ -1,24 +0,0 @@
|
||||
using LiteCqrs;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using TeleWave.Application.Common.Interfaces;
|
||||
using TeleWave.Application.Common.Models;
|
||||
|
||||
namespace TeleWave.Application.Media.GetMedia;
|
||||
|
||||
public sealed class GetMediaAssetQueryHandler(IAppDbContext dbContext)
|
||||
: IQueryHandler<GetMediaAssetQuery, Result<MediaAssetDto>>
|
||||
{
|
||||
public async Task<Result<MediaAssetDto>> Handle(
|
||||
GetMediaAssetQuery query,
|
||||
CancellationToken cancellationToken
|
||||
)
|
||||
{
|
||||
var asset = await dbContext
|
||||
.MediaAssets.AsNoTracking()
|
||||
.FirstOrDefaultAsync(x => x.Id == query.Id, cancellationToken);
|
||||
|
||||
return asset is null
|
||||
? Result.Failure<MediaAssetDto>(MediaErrors.NotFound)
|
||||
: Result.Success(MediaAssetDto.From(asset));
|
||||
}
|
||||
}
|
||||
@@ -17,9 +17,14 @@ public sealed class GetMediaStatsQueryHandler(IAppDbContext dbContext)
|
||||
)
|
||||
{
|
||||
// Сгенерированные (ТВ-заставки) в статистику библиотеки не входят.
|
||||
var assets = dbContext.MediaAssets.AsNoTracking().Where(x => x.Source != MediaSource.Generated);
|
||||
var assets = dbContext
|
||||
.MediaAssets.AsNoTracking()
|
||||
.Where(x => x.Source != MediaSource.Generated);
|
||||
|
||||
var queued = await assets.CountAsync(x => x.Status == MediaAssetStatus.Pending, cancellationToken);
|
||||
var queued = await assets.CountAsync(
|
||||
x => x.Status == MediaAssetStatus.Pending,
|
||||
cancellationToken
|
||||
);
|
||||
var processing = await assets.CountAsync(
|
||||
x => x.Status == MediaAssetStatus.Processing,
|
||||
cancellationToken
|
||||
|
||||
+7
-5
@@ -44,7 +44,10 @@ public sealed class FindMissingEpisodesQueryHandler(
|
||||
{
|
||||
var season = episode.Season;
|
||||
var number = episode.Episode;
|
||||
if ((season is null || number is null) && names.TryGetValue(episode.MediaAssetId, out var name))
|
||||
if (
|
||||
(season is null || number is null)
|
||||
&& names.TryGetValue(episode.MediaAssetId, out var name)
|
||||
)
|
||||
{
|
||||
if (EpisodeName.Parse(name) is { } parsed)
|
||||
(season, number) = (parsed.Season, parsed.Episode);
|
||||
@@ -66,10 +69,9 @@ public sealed class FindMissingEpisodesQueryHandler(
|
||||
season,
|
||||
cancellationToken
|
||||
);
|
||||
var missing =
|
||||
expected is { } exp
|
||||
? Enumerable.Range(1, exp).Where(n => !loaded.Contains(n)).ToList()
|
||||
: [];
|
||||
var missing = expected is { } exp
|
||||
? Enumerable.Range(1, exp).Where(n => !loaded.Contains(n)).ToList()
|
||||
: [];
|
||||
seasons.Add(new SeasonGapDto(season, expected, loaded.Count, missing));
|
||||
}
|
||||
|
||||
|
||||
@@ -14,11 +14,6 @@ public static class MetadataErrors
|
||||
"Метаданные по этому источнику не найдены."
|
||||
);
|
||||
|
||||
public static readonly Error InvalidPoster = Error.Validation(
|
||||
"Metadata.InvalidPoster",
|
||||
"Недопустимый файл постера (формат или размер)."
|
||||
);
|
||||
|
||||
public static readonly Error NoLinkedSource = Error.Validation(
|
||||
"Metadata.NoLinkedSource",
|
||||
"У шоу не привязан внешний источник — сначала найдите шоу в TMDb/OMDb."
|
||||
|
||||
+4
-2
@@ -3,5 +3,7 @@ using TeleWave.Application.Common.Models;
|
||||
|
||||
namespace TeleWave.Application.Settings.UpdateSiteSettings;
|
||||
|
||||
public sealed record UpdateSiteSettingsCommand(bool RegistrationEnabled, string PreferredAudioLanguages)
|
||||
: ICommand<Result>;
|
||||
public sealed record UpdateSiteSettingsCommand(
|
||||
bool RegistrationEnabled,
|
||||
string PreferredAudioLanguages
|
||||
) : ICommand<Result>;
|
||||
|
||||
Reference in New Issue
Block a user