diff --git a/DBPatch/sqlScripts/SystemX.DB.CPMeta_Create.sql b/DBPatch/sqlScripts/SystemX.DB.CPMeta_Create.sql
index 1ae9811..8b21993 100644
--- a/DBPatch/sqlScripts/SystemX.DB.CPMeta_Create.sql
+++ b/DBPatch/sqlScripts/SystemX.DB.CPMeta_Create.sql
@@ -248,14 +248,16 @@ PRINT N'테이블 [dbo].[tWbms]을(를) 만드는 중...';
GO
CREATE TABLE [dbo].[tWbms] (
- [cProductID] NVARCHAR (50) NOT NULL,
- [cMacAddress] NVARCHAR (50) NULL,
- [cType] NVARCHAR (20) NULL,
- [cProductNo] NVARCHAR (50) NULL,
- [cSpareValue] NVARCHAR (200) NULL,
- [cDateTime] DATETIME2 (7) NOT NULL,
+ [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 [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)
);
diff --git a/DBPatch/sqlScripts/SystemX.DB.CPMeta_Update.sql b/DBPatch/sqlScripts/SystemX.DB.CPMeta_Update.sql
index fc91ec7..173896d 100644
--- a/DBPatch/sqlScripts/SystemX.DB.CPMeta_Update.sql
+++ b/DBPatch/sqlScripts/SystemX.DB.CPMeta_Update.sql
@@ -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
diff --git a/DBPatch/sqlScripts/dacpac/SystemX.DB.CPMeta.dacpac b/DBPatch/sqlScripts/dacpac/SystemX.DB.CPMeta.dacpac
index d3db354..1380e40 100644
Binary files a/DBPatch/sqlScripts/dacpac/SystemX.DB.CPMeta.dacpac and b/DBPatch/sqlScripts/dacpac/SystemX.DB.CPMeta.dacpac differ
diff --git a/Projects/Config/WebApi.Project.UniqueKeyApi.Config.json b/Projects/Config/WebApi.Project.UniqueKeyApi.Config.json
index dcb8df7..6098926 100644
--- a/Projects/Config/WebApi.Project.UniqueKeyApi.Config.json
+++ b/Projects/Config/WebApi.Project.UniqueKeyApi.Config.json
@@ -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"
}
]
}
\ No newline at end of file
diff --git a/Projects/DLL/SystemX.Core.DB.dll b/Projects/DLL/SystemX.Core.DB.dll
index 0c35936..9575ca7 100644
Binary files a/Projects/DLL/SystemX.Core.DB.dll and b/Projects/DLL/SystemX.Core.DB.dll differ
diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPMeta/SystemX.DB.CPMeta.sqlproj b/Projects/SystemX.Core/DB/SystemX.DB.CPMeta/SystemX.DB.CPMeta.sqlproj
index 1683211..bf1df78 100644
--- a/Projects/SystemX.Core/DB/SystemX.DB.CPMeta/SystemX.DB.CPMeta.sqlproj
+++ b/Projects/SystemX.Core/DB/SystemX.DB.CPMeta/SystemX.DB.CPMeta.sqlproj
@@ -58,9 +58,10 @@
+
-
+
xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)..\..\DBPatch\sqlScripts\
diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPMeta/dbo/tWbmsMeta.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPMeta/dbo/Tables/tWbmsMeta.sql
similarity index 59%
rename from Projects/SystemX.Core/DB/SystemX.DB.CPMeta/dbo/tWbmsMeta.sql
rename to Projects/SystemX.Core/DB/SystemX.DB.CPMeta/dbo/Tables/tWbmsMeta.sql
index a4b2495..579ac79 100644
--- a/Projects/SystemX.Core/DB/SystemX.DB.CPMeta/dbo/tWbmsMeta.sql
+++ b/Projects/SystemX.Core/DB/SystemX.DB.CPMeta/dbo/Tables/tWbmsMeta.sql
@@ -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),
)
diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPMeta/Context/CPMetaContext.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPMeta/Context/CPMetaContext.cs
index f6d1941..8e62159 100644
--- a/Projects/SystemX.Core/SystemX.Core.DB/CPMeta/Context/CPMetaContext.cs
+++ b/Projects/SystemX.Core/SystemX.Core.DB/CPMeta/Context/CPMetaContext.cs
@@ -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);
diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPMeta/Tables/tWbms.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPMeta/Tables/tWbms.cs
index 3264af9..7bbfba6 100644
--- a/Projects/SystemX.Core/SystemX.Core.DB/CPMeta/Tables/tWbms.cs
+++ b/Projects/SystemX.Core/SystemX.Core.DB/CPMeta/Tables/tWbms.cs
@@ -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; }
diff --git a/Projects/WebApi/AuthApi/Services/AuthService.cs b/Projects/WebApi/AuthApi/Services/AuthService.cs
index cabda8f..46f1a3a 100644
--- a/Projects/WebApi/AuthApi/Services/AuthService.cs
+++ b/Projects/WebApi/AuthApi/Services/AuthService.cs
@@ -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($"{connectionString?.DBName}");
+ return provider?.GetDBContext(Convert.ToInt32(connectionString?.DBID));
}
}
}
diff --git a/Projects/WebApi/WebApi.Library/Enums/WebApiResult.cs b/Projects/WebApi/WebApi.Library/Enums/WebApiResult.cs
index 876dc9f..4ee4887 100644
--- a/Projects/WebApi/WebApi.Library/Enums/WebApiResult.cs
+++ b/Projects/WebApi/WebApi.Library/Enums/WebApiResult.cs
@@ -10,5 +10,6 @@ namespace WebApi.Library.Enums
{
Success = 1,
Failed = 2,
+ Update = 3,
}
}
diff --git a/Projects/WebApi/WebApi.Project.UniqueKeyApi/Controllers/CPMetaController.cs b/Projects/WebApi/WebApi.Project.UniqueKeyApi/Controllers/CPMetaController.cs
new file mode 100644
index 0000000..7ca580b
--- /dev/null
+++ b/Projects/WebApi/WebApi.Project.UniqueKeyApi/Controllers/CPMetaController.cs
@@ -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
+ {
+ private readonly CPMetaService _cpMetaService;
+
+ public CPMetaController(IServiceProvider serviceProvider, IHttpContextAccessor httpContextAccessor, CPMetaService cpMetaService)
+ : base(serviceProvider, httpContextAccessor)
+ {
+ _cpMetaService = cpMetaService;
+ }
+
+ [HttpGet("health")]
+ public async Task 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 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 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 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);
+ }
+ }
+}
diff --git a/Projects/WebApi/WebApi.Project.UniqueKeyApi/Controllers/UniqueKeyController.cs b/Projects/WebApi/WebApi.Project.UniqueKeyApi/Controllers/UniqueKeyController.cs
index d2929df..3193641 100644
--- a/Projects/WebApi/WebApi.Project.UniqueKeyApi/Controllers/UniqueKeyController.cs
+++ b/Projects/WebApi/WebApi.Project.UniqueKeyApi/Controllers/UniqueKeyController.cs
@@ -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
- {
- private readonly UniqueKeyService _uniqueKeyService;
+ //public class UniqueKeyController : CommonController
+ //{
+ // 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 Health()
- {
- LogXnet.WriteLine($"[{GetRequestMethod()}:{GetMethodName()}] [Client IP:{GetClientIP()}] [RequestUrl:{GetRequestUrl()}]{Environment.NewLine}", LogXLabel.CONTROLLER);
+ // [HttpGet("health")]
+ // public async Task 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 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 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 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 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 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 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 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 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);
+ // }
+ //}
}
diff --git a/Projects/WebApi/WebApi.Project.UniqueKeyApi/Models/Packet.cs b/Projects/WebApi/WebApi.Project.UniqueKeyApi/Models/Packet.cs
index fe5af80..fbbebee 100644
--- a/Projects/WebApi/WebApi.Project.UniqueKeyApi/Models/Packet.cs
+++ b/Projects/WebApi/WebApi.Project.UniqueKeyApi/Models/Packet.cs
@@ -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 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
diff --git a/Projects/WebApi/WebApi.Project.UniqueKeyApi/Program.cs b/Projects/WebApi/WebApi.Project.UniqueKeyApi/Program.cs
index 4e1b50c..28eb590 100644
--- a/Projects/WebApi/WebApi.Project.UniqueKeyApi/Program.cs
+++ b/Projects/WebApi/WebApi.Project.UniqueKeyApi/Program.cs
@@ -26,6 +26,7 @@ builder.Services.AddSingleton>();
//scoped
builder.Services.AddSingleton();
+builder.Services.AddSingleton();
//db
builder.Services.AddSingleton(); // Generic
diff --git a/Projects/WebApi/WebApi.Project.UniqueKeyApi/Services/CPMetaService.cs b/Projects/WebApi/WebApi.Project.UniqueKeyApi/Services/CPMetaService.cs
new file mode 100644
index 0000000..7ba3742
--- /dev/null
+++ b/Projects/WebApi/WebApi.Project.UniqueKeyApi/Services/CPMetaService.cs
@@ -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? _configService;
+
+ public CPMetaService(IServiceProvider serviceProvider, IServiceScopeFactory scopeFactory, ConfigService configSerice)
+ {
+ _scopeFactory = scopeFactory;
+ _configService = configSerice;
+ }
+
+ public async Task 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();
+ 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 GetWbmsMeta(Request_GetWbmsMetaByProductID request, string guid = "")
+ {
+ Response_GetWbms response = new Response_GetWbms();
+ response.Wbms = new List();
+
+ if (request != null)
+ {
+ using (var scope = _scopeFactory.CreateScope())
+ {
+ int shardId = request.ShardID;
+ if (shardId <= 0)
+ shardId = 1;
+
+ var provider = scope.ServiceProvider.GetRequiredService();
+ 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 GetWbmsMeta(Request_GetWbmsMetaByMacAddress request, string guid = "")
+ {
+ Response_GetWbms response = new Response_GetWbms();
+ response.Wbms = new List();
+
+ if (request != null)
+ {
+ using (var scope = _scopeFactory.CreateScope())
+ {
+ int shardId = request.ShardID;
+ if (shardId <= 0)
+ shardId = 1;
+
+ var provider = scope.ServiceProvider.GetRequiredService();
+ 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((int)connectionString?.DBID);
+
+ return null;
+ }
+ }
+}