Compare commits

...

2 Commits

Author SHA1 Message Date
d989fdf2f2 Merge branch 'dev'
All checks were successful
Build and Push Docker Image / build (push) Successful in 34s
2025-10-29 23:08:21 +03:00
885261b384 Refactors media type detection
Moves media type extension definitions to a centralized constant class.

This improves code maintainability and readability by consolidating
the list of media type extensions into a dedicated class. It also
removes the need for `.ToLowerInvariant()` call on every file extension
check, since the HashSet itself is instantiated with case-insensitive comparer.
2025-10-29 23:08:05 +03:00
2 changed files with 82 additions and 6 deletions

View File

@@ -1,6 +1,7 @@
using LiquidCode.Domain.Enums; using LiquidCode.Domain.Enums;
using LiquidCode.Domain.Interfaces.Services; using LiquidCode.Domain.Interfaces.Services;
using LiquidCode.Infrastructure.External.S3; using LiquidCode.Infrastructure.External.S3;
using LiquidCode.Shared.Constants;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace LiquidCode.Domain.Services; namespace LiquidCode.Domain.Services;
@@ -69,14 +70,15 @@ public class MediaService : IMediaService
public MediaType GetMediaType(string fileName) public MediaType GetMediaType(string fileName)
{ {
var extension = Path.GetExtension(fileName).ToLowerInvariant(); var extension = Path.GetExtension(fileName);
return extension switch return extension switch
{ {
".jpg" or ".jpeg" or ".png" or ".gif" or ".bmp" or ".tiff" or ".webp" => MediaType.Images, _ when MediaTypeExtensions.ImageExtensions.Contains(extension) => MediaType.Images,
".mp4" or ".avi" or ".mkv" or ".mov" or ".wmv" or ".flv" or ".webm" => MediaType.Videos, _ when MediaTypeExtensions.VideoExtensions.Contains(extension) => MediaType.Videos,
".mp3" or ".wav" or ".flac" or ".aac" or ".ogg" or ".wma" => MediaType.Audio, _ when MediaTypeExtensions.AudioExtensions.Contains(extension) => MediaType.Audio,
".zip" or ".rar" or ".7z" or ".tar" or ".gz" or ".bz2" => MediaType.Archives, _ when MediaTypeExtensions.ArchiveExtensions.Contains(extension) => MediaType.Archives,
".txt" or ".md" or ".markdown" or ".tex" or ".latex" => MediaType.Documents, _ when MediaTypeExtensions.DocumentExtensions.Contains(extension) => MediaType.Documents,
_ => MediaType.Other _ => MediaType.Other
}; };
} }

View File

@@ -0,0 +1,74 @@
namespace LiquidCode.Shared.Constants;
/// <summary>
/// Константы для определения типов медиа файлов
/// </summary>
public static class MediaTypeExtensions
{
/// <summary>
/// Расширения для изображений
/// </summary>
public static readonly HashSet<string> ImageExtensions = new(StringComparer.OrdinalIgnoreCase)
{
".jpg",
".jpeg",
".png",
".gif",
".bmp",
".tiff",
".webp"
};
/// <summary>
/// Расширения для видео
/// </summary>
public static readonly HashSet<string> VideoExtensions = new(StringComparer.OrdinalIgnoreCase)
{
".mp4",
".avi",
".mkv",
".mov",
".wmv",
".flv",
".webm"
};
/// <summary>
/// Расширения для аудио
/// </summary>
public static readonly HashSet<string> AudioExtensions = new(StringComparer.OrdinalIgnoreCase)
{
".mp3",
".wav",
".flac",
".aac",
".ogg",
".wma"
};
/// <summary>
/// Расширения для архивов
/// </summary>
public static readonly HashSet<string> ArchiveExtensions = new(StringComparer.OrdinalIgnoreCase)
{
".zip",
".rar",
".7z",
".tar",
".gz",
".bz2"
};
/// <summary>
/// Расширения для текстовых документов (включая JSON)
/// </summary>
public static readonly HashSet<string> DocumentExtensions = new(StringComparer.OrdinalIgnoreCase)
{
".txt",
".md",
".markdown",
".tex",
".latex",
".json"
};
}