Files
Tabletop/Tabletop.Core/Services/LayoutService.cs
2025-12-30 02:22:44 +01:00

98 lines
3.4 KiB
C#

using DbController;
using Tabletop.Core.Models;
namespace Tabletop.Core.Services
{
public class LayoutService : IModelService<Layout, int>
{
public async Task CreateAsync(Layout input, IDbController dbController, CancellationToken cancellationToken = default)
{
string sql = $@"INSERT INTO Layouts
(
GamemodeId,
Teams,
Width,
Height
)
VALUES
(
@GAMEMODE_ID
@TEAMS,
@WIDTH,
@HEIGHT
); {dbController.GetLastIdSql()}";
input.LayoutId = await dbController.GetFirstAsync<int>(sql, input.GetParameters(), cancellationToken);
}
public async Task DeleteAsync(Layout input, IDbController dbController, CancellationToken cancellationToken = default)
{
string sql = "DELETE FROM Layouts WHERE LayoutId = @LAYOUT_ID";
await dbController.QueryAsync(sql, new
{
LAYOUT_ID = input.LayoutId
}, cancellationToken);
}
public static async Task<List<SetupZone>> GetSetupZonesAsync(int layoutId, IDbController dbController, CancellationToken cancellationToken = default)
{
cancellationToken.ThrowIfCancellationRequested();
string sql = @"
SELECT sz.SetupZoneId, sz.LayoutId, z.*
FROM SetupZones sz
INNER JOIN Zones z ON (z.ZoneId = sz.ZoneId)
WHERE sz.LayoutId = @LAYOUT_ID";
var list = await dbController.SelectDataAsync<SetupZone>(sql, new
{
LAYOUT_ID = layoutId
}, cancellationToken);
return list;
}
public static async Task<List<CaptureZone>> GetCaptureZonesAsync(int layoutId, IDbController dbController, CancellationToken cancellationToken = default)
{
cancellationToken.ThrowIfCancellationRequested();
string sql = @"
SELECT cz.CaptureZoneId, cz.LayoutId, z.*
FROM CaptureZones cz
INNER JOIN Zones z ON (z.ZoneId = cz.ZoneId)
WHERE cz.LayoutId = @LAYOUT_ID";
var list = await dbController.SelectDataAsync<CaptureZone>(sql, new
{
LAYOUT_ID = layoutId
}, cancellationToken);
return list;
}
public static async Task<List<Layout>> GetAllAsync(IDbController dbController, CancellationToken cancellationToken = default)
{
string sql = "SELECT * FROM Layouts";
var list = await dbController.SelectDataAsync<Layout>(sql, cancellationToken: cancellationToken);
foreach(var layout in list)
{
layout.SetupZones = await GetSetupZonesAsync(layout.LayoutId, dbController, cancellationToken);
layout.CaptureZones = await GetCaptureZonesAsync(layout.LayoutId, dbController, cancellationToken);
}
return list;
}
public Task<Layout?> GetAsync(int battlegroundId, IDbController dbController, CancellationToken cancellationToken = default)
{
throw new NotImplementedException();
}
public Task UpdateAsync(Layout input, IDbController dbController, CancellationToken cancellationToken = default)
{
throw new NotImplementedException();
}
}
}