115 lines
4.1 KiB
C#
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}");
|
|
}
|
|
}
|
|
}
|