Добавьте файлы проекта.
This commit is contained in:
@ -0,0 +1,84 @@
|
||||
using Dapper;
|
||||
using System.Data;
|
||||
|
||||
namespace Yuna.Website.Server.Storage.Repositories.Device
|
||||
{
|
||||
public class DeviceRepository : IDeviceRepository
|
||||
{
|
||||
private readonly DapperContext _context;
|
||||
|
||||
public DeviceRepository(DapperContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public async Task AddProps(IReadOnlyList<Model.Prop> props, long deviceId)
|
||||
{
|
||||
var query =
|
||||
$@"INSERT INTO ""Yuna_Props_In_Devices""
|
||||
(""PropId"", ""DeviceId"")
|
||||
VALUES
|
||||
{string.Join(", ", props.Select(prop => $"({prop.Id}, {deviceId})"))}";
|
||||
|
||||
await _context.Connection.ExecuteAsync(query);
|
||||
}
|
||||
|
||||
public async Task<Model.Device?> Create(Model.Device device)
|
||||
{
|
||||
var query =
|
||||
$@"INSERT INTO ""Yuna_Devices""
|
||||
(""Name"", ""Description"", ""DeviceUrl"")
|
||||
VALUES
|
||||
('{device.Name}', '{device.Description}', '{device.DeviceUrl}')
|
||||
RETURNING *";
|
||||
|
||||
var result = await _context.Connection.QuerySingleAsync<Model.Device?>(query, device);
|
||||
return result;
|
||||
}
|
||||
|
||||
public Task<Model.Device?> Delete(long id)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public async Task<Model.Device> GetById(long id)
|
||||
{
|
||||
var query =
|
||||
$@"SELECT
|
||||
d.""Id"" as {nameof(Model.Device.Id)},
|
||||
d.""Name"" as {nameof(Model.Device.Name)},
|
||||
d.""Description"" as {nameof(Model.Device.Description)},
|
||||
p.""Id"" as {nameof(Model.Prop.Id)},
|
||||
p.""Name"" as {nameof(Model.Prop.Name)},
|
||||
p.""JsonValueName"" as {nameof(Model.Prop.JsonValueName)},
|
||||
p.""MeasureName"" as {nameof(Model.Prop.MeasureName)}
|
||||
FROM ""Yuna_Devices"" d
|
||||
LEFT JOIN ""Yuna_Props_In_Devices"" pd ON d.""Id"" = pd.""DeviceId""
|
||||
LEFT JOIN ""Yuna_Props"" p ON pd.""PropId"" = p.""Id""
|
||||
WHERE d.""Id"" = {id}
|
||||
LIMIT 1";
|
||||
|
||||
var result = await _context.Connection.QuerySingleAsync<Model.Device>(query);
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<IReadOnlyList<Model.Device>> GetList()
|
||||
{
|
||||
var query =
|
||||
$@"SELECT
|
||||
d.""Id"" as {nameof(Model.Device.Id)},
|
||||
d.""Name"" as {nameof(Model.Device.Name)},
|
||||
d.""Description"" as {nameof(Model.Device.Description)},
|
||||
p.""Id"" as {nameof(Model.Prop.Id)},
|
||||
p.""Name"" as {nameof(Model.Prop.Name)},
|
||||
p.""JsonValueName"" as {nameof(Model.Prop.JsonValueName)},
|
||||
p.""MeasureName"" as {nameof(Model.Prop.MeasureName)}
|
||||
FROM ""Yuna_Devices"" d
|
||||
LEFT JOIN ""Yuna_Props_In_Devices"" pd ON d.""Id"" = pd.""DeviceId""
|
||||
LEFT JOIN ""Yuna_Props"" p ON pd.""PropId"" = p.""Id""";
|
||||
|
||||
var result = await _context.Connection.QueryAsync<Model.Device>(query);
|
||||
return result.ToList();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user