RobotNet/RobotNet.MapManager/Controllers/ZonesController.cs
2025-10-15 15:15:53 +07:00

115 lines
4.1 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using RobotNet.MapManager.Data;
using RobotNet.MapManager.Services;
using RobotNet.MapShares;
using RobotNet.MapShares.Dtos;
using RobotNet.Shares;
namespace RobotNet.MapManager.Controllers;
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class ZonesController(MapEditorDbContext MapDb, LoggerController<ZonesController> Logger) : ControllerBase
{
[HttpPost]
[Route("")]
public async Task<MessageResult<ZoneDto>> Create([FromBody] ZoneCreateModel zone)
{
try
{
var map = await MapDb.Maps.FindAsync(zone.MapId);
if (map == null) return new(false, $"Không tồn tại map id = {zone.MapId}");
if (MapEditorHelper.CalculateQuadrilateralArea(zone.X1, zone.Y1, zone.X2, zone.Y2, zone.X3, zone.Y3, zone.X4, zone.Y4) < map.ZoneMinSquareDefault)
return new(false, "Kích thước Zone quá nhỏ");
var entity = await MapDb.Zones.AddAsync(new()
{
MapId = zone.MapId,
Type = zone.Type,
Name = "",
X1 = zone.X1,
X2 = zone.X2,
X3 = zone.X3,
X4 = zone.X4,
Y1 = zone.Y1,
Y2 = zone.Y2,
Y3 = zone.Y3,
Y4 = zone.Y4,
});
await MapDb.SaveChangesAsync();
return new(true)
{
Data = new ZoneDto() { Id = entity.Entity.Id, MapId = entity.Entity.MapId, Type = entity.Entity.Type, X1 = entity.Entity.X1, X2 = entity.Entity.X2, X3 = entity.Entity.X3, X4 = entity.Entity.X4, Y1 = entity.Entity.Y1, Y2 = entity.Entity.Y2, Y3 = entity.Entity.Y3, Y4 = entity.Entity.Y4 }
};
}
catch (Exception ex)
{
Logger.Warning($"Create: Hệ thống có lỗi xảy ra - {ex.Message}");
return new(false, "Hệ thống có lỗi xảy ra");
}
}
[HttpDelete]
[Route("{id}")]
public async Task<MessageResult> Delete(Guid id)
{
try
{
var zoneExisted = await MapDb.Zones.FindAsync(id);
if (zoneExisted is not null)
{
MapDb.Zones.Remove(zoneExisted);
await MapDb.SaveChangesAsync();
return new(true);
}
return new(false, "Hệ thống không tìm thấy khu vực Zone này");
}
catch (Exception ex)
{
Logger.Warning($"Delete {id}: Hệ thống có lỗi xảy ra - {ex.Message}");
return new(false, "Hệ thống có lỗi xảy ra");
}
}
[HttpPut]
[Route("")]
public async Task<MessageResult> Update([FromBody] ZoneUpdateModel zone)
{
try
{
var zoneExisted = await MapDb.Zones.FindAsync(zone.Id);
if (zoneExisted is not null)
{
if (zoneExisted.Name != zone.Name && !string.IsNullOrWhiteSpace(zone.Name) && await MapDb.Zones.AnyAsync(z => z.Name == zone.Name && z.MapId == zoneExisted.MapId))
{
return new(false, $"Tên zone {zone.Name} đã tồn tại trong map");
}
zoneExisted.Type = zone.Type;
zoneExisted.Name = zone.Name;
zoneExisted.X1 = zone.X1;
zoneExisted.X2 = zone.X2;
zoneExisted.X3 = zone.X3;
zoneExisted.X4 = zone.X4;
zoneExisted.Y1 = zone.Y1;
zoneExisted.Y2 = zone.Y2;
zoneExisted.Y3 = zone.Y3;
zoneExisted.Y4 = zone.Y4;
MapDb.Zones.Update(zoneExisted);
await MapDb.SaveChangesAsync();
return new(true);
}
return new(false, "Hệ thống không tìm thấy khu vực Zone này");
}
catch (Exception ex)
{
Logger.Warning($"Update: Hệ thống có lỗi xảy ra - {ex.Message}");
return new(false, $"Update: Hệ thống có lỗi xảy ra - {ex.Message}");
}
}
}