Unify codeing style.
This commit is contained in:
@@ -28,9 +28,9 @@ public class AudioMetadataReaderTest
|
|||||||
private static (Dictionary<string, string> basic, Dictionary<string, string> meta, Dictionary<string, string> extra)
|
private static (Dictionary<string, string> basic, Dictionary<string, string> meta, Dictionary<string, string> extra)
|
||||||
ParseAtlTxt(string atlPath)
|
ParseAtlTxt(string atlPath)
|
||||||
{
|
{
|
||||||
var basic = new Dictionary<string, string>();
|
Dictionary<string, string> basic = new();
|
||||||
var meta = new Dictionary<string, string>();
|
Dictionary<string, string> meta = new();
|
||||||
var extra = new Dictionary<string, string>();
|
Dictionary<string, string> extra = new();
|
||||||
|
|
||||||
string[] lines = File.ReadAllLines(atlPath);
|
string[] lines = File.ReadAllLines(atlPath);
|
||||||
string section = "";
|
string section = "";
|
||||||
@@ -135,7 +135,7 @@ public class AudioMetadataReaderTest
|
|||||||
if (atlPath == null)
|
if (atlPath == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var (basic, metaFields, extra) = ParseAtlTxt(atlPath);
|
(Dictionary<string, string> basic, Dictionary<string, string> metaFields, Dictionary<string, string> extra) = ParseAtlTxt(atlPath);
|
||||||
|
|
||||||
// 基础技术参数与 ATL 一致
|
// 基础技术参数与 ATL 一致
|
||||||
Assert.Equal(int.Parse(basic["DurationMs"]) / 1000.0, meta.Duration);
|
Assert.Equal(int.Parse(basic["DurationMs"]) / 1000.0, meta.Duration);
|
||||||
|
|||||||
@@ -20,16 +20,16 @@ public class DatabaseTests
|
|||||||
Database.InitializeDatabase(dbName);
|
Database.InitializeDatabase(dbName);
|
||||||
|
|
||||||
// Assert — 用自己的 SQLite 连接验证
|
// Assert — 用自己的 SQLite 连接验证
|
||||||
using var conn = new SQLiteConnection($"Data Source={dbPath};Version=3;");
|
using SQLiteConnection conn = new($"Data Source={dbPath};Version=3;");
|
||||||
conn.Open();
|
conn.Open();
|
||||||
|
|
||||||
// 1. 表存在
|
// 1. 表存在
|
||||||
var tableCount = conn.ExecuteScalar<int>(
|
int tableCount = conn.ExecuteScalar<int>(
|
||||||
"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='audio_files';");
|
"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='audio_files';");
|
||||||
Assert.Equal(1, tableCount);
|
Assert.Equal(1, tableCount);
|
||||||
|
|
||||||
// 2. 核心列存在(抽查)
|
// 2. 核心列存在(抽查)
|
||||||
var columns = conn.Query<string>(
|
HashSet<string> columns = conn.Query<string>(
|
||||||
"SELECT name FROM pragma_table_info('audio_files') ORDER BY cid;").ToHashSet();
|
"SELECT name FROM pragma_table_info('audio_files') ORDER BY cid;").ToHashSet();
|
||||||
Assert.Contains("id", columns);
|
Assert.Contains("id", columns);
|
||||||
Assert.Contains("unique_id", columns);
|
Assert.Contains("unique_id", columns);
|
||||||
@@ -41,7 +41,7 @@ public class DatabaseTests
|
|||||||
Assert.Contains("description", columns);
|
Assert.Contains("description", columns);
|
||||||
|
|
||||||
// 3. 索引存在
|
// 3. 索引存在
|
||||||
var indexes = conn.Query<string>(
|
HashSet<string> indexes = conn.Query<string>(
|
||||||
"SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='audio_files';")
|
"SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='audio_files';")
|
||||||
.ToHashSet();
|
.ToHashSet();
|
||||||
Assert.Contains("idx_file_name", indexes);
|
Assert.Contains("idx_file_name", indexes);
|
||||||
@@ -72,9 +72,9 @@ public class DatabaseTests
|
|||||||
Assert.Null(exception);
|
Assert.Null(exception);
|
||||||
|
|
||||||
// 表仍然只有一个
|
// 表仍然只有一个
|
||||||
using var conn = new SQLiteConnection($"Data Source={dbPath};Version=3;");
|
using SQLiteConnection conn = new($"Data Source={dbPath};Version=3;");
|
||||||
conn.Open();
|
conn.Open();
|
||||||
var tableCount = conn.ExecuteScalar<int>(
|
int tableCount = conn.ExecuteScalar<int>(
|
||||||
"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='audio_files';");
|
"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='audio_files';");
|
||||||
Assert.Equal(1, tableCount);
|
Assert.Equal(1, tableCount);
|
||||||
}
|
}
|
||||||
@@ -88,7 +88,7 @@ public class DatabaseTests
|
|||||||
|
|
||||||
private static AudioFileMeta CreateSampleMeta(int id = 0)
|
private static AudioFileMeta CreateSampleMeta(int id = 0)
|
||||||
{
|
{
|
||||||
var guid = Guid.NewGuid().ToString("N");
|
string guid = Guid.NewGuid().ToString("N");
|
||||||
return new AudioFileMeta
|
return new AudioFileMeta
|
||||||
{
|
{
|
||||||
Id = id,
|
Id = id,
|
||||||
@@ -119,9 +119,9 @@ public class DatabaseTests
|
|||||||
|
|
||||||
private static void DeleteTestEntries(params string[] uniqueIds)
|
private static void DeleteTestEntries(params string[] uniqueIds)
|
||||||
{
|
{
|
||||||
using var conn = new SQLiteConnection($"Data Source={GetDefaultDbPath()};Version=3;");
|
using SQLiteConnection conn = new($"Data Source={GetDefaultDbPath()};Version=3;");
|
||||||
conn.Open();
|
conn.Open();
|
||||||
foreach (var uid in uniqueIds)
|
foreach (string uid in uniqueIds)
|
||||||
conn.Execute("DELETE FROM audio_files WHERE unique_id = @UniqueId", new { UniqueId = uid });
|
conn.Execute("DELETE FROM audio_files WHERE unique_id = @UniqueId", new { UniqueId = uid });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,12 +129,12 @@ public class DatabaseTests
|
|||||||
public void AddEntry_Then_GetEntryById_ShouldReturnRecord()
|
public void AddEntry_Then_GetEntryById_ShouldReturnRecord()
|
||||||
{
|
{
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
var meta = CreateSampleMeta();
|
AudioFileMeta meta = CreateSampleMeta();
|
||||||
Assert.True(Database.AddEntry(meta));
|
Assert.True(Database.AddEntry(meta));
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var retrieved = Database.GetEntryById(meta.Id);
|
AudioFileMeta? retrieved = Database.GetEntryById(meta.Id);
|
||||||
Assert.NotNull(retrieved);
|
Assert.NotNull(retrieved);
|
||||||
Assert.Equal(meta.UniqueId, retrieved!.UniqueId);
|
Assert.Equal(meta.UniqueId, retrieved!.UniqueId);
|
||||||
Assert.Equal(meta.Filename, retrieved.Filename);
|
Assert.Equal(meta.Filename, retrieved.Filename);
|
||||||
@@ -150,7 +150,7 @@ public class DatabaseTests
|
|||||||
public void GetEntryById_NotFound_ShouldReturnNull()
|
public void GetEntryById_NotFound_ShouldReturnNull()
|
||||||
{
|
{
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
var result = Database.GetEntryById(int.MaxValue);
|
AudioFileMeta? result = Database.GetEntryById(int.MaxValue);
|
||||||
Assert.Null(result);
|
Assert.Null(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,12 +158,12 @@ public class DatabaseTests
|
|||||||
public void AddEntry_Then_GetEntryByUniqueId_ShouldReturnRecord()
|
public void AddEntry_Then_GetEntryByUniqueId_ShouldReturnRecord()
|
||||||
{
|
{
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
var meta = CreateSampleMeta();
|
AudioFileMeta meta = CreateSampleMeta();
|
||||||
Database.AddEntry(meta);
|
Database.AddEntry(meta);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var retrieved = Database.GetEntryByUniqueId(meta.UniqueId);
|
AudioFileMeta? retrieved = Database.GetEntryByUniqueId(meta.UniqueId);
|
||||||
Assert.NotNull(retrieved);
|
Assert.NotNull(retrieved);
|
||||||
Assert.Equal(meta.Md5, retrieved!.Md5);
|
Assert.Equal(meta.Md5, retrieved!.Md5);
|
||||||
}
|
}
|
||||||
@@ -177,7 +177,7 @@ public class DatabaseTests
|
|||||||
public void GetEntryByUniqueId_NotFound_ShouldReturnNull()
|
public void GetEntryByUniqueId_NotFound_ShouldReturnNull()
|
||||||
{
|
{
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
var result = Database.GetEntryByUniqueId("nonexistent-guid");
|
AudioFileMeta? result = Database.GetEntryByUniqueId("nonexistent-guid");
|
||||||
Assert.Null(result);
|
Assert.Null(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,18 +185,18 @@ public class DatabaseTests
|
|||||||
public void QueryEntries_ShouldFilterBySearchText()
|
public void QueryEntries_ShouldFilterBySearchText()
|
||||||
{
|
{
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
var meta = CreateSampleMeta();
|
AudioFileMeta meta = CreateSampleMeta();
|
||||||
meta.Description = "Unique underwater ambience loop";
|
meta.Description = "Unique underwater ambience loop";
|
||||||
meta.Keywords = "water,ocean,deep";
|
meta.Keywords = "water,ocean,deep";
|
||||||
Database.AddEntry(meta);
|
Database.AddEntry(meta);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var results = Database.QueryEntries(searchText: "underwater").ToList();
|
List<AudioFileMeta> results = Database.QueryEntries(searchText: "underwater").ToList();
|
||||||
Assert.Single(results);
|
Assert.Single(results);
|
||||||
Assert.Equal(meta.UniqueId, results[0].UniqueId);
|
Assert.Equal(meta.UniqueId, results[0].UniqueId);
|
||||||
|
|
||||||
var empty = Database.QueryEntries(searchText: "zzz_nonexistent_zzz").ToList();
|
List<AudioFileMeta> empty = Database.QueryEntries(searchText: "zzz_nonexistent_zzz").ToList();
|
||||||
Assert.Empty(empty);
|
Assert.Empty(empty);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -209,16 +209,16 @@ public class DatabaseTests
|
|||||||
public void QueryEntries_ShouldFilterByDuration()
|
public void QueryEntries_ShouldFilterByDuration()
|
||||||
{
|
{
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
var shortMeta = CreateSampleMeta();
|
AudioFileMeta shortMeta = CreateSampleMeta();
|
||||||
shortMeta.Duration = 1.0;
|
shortMeta.Duration = 1.0;
|
||||||
var longMeta = CreateSampleMeta();
|
AudioFileMeta longMeta = CreateSampleMeta();
|
||||||
longMeta.Duration = 10.0;
|
longMeta.Duration = 10.0;
|
||||||
|
|
||||||
Database.AddEntries(new[] { shortMeta, longMeta });
|
Database.AddEntries([shortMeta, longMeta]);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var results = Database.QueryEntries(minDuration: 5.0).ToList();
|
List<AudioFileMeta> results = Database.QueryEntries(minDuration: 5.0).ToList();
|
||||||
Assert.Single(results);
|
Assert.Single(results);
|
||||||
Assert.Equal(longMeta.UniqueId, results[0].UniqueId);
|
Assert.Equal(longMeta.UniqueId, results[0].UniqueId);
|
||||||
}
|
}
|
||||||
@@ -232,12 +232,12 @@ public class DatabaseTests
|
|||||||
public void QueryEntries_ShouldSupportPagination()
|
public void QueryEntries_ShouldSupportPagination()
|
||||||
{
|
{
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
var entries = Enumerable.Range(0, 5).Select(_ => CreateSampleMeta()).ToList();
|
List<AudioFileMeta> entries = Enumerable.Range(0, 5).Select(_ => CreateSampleMeta()).ToList();
|
||||||
Database.AddEntries(entries);
|
Database.AddEntries(entries);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var page = Database.QueryEntries(limit: 2, offset: 1).ToList();
|
List<AudioFileMeta> page = Database.QueryEntries(limit: 2, offset: 1).ToList();
|
||||||
Assert.Equal(2, page.Count);
|
Assert.Equal(2, page.Count);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -250,13 +250,13 @@ public class DatabaseTests
|
|||||||
public void SearchEntries_ShouldFindByKeyword()
|
public void SearchEntries_ShouldFindByKeyword()
|
||||||
{
|
{
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
var meta = CreateSampleMeta();
|
AudioFileMeta meta = CreateSampleMeta();
|
||||||
meta.Keywords = "magic,spell,fireball";
|
meta.Keywords = "magic,spell,fireball";
|
||||||
Database.AddEntry(meta);
|
Database.AddEntry(meta);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var results = Database.SearchEntries("fireball").ToList();
|
List<AudioFileMeta> results = Database.SearchEntries("fireball").ToList();
|
||||||
Assert.Single(results);
|
Assert.Single(results);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -269,14 +269,14 @@ public class DatabaseTests
|
|||||||
public void GetTotalCount_ShouldRespectSearchFilter()
|
public void GetTotalCount_ShouldRespectSearchFilter()
|
||||||
{
|
{
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
var meta = CreateSampleMeta();
|
AudioFileMeta meta = CreateSampleMeta();
|
||||||
var uniqueTag = $"UNIQUE_TAG_{meta.UniqueId[..8]}";
|
string uniqueTag = $"UNIQUE_TAG_{meta.UniqueId[..8]}";
|
||||||
meta.Description = uniqueTag;
|
meta.Description = uniqueTag;
|
||||||
Database.AddEntry(meta);
|
Database.AddEntry(meta);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var count = Database.GetTotalCount(searchText: uniqueTag);
|
int count = Database.GetTotalCount(searchText: uniqueTag);
|
||||||
Assert.Equal(1, count);
|
Assert.Equal(1, count);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -289,11 +289,11 @@ public class DatabaseTests
|
|||||||
public void AddEntries_ShouldReturnCorrectCount()
|
public void AddEntries_ShouldReturnCorrectCount()
|
||||||
{
|
{
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
var entries = Enumerable.Range(0, 3).Select(_ => CreateSampleMeta()).ToList();
|
List<AudioFileMeta> entries = Enumerable.Range(0, 3).Select(_ => CreateSampleMeta()).ToList();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var count = Database.AddEntries(entries);
|
int count = Database.AddEntries(entries);
|
||||||
Assert.Equal(3, count);
|
Assert.Equal(3, count);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ namespace Core.Tests;
|
|||||||
|
|
||||||
public class IntegratedTest
|
public class IntegratedTest
|
||||||
{
|
{
|
||||||
private static readonly string _dataSourceRoot = "/Volumes/Library/Boom Library/Boom Library - Alien Life/Alien_Life_DS";
|
private static readonly string _dataSourceRoot = "/Volumes/Library/Boom Library/Boom Library - Alien Life";
|
||||||
|
|
||||||
private static string GetWavDir(string vendor)
|
private static string GetWavDir(string vendor)
|
||||||
{
|
{
|
||||||
@@ -19,9 +19,9 @@ public class IntegratedTest
|
|||||||
|
|
||||||
private static void DeleteTestEntries(params string[] uniqueIds)
|
private static void DeleteTestEntries(params string[] uniqueIds)
|
||||||
{
|
{
|
||||||
using var conn = new SQLiteConnection($"Data Source={GetDefaultDbPath()};Version=3;");
|
using SQLiteConnection conn = new($"Data Source={GetDefaultDbPath()};Version=3;");
|
||||||
conn.Open();
|
conn.Open();
|
||||||
foreach (var uid in uniqueIds)
|
foreach (string uid in uniqueIds)
|
||||||
conn.Execute("DELETE FROM audio_files WHERE unique_id = @UniqueId", new { UniqueId = uid });
|
conn.Execute("DELETE FROM audio_files WHERE unique_id = @UniqueId", new { UniqueId = uid });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,8 +34,8 @@ public class IntegratedTest
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var scanner = new AudioFileScanner();
|
AudioFileScanner scanner = new();
|
||||||
var reader = new AudioMetadataReader();
|
AudioMetadataReader reader = new();
|
||||||
string[] wavFiles = scanner.ScanDirectory(sourceDir, recursive: true)
|
string[] wavFiles = scanner.ScanDirectory(sourceDir, recursive: true)
|
||||||
.Where(f => f.EndsWith(".wav", StringComparison.OrdinalIgnoreCase))
|
.Where(f => f.EndsWith(".wav", StringComparison.OrdinalIgnoreCase))
|
||||||
.ToArray();
|
.ToArray();
|
||||||
@@ -45,7 +45,7 @@ public class IntegratedTest
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var metaList = wavFiles.Select(f => reader.ReadMetadata(new FileInfo(f))).ToList();
|
List<AudioFileMeta> metaList = wavFiles.Select(f => reader.ReadMetadata(new FileInfo(f))).ToList();
|
||||||
|
|
||||||
Database.InitializeDatabase();
|
Database.InitializeDatabase();
|
||||||
int insertedCount = Database.AddEntries(metaList);
|
int insertedCount = Database.AddEntries(metaList);
|
||||||
@@ -54,9 +54,9 @@ public class IntegratedTest
|
|||||||
{
|
{
|
||||||
Assert.Equal(wavFiles.Length, insertedCount);
|
Assert.Equal(wavFiles.Length, insertedCount);
|
||||||
|
|
||||||
foreach (var meta in metaList)
|
foreach (AudioFileMeta meta in metaList)
|
||||||
{
|
{
|
||||||
var retrieved = Database.GetEntryByUniqueId(meta.UniqueId);
|
AudioFileMeta? retrieved = Database.GetEntryByUniqueId(meta.UniqueId);
|
||||||
Assert.NotNull(retrieved);
|
Assert.NotNull(retrieved);
|
||||||
|
|
||||||
Assert.Equal(meta.Md5, retrieved!.Md5);
|
Assert.Equal(meta.Md5, retrieved!.Md5);
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public class AudioFileScanner
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var extension = Path.GetExtension(filePath).ToLowerInvariant();
|
string extension = Path.GetExtension(filePath).ToLowerInvariant();
|
||||||
return SupportedExtensions.Contains(extension);
|
return SupportedExtensions.Contains(extension);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+28
-28
@@ -26,7 +26,7 @@ public static class Database
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void InitializeDatabase(string databaseName = "default")
|
public static void InitializeDatabase(string databaseName = "default")
|
||||||
{
|
{
|
||||||
using var connection = GetConnection(databaseName);
|
using IDbConnection connection = GetConnection(databaseName);
|
||||||
connection.Open();
|
connection.Open();
|
||||||
|
|
||||||
const string sql = """
|
const string sql = """
|
||||||
@@ -131,7 +131,7 @@ public static class Database
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using var connection = GetConnection();
|
using IDbConnection connection = GetConnection();
|
||||||
connection.Open();
|
connection.Open();
|
||||||
|
|
||||||
const string sql = @"
|
const string sql = @"
|
||||||
@@ -183,11 +183,11 @@ public static class Database
|
|||||||
/// <returns>成功添加的记录数</returns>
|
/// <returns>成功添加的记录数</returns>
|
||||||
public static int AddEntries(IEnumerable<AudioFileMeta> entries)
|
public static int AddEntries(IEnumerable<AudioFileMeta> entries)
|
||||||
{
|
{
|
||||||
var count = 0;
|
int count = 0;
|
||||||
using var connection = GetConnection();
|
using IDbConnection connection = GetConnection();
|
||||||
connection.Open();
|
connection.Open();
|
||||||
|
|
||||||
using var transaction = connection.BeginTransaction();
|
using IDbTransaction transaction = connection.BeginTransaction();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
const string sql = @"
|
const string sql = @"
|
||||||
@@ -222,7 +222,7 @@ public static class Database
|
|||||||
);
|
);
|
||||||
";
|
";
|
||||||
|
|
||||||
foreach (var entry in entries)
|
foreach (AudioFileMeta entry in entries)
|
||||||
{
|
{
|
||||||
connection.Execute(sql, entry, transaction);
|
connection.Execute(sql, entry, transaction);
|
||||||
count++;
|
count++;
|
||||||
@@ -247,7 +247,7 @@ public static class Database
|
|||||||
/// <returns>是否存在</returns>
|
/// <returns>是否存在</returns>
|
||||||
public static bool EntryExists(string md5, string filePath)
|
public static bool EntryExists(string md5, string filePath)
|
||||||
{
|
{
|
||||||
using var connection = GetConnection();
|
using IDbConnection connection = GetConnection();
|
||||||
connection.Open();
|
connection.Open();
|
||||||
|
|
||||||
const string sql = @"
|
const string sql = @"
|
||||||
@@ -255,7 +255,7 @@ public static class Database
|
|||||||
WHERE md5 = @Md5 OR path = @Path;
|
WHERE md5 = @Md5 OR path = @Path;
|
||||||
";
|
";
|
||||||
|
|
||||||
var count = connection.ExecuteScalar<int>(sql, new { Md5 = md5, Path = filePath });
|
int count = connection.ExecuteScalar<int>(sql, new { Md5 = md5, Path = filePath });
|
||||||
return count > 0;
|
return count > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,7 +306,7 @@ public static class Database
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static AudioFileMeta? GetEntryById(int id)
|
public static AudioFileMeta? GetEntryById(int id)
|
||||||
{
|
{
|
||||||
using var connection = GetConnection();
|
using IDbConnection connection = GetConnection();
|
||||||
connection.Open();
|
connection.Open();
|
||||||
|
|
||||||
const string sql = $"SELECT {DetailSelectColumns} FROM audio_files WHERE id = @Id;";
|
const string sql = $"SELECT {DetailSelectColumns} FROM audio_files WHERE id = @Id;";
|
||||||
@@ -319,7 +319,7 @@ public static class Database
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static AudioFileMeta? GetEntryByUniqueId(string uniqueId)
|
public static AudioFileMeta? GetEntryByUniqueId(string uniqueId)
|
||||||
{
|
{
|
||||||
using var connection = GetConnection();
|
using IDbConnection connection = GetConnection();
|
||||||
connection.Open();
|
connection.Open();
|
||||||
|
|
||||||
const string sql = $"SELECT {DetailSelectColumns} FROM audio_files WHERE unique_id = @UniqueId;";
|
const string sql = $"SELECT {DetailSelectColumns} FROM audio_files WHERE unique_id = @UniqueId;";
|
||||||
@@ -342,11 +342,11 @@ public static class Database
|
|||||||
int limit = 100,
|
int limit = 100,
|
||||||
int offset = 0)
|
int offset = 0)
|
||||||
{
|
{
|
||||||
using var connection = GetConnection();
|
using IDbConnection connection = GetConnection();
|
||||||
connection.Open();
|
connection.Open();
|
||||||
|
|
||||||
var where = new List<string>();
|
List<string> where = new();
|
||||||
var parameters = new DynamicParameters();
|
DynamicParameters parameters = new();
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(searchText))
|
if (!string.IsNullOrWhiteSpace(searchText))
|
||||||
{
|
{
|
||||||
@@ -379,22 +379,22 @@ public static class Database
|
|||||||
parameters.Add("@Category", category);
|
parameters.Add("@Category", category);
|
||||||
}
|
}
|
||||||
|
|
||||||
var whereClause = where.Count > 0 ? "WHERE " + string.Join(" AND ", where) : "";
|
string whereClause = where.Count > 0 ? "WHERE " + string.Join(" AND ", where) : "";
|
||||||
|
|
||||||
var orderBy = "ORDER BY date_added DESC";
|
string orderBy = "ORDER BY date_added DESC";
|
||||||
if (!string.IsNullOrWhiteSpace(sortBy) && AllowedSortColumns.Contains(sortBy))
|
if (!string.IsNullOrWhiteSpace(sortBy) && AllowedSortColumns.Contains(sortBy))
|
||||||
{
|
{
|
||||||
var dir = sortDescending ? "DESC" : "ASC";
|
string dir = sortDescending ? "DESC" : "ASC";
|
||||||
orderBy = $"ORDER BY [{sortBy}] {dir}";
|
orderBy = $"ORDER BY [{sortBy}] {dir}";
|
||||||
}
|
}
|
||||||
|
|
||||||
var sql = $"""
|
string sql = $"""
|
||||||
SELECT {ListSelectColumns}
|
SELECT {ListSelectColumns}
|
||||||
FROM audio_files
|
FROM audio_files
|
||||||
{whereClause}
|
{whereClause}
|
||||||
{orderBy}
|
{orderBy}
|
||||||
LIMIT @Limit OFFSET @Offset;
|
LIMIT @Limit OFFSET @Offset;
|
||||||
""";
|
""";
|
||||||
|
|
||||||
parameters.Add("@Limit", limit);
|
parameters.Add("@Limit", limit);
|
||||||
parameters.Add("@Offset", offset);
|
parameters.Add("@Offset", offset);
|
||||||
@@ -421,11 +421,11 @@ public static class Database
|
|||||||
int? channels = null,
|
int? channels = null,
|
||||||
string? category = null)
|
string? category = null)
|
||||||
{
|
{
|
||||||
using var connection = GetConnection();
|
using IDbConnection connection = GetConnection();
|
||||||
connection.Open();
|
connection.Open();
|
||||||
|
|
||||||
var where = new List<string>();
|
List<string> where = new();
|
||||||
var parameters = new DynamicParameters();
|
DynamicParameters parameters = new();
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(searchText))
|
if (!string.IsNullOrWhiteSpace(searchText))
|
||||||
{
|
{
|
||||||
@@ -458,8 +458,8 @@ public static class Database
|
|||||||
parameters.Add("@Category", category);
|
parameters.Add("@Category", category);
|
||||||
}
|
}
|
||||||
|
|
||||||
var whereClause = where.Count > 0 ? "WHERE " + string.Join(" AND ", where) : "";
|
string whereClause = where.Count > 0 ? "WHERE " + string.Join(" AND ", where) : "";
|
||||||
var sql = $"SELECT COUNT(*) FROM audio_files {whereClause};";
|
string sql = $"SELECT COUNT(*) FROM audio_files {whereClause};";
|
||||||
|
|
||||||
return connection.ExecuteScalar<int>(sql, parameters);
|
return connection.ExecuteScalar<int>(sql, parameters);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user