Files
3cx_tapi/server/src/CPATapi.Server/Repository/TapiDirectoryRepository.cs
T
2026-03-19 14:32:14 +01:00

72 lines
2.2 KiB
C#

using System.Text;
using CPATapi.Server.Interfaces;
using CPATapi.Server.Models;
using Dapper;
namespace CPATapi.Server.Repository;
internal class TapiDirectoryRepository(IConfiguration config) : Repository(config), ITapiDirectoryRepository
{
public async Task<IEnumerable<TapiContact>> SearchAsync(string[] args)
{
await using var con = await OpenAsync("Tapi");
var sql = new StringBuilder("""
SELECT TOP 10
TD_ID,
TD_NAME,
TD_NUMBER,
TD_NUMBER_TAPI,
TD_MEDIUM
FROM dbo.CP_TAPI_DIRECTORY
WHERE
""");
var first = true;
var dp = new DynamicParameters();
for (var i = 1; i <= args.Length; i++)
{
if (!first)
{
sql.AppendLine("AND");
}
first = false;
sql.AppendLine($"(TD_NAME LIKE @s{i} OR");
sql.AppendLine($" TD_NUMBER_TAPI LIKE @s{i})");
dp.Add($"s{i}", $"%{args[i-1]}%");
}
return await con.QueryAsync<TapiContact>(sql.ToString(), dp);
}
public async Task<TapiContact?> SearchByNumberAsync(string number)
{
await using var con = await OpenAsync("Tapi");
var result = await con.QueryFirstOrDefaultAsync<TapiContact>("""
SELECT
TD_ID
,TD_NAME
,TD_NUMBER
,TD_NUMBER_TAPI
,TD_MEDIUM
FROM dbo.CP_TAPI_DIRECTORY
WHERE TD_NUMBER_TAPI LIKE @number
""", new {number});
return result;
}
public async Task<IEnumerable<TapiContact>> GetAllAsync()
{
await using var con = await OpenAsync("Tapi");
return await con.QueryAsync<TapiContact>("""
SELECT
TD_ID
,TD_NAME
,TD_NUMBER
,TD_NUMBER_TAPI
,TD_MEDIUM
FROM dbo.CP_TAPI_DIRECTORY
""");
}
}