[성현모] CPMeta 기능 구현 완료
This commit is contained in:
@ -249,13 +249,15 @@ PRINT N'테이블 [dbo].[tWbms]을(를) 만드는 중...';
|
||||
GO
|
||||
CREATE TABLE [dbo].[tWbms] (
|
||||
[cProductID] NVARCHAR (50) NOT NULL,
|
||||
[cMacAddress] NVARCHAR (50) NULL,
|
||||
[cMacAddress1] NVARCHAR (50) NULL,
|
||||
[cMacAddress2] NVARCHAR (50) NULL,
|
||||
[cType] NVARCHAR (20) NULL,
|
||||
[cProductNo] NVARCHAR (50) NULL,
|
||||
[cSpareValue] NVARCHAR (200) NULL,
|
||||
[cDateTime] DATETIME2 (7) NOT NULL,
|
||||
CONSTRAINT [PK_cProductKey] PRIMARY KEY CLUSTERED ([cProductID] ASC),
|
||||
CONSTRAINT [UQ_cMacAddress] UNIQUE NONCLUSTERED ([cMacAddress] ASC)
|
||||
CONSTRAINT [UQ_cMacAddress1] UNIQUE NONCLUSTERED ([cMacAddress1] ASC),
|
||||
CONSTRAINT [UQ_cMacAddress2] UNIQUE NONCLUSTERED ([cMacAddress2] ASC)
|
||||
);
|
||||
|
||||
|
||||
|
||||
@ -43,19 +43,70 @@ USE [$(DatabaseName)];
|
||||
|
||||
GO
|
||||
/*
|
||||
테이블 [dbo].[tWbmsMeta]의 열 [[dbo].[tWbmsMeta].[ctest]]을(를) 추가해야 하지만 해당 열에 기본값이 없으며 NULL 값을 허용하지 않습니다. 테이블에 데이터가 있으면 ALTER 스크립트가 실행되지 않습니다. 이러한 문제를 방지하려면 열에 기본값을 추가 및 해당 열을 NULL 값을 허용하도록 표시하거나 스마트 기본값을 배포 옵션으로서 생성할 수 있도록 하십시오.
|
||||
[dbo].[tWbms].[cMacAddress] 열이 삭제되므로 데이터 손실이 발생할 수 있습니다.
|
||||
*/
|
||||
|
||||
IF EXISTS (select top 1 1 from [dbo].[tWbmsMeta])
|
||||
IF EXISTS (select top 1 1 from [dbo].[tWbms])
|
||||
RAISERROR (N'행이 발견되었습니다. 데이터가 손실될 수 있으므로 스키마 업데이트가 종료됩니다.', 16, 127) WITH NOWAIT
|
||||
|
||||
GO
|
||||
PRINT N'테이블 [dbo].[tWbmsMeta]을(를) 변경하는 중...';
|
||||
PRINT N'UNIQUE 제약 조건 [dbo].[UQ_cMacAddress]을(를) 삭제하는 중...';
|
||||
|
||||
|
||||
GO
|
||||
ALTER TABLE [dbo].[tWbmsMeta]
|
||||
ADD [ctest] DATETIME2 (7) NOT NULL;
|
||||
ALTER TABLE [dbo].[tWbms] DROP CONSTRAINT [UQ_cMacAddress];
|
||||
|
||||
|
||||
GO
|
||||
PRINT N'[dbo].[tWbms] 테이블 다시 빌드 시작...';
|
||||
|
||||
|
||||
GO
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
CREATE TABLE [dbo].[tmp_ms_xx_tWbms] (
|
||||
[cProductID] NVARCHAR (50) NOT NULL,
|
||||
[cMacAddress1] NVARCHAR (50) NULL,
|
||||
[cMacAddress2] NVARCHAR (50) NULL,
|
||||
[cType] NVARCHAR (20) NULL,
|
||||
[cProductNo] NVARCHAR (50) NULL,
|
||||
[cSpareValue] NVARCHAR (200) NULL,
|
||||
[cDateTime] DATETIME2 (7) NOT NULL,
|
||||
CONSTRAINT [tmp_ms_xx_constraint_PK_cProductKey1] PRIMARY KEY CLUSTERED ([cProductID] ASC),
|
||||
CONSTRAINT [tmp_ms_xx_constraint_UQ_cMacAddress11] UNIQUE NONCLUSTERED ([cMacAddress1] ASC),
|
||||
CONSTRAINT [tmp_ms_xx_constraint_UQ_cMacAddress21] UNIQUE NONCLUSTERED ([cMacAddress2] ASC)
|
||||
);
|
||||
|
||||
IF EXISTS (SELECT TOP 1 1
|
||||
FROM [dbo].[tWbms])
|
||||
BEGIN
|
||||
INSERT INTO [dbo].[tmp_ms_xx_tWbms] ([cProductID], [cType], [cProductNo], [cSpareValue], [cDateTime])
|
||||
SELECT [cProductID],
|
||||
[cType],
|
||||
[cProductNo],
|
||||
[cSpareValue],
|
||||
[cDateTime]
|
||||
FROM [dbo].[tWbms]
|
||||
ORDER BY [cProductID] ASC;
|
||||
END
|
||||
|
||||
DROP TABLE [dbo].[tWbms];
|
||||
|
||||
EXECUTE sp_rename N'[dbo].[tmp_ms_xx_tWbms]', N'tWbms';
|
||||
|
||||
EXECUTE sp_rename N'[dbo].[tmp_ms_xx_constraint_PK_cProductKey1]', N'PK_cProductKey', N'OBJECT';
|
||||
|
||||
EXECUTE sp_rename N'[dbo].[tmp_ms_xx_constraint_UQ_cMacAddress11]', N'UQ_cMacAddress1', N'OBJECT';
|
||||
|
||||
EXECUTE sp_rename N'[dbo].[tmp_ms_xx_constraint_UQ_cMacAddress21]', N'UQ_cMacAddress2', N'OBJECT';
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
|
||||
|
||||
GO
|
||||
|
||||
Binary file not shown.
@ -13,18 +13,18 @@
|
||||
{
|
||||
"IP": "127.0.0.1",
|
||||
"Port": 1433,
|
||||
"DBName": "UniqueKeyDB",
|
||||
"DBName": "CPMeta",
|
||||
"DBID": 1,
|
||||
"UserID": "SystemX",
|
||||
"Password": "X"
|
||||
"UserID": "Alis",
|
||||
"Password": "Kefico!@34"
|
||||
},
|
||||
{
|
||||
"IP": "127.0.0.1",
|
||||
"Port": 1433,
|
||||
"DBName": "UniqueKeyDB_DEV",
|
||||
"DBName": "CPMeta_DEV",
|
||||
"DBID": 2,
|
||||
"UserID": "SystemX",
|
||||
"Password": "X"
|
||||
"UserID": "Alis",
|
||||
"Password": "Kefico!@34"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
@ -58,9 +58,10 @@
|
||||
<ItemGroup>
|
||||
<Folder Include="Properties" />
|
||||
<Folder Include="dbo" />
|
||||
<Folder Include="dbo\Tables" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Build Include="dbo\tWbmsMeta.sql" />
|
||||
<Build Include="dbo\Tables\tWbmsMeta.sql" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)..\..\DBPatch\sqlScripts\
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
CREATE TABLE [dbo].[tWbms]
|
||||
(
|
||||
[cProductID] NVARCHAR(50) NOT NULL,
|
||||
[cMacAddress] NVARCHAR(50) NULL,
|
||||
[cMacAddress1] NVARCHAR(50) NULL,
|
||||
[cMacAddress2] NVARCHAR(50) NULL,
|
||||
[cType] NVARCHAR(20) NULL,
|
||||
[cProductNo] NVARCHAR(50) NULL,
|
||||
|
||||
@ -9,5 +10,6 @@
|
||||
[cDateTime] DATETIME2 NOT NULL,
|
||||
|
||||
CONSTRAINT PK_cProductKey PRIMARY KEY (cProductID),
|
||||
CONSTRAINT UQ_cMacAddress UNIQUE (cMacAddress),
|
||||
CONSTRAINT UQ_cMacAddress1 UNIQUE (cMacAddress1),
|
||||
CONSTRAINT UQ_cMacAddress2 UNIQUE (cMacAddress2),
|
||||
)
|
||||
@ -21,10 +21,13 @@ public partial class CPMetaContext : DbContext
|
||||
{
|
||||
entity.HasKey(e => e.cProductID).HasName("PK_cProductKey");
|
||||
|
||||
entity.HasIndex(e => e.cMacAddress, "UQ_cMacAddress").IsUnique();
|
||||
entity.HasIndex(e => e.cMacAddress1, "UQ_cMacAddress1").IsUnique();
|
||||
|
||||
entity.HasIndex(e => e.cMacAddress2, "UQ_cMacAddress2").IsUnique();
|
||||
|
||||
entity.Property(e => e.cProductID).HasMaxLength(50);
|
||||
entity.Property(e => e.cMacAddress).HasMaxLength(50);
|
||||
entity.Property(e => e.cMacAddress1).HasMaxLength(50);
|
||||
entity.Property(e => e.cMacAddress2).HasMaxLength(50);
|
||||
entity.Property(e => e.cProductNo).HasMaxLength(50);
|
||||
entity.Property(e => e.cSpareValue).HasMaxLength(200);
|
||||
entity.Property(e => e.cType).HasMaxLength(20);
|
||||
|
||||
@ -7,7 +7,9 @@ public partial class tWbms
|
||||
{
|
||||
public string cProductID { get; set; } = null!;
|
||||
|
||||
public string? cMacAddress { get; set; }
|
||||
public string? cMacAddress1 { get; set; }
|
||||
|
||||
public string? cMacAddress2 { get; set; }
|
||||
|
||||
public string? cType { get; set; }
|
||||
|
||||
|
||||
@ -264,7 +264,7 @@ namespace AuthApi.Services
|
||||
private AccountDBContext? GetAccountDBContext(DbContextProvider provider, int dbID)
|
||||
{
|
||||
var connectionString = _configService?.GetConfig()?.DataBase?.Find(x => x.DBID == dbID);
|
||||
return provider?.GetDBContext<AccountDBContext>($"{connectionString?.DBName}");
|
||||
return provider?.GetDBContext<AccountDBContext>(Convert.ToInt32(connectionString?.DBID));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,5 +10,6 @@ namespace WebApi.Library.Enums
|
||||
{
|
||||
Success = 1,
|
||||
Failed = 2,
|
||||
Update = 3,
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,70 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SystemX.Core.Controller;
|
||||
using WebApi.Project.UniqueKeyApi.Models;
|
||||
using WebApi.Project.UniqueKeyApi.Services;
|
||||
|
||||
namespace WebApi.Project.UniqueKeyApi.Controllers
|
||||
{
|
||||
[ApiController]
|
||||
[Route("[controller]/[action]")]
|
||||
|
||||
public class CPMetaController : CommonController<UniqueKeyApiConfig>
|
||||
{
|
||||
private readonly CPMetaService _cpMetaService;
|
||||
|
||||
public CPMetaController(IServiceProvider serviceProvider, IHttpContextAccessor httpContextAccessor, CPMetaService cpMetaService)
|
||||
: base(serviceProvider, httpContextAccessor)
|
||||
{
|
||||
_cpMetaService = cpMetaService;
|
||||
}
|
||||
|
||||
[HttpGet("health")]
|
||||
public async Task<IResult> Health()
|
||||
{
|
||||
LogXnet.WriteLine($"[{GetRequestMethod()}:{GetMethodName()}] [Client IP:{GetClientIP()}] [RequestUrl:{GetRequestUrl()}]{Environment.NewLine}", LogXLabel.CONTROLLER);
|
||||
|
||||
await Task.CompletedTask;
|
||||
return Results.Ok("Healthy");
|
||||
}
|
||||
|
||||
|
||||
[HttpPost]
|
||||
public async Task<IResult> SetWbmsMeta([FromBody]Request_SetWbmsMeta request)
|
||||
{
|
||||
Guid guid = Guid.NewGuid();
|
||||
LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} {request.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
Response_SetWbmsMeta response = await _cpMetaService.SetWbmsMeta(request, guid.ToString());
|
||||
|
||||
LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
return Results.Ok(response);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IResult> GetWbmsMetaByProductID([FromQuery] string ProductID, int? ShardID = 1)
|
||||
{
|
||||
Guid guid = Guid.NewGuid();
|
||||
LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} key:{ProductID}", LogXLabel.CONTROLLER);
|
||||
|
||||
Response_GetWbms response = await _cpMetaService.GetWbmsMeta(new Request_GetWbmsMetaByProductID() { ProductID = ProductID, ShardID = (int)ShardID }, guid.ToString());
|
||||
|
||||
LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
return Results.Ok(response);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IResult> GetWbmsMetaByMacAddress([FromQuery] string MacAddress, int? ShardID = 1)
|
||||
{
|
||||
Guid guid = Guid.NewGuid();
|
||||
LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} key:{MacAddress}", LogXLabel.CONTROLLER);
|
||||
|
||||
Response_GetWbms response = await _cpMetaService.GetWbmsMeta(new Request_GetWbmsMetaByMacAddress() { MacAddress = MacAddress, ShardID = (int)ShardID }, guid.ToString());
|
||||
|
||||
LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
return Results.Ok(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -8,78 +8,78 @@ using WebApi.Project.UniqueKeyApi.Services;
|
||||
|
||||
namespace WebApi.Project.UniqueKeyApi.Controllers
|
||||
{
|
||||
[ApiController]
|
||||
[Route("[controller]/[action]")]
|
||||
//[ApiController]
|
||||
//[Route("[controller]/[action]")]
|
||||
|
||||
public class UniqueKeyController : CommonController<UniqueKeyApiConfig>
|
||||
{
|
||||
private readonly UniqueKeyService _uniqueKeyService;
|
||||
//public class UniqueKeyController : CommonController<UniqueKeyApiConfig>
|
||||
//{
|
||||
// private readonly UniqueKeyService _uniqueKeyService;
|
||||
|
||||
public UniqueKeyController(IServiceProvider serviceProvider, IHttpContextAccessor httpContextAccessor, UniqueKeyService uniqueKeyService)
|
||||
: base(serviceProvider, httpContextAccessor)
|
||||
{
|
||||
_uniqueKeyService = uniqueKeyService;
|
||||
}
|
||||
// public UniqueKeyController(IServiceProvider serviceProvider, IHttpContextAccessor httpContextAccessor, UniqueKeyService uniqueKeyService)
|
||||
// : base(serviceProvider, httpContextAccessor)
|
||||
// {
|
||||
// _uniqueKeyService = uniqueKeyService;
|
||||
// }
|
||||
|
||||
[HttpGet("health")]
|
||||
public async Task<IResult> Health()
|
||||
{
|
||||
LogXnet.WriteLine($"[{GetRequestMethod()}:{GetMethodName()}] [Client IP:{GetClientIP()}] [RequestUrl:{GetRequestUrl()}]{Environment.NewLine}", LogXLabel.CONTROLLER);
|
||||
// [HttpGet("health")]
|
||||
// public async Task<IResult> Health()
|
||||
// {
|
||||
// LogXnet.WriteLine($"[{GetRequestMethod()}:{GetMethodName()}] [Client IP:{GetClientIP()}] [RequestUrl:{GetRequestUrl()}]{Environment.NewLine}", LogXLabel.CONTROLLER);
|
||||
|
||||
await Task.CompletedTask;
|
||||
return Results.Ok("Healthy");
|
||||
}
|
||||
// await Task.CompletedTask;
|
||||
// return Results.Ok("Healthy");
|
||||
// }
|
||||
|
||||
[HttpPost]
|
||||
public async Task<IResult> InsertUniqueKey(Request_InsertUniqueKey request)
|
||||
{
|
||||
Guid guid = Guid.NewGuid();
|
||||
LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} {request.ToJson()}", LogXLabel.CONTROLLER);
|
||||
// [HttpPost]
|
||||
// public async Task<IResult> InsertUniqueKey(Request_InsertUniqueKey request)
|
||||
// {
|
||||
// Guid guid = Guid.NewGuid();
|
||||
// LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} {request.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
Response_InsertUniqueKy response = await _uniqueKeyService.Request_InsertUniqueKey(request);
|
||||
// Response_InsertUniqueKy response = await _uniqueKeyService.Request_InsertUniqueKey(request);
|
||||
|
||||
LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
// LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
return Results.Ok(response);
|
||||
}
|
||||
// return Results.Ok(response);
|
||||
// }
|
||||
|
||||
[HttpPost]
|
||||
public async Task<IResult> SelectUniqueKey([FromBody]Request_SelectUniqueKey request)
|
||||
{
|
||||
Guid guid = Guid.NewGuid();
|
||||
LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} {request.ToJson()}", LogXLabel.CONTROLLER);
|
||||
// [HttpPost]
|
||||
// public async Task<IResult> SelectUniqueKey([FromBody]Request_SelectUniqueKey request)
|
||||
// {
|
||||
// Guid guid = Guid.NewGuid();
|
||||
// LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} {request.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
Response_SelectUniqueKy response = await _uniqueKeyService.Request_SelectUniqueKey(request);
|
||||
// Response_SelectUniqueKy response = await _uniqueKeyService.Request_SelectUniqueKey(request);
|
||||
|
||||
LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
// LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
return Results.Ok(response);
|
||||
}
|
||||
// return Results.Ok(response);
|
||||
// }
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IResult> SelectUniqueKeyGet([FromQuery] string key)
|
||||
{
|
||||
Guid guid = Guid.NewGuid();
|
||||
LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} key:{key}", LogXLabel.CONTROLLER);
|
||||
// [HttpGet]
|
||||
// public async Task<IResult> SelectUniqueKeyGet([FromQuery] string key)
|
||||
// {
|
||||
// Guid guid = Guid.NewGuid();
|
||||
// LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} key:{key}", LogXLabel.CONTROLLER);
|
||||
|
||||
Response_SelectUniqueKy response = await _uniqueKeyService.Request_SelectUniqueKey(new Request_SelectUniqueKey { Identity = key });
|
||||
// Response_SelectUniqueKy response = await _uniqueKeyService.Request_SelectUniqueKey(new Request_SelectUniqueKey { Identity = key });
|
||||
|
||||
LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
// LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
return Results.Ok(response);
|
||||
}
|
||||
// return Results.Ok(response);
|
||||
// }
|
||||
|
||||
[HttpPost]
|
||||
public async Task<IResult> UpdateUniqueKey(Request_UpdateUniqueKey request)
|
||||
{
|
||||
Guid guid = Guid.NewGuid();
|
||||
LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} {request.ToJson()}", LogXLabel.CONTROLLER);
|
||||
// [HttpPost]
|
||||
// public async Task<IResult> UpdateUniqueKey(Request_UpdateUniqueKey request)
|
||||
// {
|
||||
// Guid guid = Guid.NewGuid();
|
||||
// LogXnet.WriteLine($"[Request][{GetRequestMethod()}:{GetMethodName()}][Client IP:{GetClientIP()}][RequestUrl:{GetRequestUrl()}]::({guid}){Environment.NewLine} {request.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
Response_UpdateUniqueKy response = await _uniqueKeyService.Request_UpdateUniqueKey(request);
|
||||
// Response_UpdateUniqueKy response = await _uniqueKeyService.Request_UpdateUniqueKey(request);
|
||||
|
||||
LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
// LogXnet.WriteLine($"[Response]::({guid}){Environment.NewLine} {response.ToJson()}", LogXLabel.CONTROLLER);
|
||||
|
||||
return Results.Ok(response);
|
||||
}
|
||||
}
|
||||
// return Results.Ok(response);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
@ -1,7 +1,54 @@
|
||||
using WebApi.Library.Enums;
|
||||
using SystemX.Core.DB;
|
||||
using WebApi.Library.Enums;
|
||||
|
||||
namespace WebApi.Project.UniqueKeyApi.Models
|
||||
{
|
||||
#region CPMeta Wbms
|
||||
|
||||
//Wbms Meta Insert or Update
|
||||
public class Request_SetWbmsMeta
|
||||
{
|
||||
//pk
|
||||
public string ProductID { get; set; } = string.Empty;
|
||||
//uk
|
||||
public string? MacAddress1 { get; set; } = string.Empty;
|
||||
public string? MacAddress2 { get; set; } = string.Empty;
|
||||
|
||||
//value
|
||||
public string? Type { get; set; } = string.Empty;
|
||||
public string? ProductNo { get; set; } = string.Empty;
|
||||
public string? SpareValue { get; set; } = string.Empty;
|
||||
|
||||
public int ShardID { get; set; } = 1;
|
||||
}
|
||||
public class Response_SetWbmsMeta
|
||||
{
|
||||
public string ProductID { get; set; } = string.Empty;
|
||||
public string Result { get; set; } = string.Empty;
|
||||
public string Message { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
//Wbms Meta Select
|
||||
public class Request_GetWbmsMetaByProductID
|
||||
{
|
||||
public string ProductID { get; set; } = string.Empty;
|
||||
public int ShardID { get; set; } = 1;
|
||||
}
|
||||
public class Request_GetWbmsMetaByMacAddress
|
||||
{
|
||||
public string MacAddress { get; set; } = string.Empty;
|
||||
public int ShardID { get; set; } = 1;
|
||||
}
|
||||
|
||||
public class Response_GetWbms
|
||||
{
|
||||
public List<tWbms> Wbms { get; set; }
|
||||
public string Result { get; set; } = string.Empty;
|
||||
public string Message { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Unique Key
|
||||
//Insert
|
||||
public class Request_InsertUniqueKey
|
||||
|
||||
@ -26,6 +26,7 @@ builder.Services.AddSingleton<ConfigService<UniqueKeyApiConfig>>();
|
||||
|
||||
//scoped
|
||||
builder.Services.AddSingleton<UniqueKeyService>();
|
||||
builder.Services.AddSingleton<CPMetaService>();
|
||||
|
||||
//db
|
||||
builder.Services.AddSingleton<DbContextProvider>(); // Generic <20><><EFBFBD><EFBFBD>
|
||||
|
||||
@ -0,0 +1,258 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Data;
|
||||
using SystemX.Core.DB;
|
||||
using SystemX.Core.Services;
|
||||
using WebApi.Library.Enums;
|
||||
using WebApi.Project.UniqueKeyApi.Models;
|
||||
|
||||
namespace WebApi.Project.UniqueKeyApi.Services
|
||||
{
|
||||
public class CPMetaService
|
||||
{
|
||||
private readonly IServiceScopeFactory _scopeFactory;
|
||||
private readonly ConfigService<UniqueKeyApiConfig>? _configService;
|
||||
|
||||
public CPMetaService(IServiceProvider serviceProvider, IServiceScopeFactory scopeFactory, ConfigService<UniqueKeyApiConfig> configSerice)
|
||||
{
|
||||
_scopeFactory = scopeFactory;
|
||||
_configService = configSerice;
|
||||
}
|
||||
|
||||
public async Task<Response_SetWbmsMeta> SetWbmsMeta(Request_SetWbmsMeta request, string guid = "")
|
||||
{
|
||||
Response_SetWbmsMeta response = new Response_SetWbmsMeta();
|
||||
|
||||
if (request != null)
|
||||
{
|
||||
response.ProductID = request.ProductID;
|
||||
|
||||
bool transactionResult = true;
|
||||
using (var scope = _scopeFactory.CreateScope())
|
||||
{
|
||||
int shardId = request.ShardID;
|
||||
if (shardId <= 0)
|
||||
shardId = 1;
|
||||
|
||||
var provider = scope.ServiceProvider.GetRequiredService<DbContextProvider>();
|
||||
using (var context = GetCPMetaDBContext(provider, shardId))
|
||||
{
|
||||
if (context is not null)
|
||||
{
|
||||
var data = await context.tWbms.AsNoTracking().Where(x => x.cProductID == request.ProductID)?.FirstOrDefaultAsync();
|
||||
if (data is not null) //update
|
||||
{
|
||||
var selected = await context.tWbms.FirstOrDefaultAsync(x => x.cProductID == request.ProductID);
|
||||
if (selected != null)
|
||||
{
|
||||
selected.cMacAddress1 = request.MacAddress1;
|
||||
selected.cMacAddress2 = request.MacAddress2;
|
||||
selected.cType = request.Type;
|
||||
selected.cProductNo = request.ProductNo;
|
||||
selected.cSpareValue = request.SpareValue;
|
||||
|
||||
selected.cDateTime = DateTime.Now;
|
||||
|
||||
using (var transaction = await context.CreateTransactionAsync())
|
||||
{
|
||||
context.Update(selected);
|
||||
transactionResult = await context.CloseTransactionAsync(transaction);
|
||||
}
|
||||
}
|
||||
|
||||
LogXnet.WriteLine($"Update::{guid}", LogXLabel.DB);
|
||||
response.Result = WebApiResult.Update.ToString();
|
||||
}
|
||||
else //insert
|
||||
{
|
||||
var row = new tWbms
|
||||
{
|
||||
cProductID = request.ProductID,
|
||||
cMacAddress1 = request.MacAddress1,
|
||||
cMacAddress2 = request.MacAddress2,
|
||||
cType = request.Type,
|
||||
cProductNo = request.ProductNo,
|
||||
cSpareValue = request.SpareValue,
|
||||
|
||||
cDateTime = DateTime.Now
|
||||
};
|
||||
|
||||
using (var transaction = await context.CreateTransactionAsync())
|
||||
{
|
||||
await context.AddAsync(row);
|
||||
transactionResult = await context.CloseTransactionAsync(transaction);
|
||||
}
|
||||
|
||||
LogXnet.WriteLine($"Insert::{guid}", LogXLabel.DB);
|
||||
response.Result = WebApiResult.Success.ToString();
|
||||
}
|
||||
|
||||
//db error
|
||||
if (transactionResult == false)
|
||||
{
|
||||
LogXnet.WriteLine($"Transaction Error::{guid}", LogXLabel.Error);
|
||||
response.Result = WebApiResult.Failed.ToString();
|
||||
response.Message = "Duplicate Mac Address";
|
||||
}
|
||||
}
|
||||
else //invalid shard id
|
||||
{
|
||||
LogXnet.WriteLine($"ShardID Error::{guid}", LogXLabel.Error);
|
||||
response.Result = WebApiResult.Failed.ToString();
|
||||
response.Message = "Invalid shard id";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<Response_GetWbms> GetWbmsMeta(Request_GetWbmsMetaByProductID request, string guid = "")
|
||||
{
|
||||
Response_GetWbms response = new Response_GetWbms();
|
||||
response.Wbms = new List<tWbms>();
|
||||
|
||||
if (request != null)
|
||||
{
|
||||
using (var scope = _scopeFactory.CreateScope())
|
||||
{
|
||||
int shardId = request.ShardID;
|
||||
if (shardId <= 0)
|
||||
shardId = 1;
|
||||
|
||||
var provider = scope.ServiceProvider.GetRequiredService<DbContextProvider>();
|
||||
using (var context = GetCPMetaDBContext(provider, shardId))
|
||||
{
|
||||
if (context is not null)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var transaction = await context.CreateTransactionAsync(IsolationLevel.ReadUncommitted))
|
||||
{
|
||||
var data = await context.tWbms.AsNoTracking().FirstOrDefaultAsync(x => x.cProductID.ToLower() == request.ProductID.ToLower());
|
||||
await context.CloseTransactionAsync(transaction);
|
||||
if (data != null)
|
||||
{
|
||||
if(response.Wbms is not null)
|
||||
{
|
||||
response.Wbms.Add(data);
|
||||
}
|
||||
|
||||
response.Result = WebApiResult.Success.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
response.Wbms = null;
|
||||
response.Result = WebApiResult.Failed.ToString();
|
||||
response.Message = $"Not exist productID: {request.ProductID}";
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
response.Wbms = null;
|
||||
response.Result = WebApiResult.Failed.ToString();
|
||||
response.Message = $"Not exist productID: {request.ProductID}";
|
||||
|
||||
LogXnet.WriteLine($"GetWbmsMeta By ProductID Transaction Error::{guid}", LogXLabel.Error);
|
||||
LogXnet.WriteLine(e);
|
||||
}
|
||||
}
|
||||
else //invalid shard id
|
||||
{
|
||||
LogXnet.WriteLine($"ShardID Error::{guid}", LogXLabel.Error);
|
||||
response.Result = WebApiResult.Failed.ToString();
|
||||
response.Message = "Invalid shard id";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<Response_GetWbms> GetWbmsMeta(Request_GetWbmsMetaByMacAddress request, string guid = "")
|
||||
{
|
||||
Response_GetWbms response = new Response_GetWbms();
|
||||
response.Wbms = new List<tWbms>();
|
||||
|
||||
if (request != null)
|
||||
{
|
||||
using (var scope = _scopeFactory.CreateScope())
|
||||
{
|
||||
int shardId = request.ShardID;
|
||||
if (shardId <= 0)
|
||||
shardId = 1;
|
||||
|
||||
var provider = scope.ServiceProvider.GetRequiredService<DbContextProvider>();
|
||||
using (var context = GetCPMetaDBContext(provider, shardId))
|
||||
{
|
||||
if (context is not null)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var transaction = await context.CreateTransactionAsync(IsolationLevel.ReadUncommitted))
|
||||
{
|
||||
var mac1 = await context.tWbms.AsNoTracking().FirstOrDefaultAsync(x => x.cMacAddress1.ToLower() == request.MacAddress.ToLower());
|
||||
var mac2 = await context.tWbms.AsNoTracking().FirstOrDefaultAsync(x => x.cMacAddress2.ToLower() == request.MacAddress.ToLower());
|
||||
await context.CloseTransactionAsync(transaction);
|
||||
if (mac1 is not null)
|
||||
{
|
||||
if(response.Wbms is not null)
|
||||
{
|
||||
response.Wbms.Add(mac1);
|
||||
}
|
||||
response.Result = WebApiResult.Success.ToString();
|
||||
}
|
||||
|
||||
if(mac2 is not null)
|
||||
{
|
||||
if (response.Wbms is not null)
|
||||
{
|
||||
response.Wbms.Add(mac2);
|
||||
}
|
||||
response.Result = WebApiResult.Success.ToString();
|
||||
}
|
||||
|
||||
if(response.Wbms?.Count <= 0)
|
||||
{
|
||||
response.Wbms = null;
|
||||
response.Result = WebApiResult.Failed.ToString();
|
||||
response.Message = $"Not exist MacAddress: {request.MacAddress}";
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
response.Wbms = null;
|
||||
response.Result = WebApiResult.Failed.ToString();
|
||||
response.Message = $"Not exist MacAddrss: {request.MacAddress}";
|
||||
|
||||
LogXnet.WriteLine($"GetWbmsMeta By MacAddress Transaction Error::{guid}", LogXLabel.Error);
|
||||
LogXnet.WriteLine(e);
|
||||
}
|
||||
}
|
||||
else //invalid shard id
|
||||
{
|
||||
LogXnet.WriteLine($"ShardID Error::{guid}", LogXLabel.Error);
|
||||
response.Result = WebApiResult.Failed.ToString();
|
||||
response.Message = "Invalid shard id";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
private CPMetaContext? GetCPMetaDBContext(DbContextProvider provider, int dbID)
|
||||
{
|
||||
var connectionString = _configService?.GetConfig()?.DataBase?.Find(x => x.DBID == dbID);
|
||||
if(connectionString is not null)
|
||||
return provider?.GetDBContext<CPMetaContext>((int)connectionString?.DBID);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user