69 lines
2.2 KiB
C#
69 lines
2.2 KiB
C#
using Laservall.Solidworks.Server.Dto;
|
|
using Newtonsoft.Json;
|
|
using System.IO;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Laservall.Solidworks.Server.Handlers
|
|
{
|
|
internal sealed class SaveHandler
|
|
{
|
|
private readonly IBomDataProvider _dataProvider;
|
|
|
|
public SaveHandler(IBomDataProvider dataProvider)
|
|
{
|
|
_dataProvider = dataProvider;
|
|
}
|
|
|
|
public async Task HandleSave(HttpListenerContext context, CancellationToken ct)
|
|
{
|
|
string body;
|
|
using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8))
|
|
{
|
|
body = await reader.ReadToEndAsync();
|
|
}
|
|
|
|
var request = JsonConvert.DeserializeObject<SaveRequest>(body);
|
|
if (request?.Changes == null || request.Changes.Count == 0)
|
|
{
|
|
await WriteJson(context.Response, new SaveResponse { Success = true, SavedCount = 0 }, ct);
|
|
return;
|
|
}
|
|
|
|
var changes = new System.Collections.Generic.List<ChangeItem>();
|
|
foreach (var c in request.Changes)
|
|
{
|
|
changes.Add(new ChangeItem
|
|
{
|
|
DocPath = c.DocPath,
|
|
Key = c.Key,
|
|
Value = c.Value
|
|
});
|
|
}
|
|
|
|
var result = _dataProvider.SaveChanges(changes);
|
|
var response = new SaveResponse
|
|
{
|
|
Success = result.Success,
|
|
SavedCount = result.SavedCount,
|
|
Error = result.Error
|
|
};
|
|
|
|
context.Response.StatusCode = result.Success ? 200 : 500;
|
|
await WriteJson(context.Response, response, ct);
|
|
}
|
|
|
|
private static async Task WriteJson(HttpListenerResponse response, object data, CancellationToken ct)
|
|
{
|
|
response.ContentType = "application/json; charset=utf-8";
|
|
string json = JsonConvert.SerializeObject(data);
|
|
byte[] bytes = Encoding.UTF8.GetBytes(json);
|
|
response.ContentLength64 = bytes.Length;
|
|
await response.OutputStream.WriteAsync(bytes, 0, bytes.Length, ct);
|
|
response.Close();
|
|
}
|
|
}
|
|
}
|