Data Transfer Object (DTO) Access

Data Tranfer Object (DTO) Access

จุดประสงค์

เพื่อให้ developer สามารถเข้าถึงการเรียกข้อมูล LUT, MASTER จากเดิมที่ทำผ่าน stored procedure เป็นการเรียกโดยตรงผ่าน API และลดจำนวน request ลงด้วยการเข้าถึง LUT, MASTER หลายตัวพร้อมกันได้ใน request เดียวกัน

การติดตั้ง

เป็น optional service สามารถเลือกมาลงเพิ่มใน project ได้ผ่าน nuget package

dotnet package add AtlasX.DtoAccess.Service

หากต้องการ TypeScript definition ของ LUT, MASTER เพื่ออำนวยความสะดวก Developer ในการพัฒนา (สำหรับ development environment เท่านั้น)

dotnet package add AtlasX.DtoAccess.Schema

การเปิดใช้งาน

สำหรับ ASP.NET Minimal API (Program.cs)

using AtlasX.DtoAccess.Service;
using AtlasX.DtoAccess.Schema;

public static void Main(string[] args)
{
    var builder = WebApplication.CreateBuilder(args);

    builder.Services.AddDtoAccess();
    builder.Services.AddDtoSchema();
    
    var app = builder.Build();
    
    app.UseDtoAccess(); <em>// default ที่ /api/dto สามารถเปลี่ยน path หลัง /api/ ได้ด้วยการใส่  parameter ที่ UseDtoAccess เช่น app.UseDtoAccess("dto-access");</em>
    app.UseDtoSchema(); <em>// default ที่ /api/dto-schema สามารถเปลี่ยน path หลัง /api/ ได้ด้วยการใส่  parameter ที่ UseDtoSchema เช่น app.UseDtoSchema("dto-schema-access");</em>
}

สำหรับ ASP.NET เดิม (Startup.cs)

using AtlasX.DtoAccess.Service;
using AtlasX.DtoAccess.Schema;

public void ConfigureServices(IServiceCollection services)
{
    services.AddDtoAccess();
    services.AddDtoSchema();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseEndpoints(endpoints => { 
        endpoints.UseDtoAccess();
        endpoints.UseDtoSchema();
    });
}

คอนฟิก appsettings

{
    "WebServiceSettings": {
        "DtoAccess": {
            "DefaultDataSource": "Default",
            "MaxTablePerRequest": 10,
            "AllowTables": {
                "UM_ROLE": {
                    "DataSource": "SQLServer",
                    "AlwaysExcludeFields": ["DATE_CREATED", "DATE_MODIFIED"]
                },
                "UM_FUNCTION": {
                    "AllowConditionFields": ["FUNCTION_ID", "FUNCTION_PARENT", "ORDER_NO"]
                }
            }
        }
    }
}

DtoAccess

KeyValueDescription
DefaultDataSourceDefaultdbaccess datasource ที่ DtoAccess service เลือกใช้เป็นค่ามาตรฐานหากไม่มีการกำหนดให้ในระดับ table
MaxTablePerRequest10จำนวน table สูงสุดที่อณุญาตให้เข้าถึงต่อ 1 request
AllowTablestable ที่อณุญาตให้เข้าถึงผ่าน DtoAccess
DataSourcedbaccess datasource ที่จะให้ DtoAccess service ใช้กับ table นั้นๆ
AlwaysExcludeFieldsกำหนด field ที่ไม่ต้องการแสดงในผลลัพธ์เสมอ
AllowConditionFieldsเปิดให้สามารถกรองผลลัพธ์ด้วยเงื่อนไขตาม field ที่กำหนดไว้เท่านั้น

Form Parameters

*การระบุ field เงื่อนไขที่ Key ด้วยชื่อซ้ำกันแต่ค่าต่างกันจะเป็นการกำหนดเงื่อนไขโดยใช้ IN แทนการใช้ = **หากไม่ระบุ field ที่ Value จะแสดงทุก field ในผลลัพธ์

KeyValue
UM_ROLE
UM_FUNCTION?FUNCTION_PARENT=GIS-01&FUNCTION_PARENT=GIS-02FUNCTION_ID,FUNCTION_NAME,FUNCTION_PARENT
curl --location 'https://atlasx.cdg.co.th/axws-demo/api/dto' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'UM_ROLE=' \
--data-urlencode 'UM_FUNCTION%3FFUNCTION_PARENT%3DGIS-01%26FUNCTION_PARENT%3DGIS-02=FUNCTION_ID,FUNCTION_NAME,FUNCTION_PARENT'
{
    "success": true,
    "total": 5,
    "message": "",
    "data": [],
    "UM_ROLE": [
        {
            "ROLE_ID": 1,
            "ROLE_NAME": "Super Administrator",
            "ROLE_DETAIL": "มีสิทธิ์ใช้งานทุกฟังก์ชัน",
            "USER_CREATED": null,
            "USER_MODIFIED": 1
        },
        {
            "ROLE_ID": 3,
            "ROLE_NAME": "Geust User",
            "ROLE_DETAIL": "กลุ่มสำหรับใช้สิทธิ์ฟังก์ชันพื้นฐานสำหรับผู้ใช้งานทั่วไป เช่น ผู้ใช้งานที่ไม่ได้ล็อกอินเข้าระบบ เป็นต้น",
            "USER_CREATED": 1,
            "USER_MODIFIED": null
        }
    ],
    "UM_FUNCTION": [
        {
            "FUNCTION_ID": "GIS-02",
            "FUNCTION_NAME": "Routing",
            "FUNCTION_PARENT": "GIS-01"
        },
        {
            "FUNCTION_ID": "GIS-03",
            "FUNCTION_NAME": "Buffer",
            "FUNCTION_PARENT": "GIS-01"
        },
        {
            "FUNCTION_ID": "GIS-04",
            "FUNCTION_NAME": "Feedback",
            "FUNCTION_PARENT": "GIS-02"
        }
    ]
}

DTO Schema Service

Query Parameters

*หากต้องการจำกัด field ที่แสดงใน TypeScript definition ให้ส่ง outFields **หากต้องการทุก field ไม่ต้องส่ง outFields

KeyValue
outFieldsFUNCTION_ID,FUNCTION_NAME,FUNCTION_PARENT
curl --location 'https://atlasx.cdg.co.th/axws-demo/api/dto-schema/UM_FUNCTION?outFields=FUNCTION_ID%2CFUNCTION_NAME%2CFUNCTION_PARENT'
export interface UM_FUNCTION {
    FUNCTION_ID: string;
    FUNCTION_NAME: string;
    FUNCTION_PARENT: string;
}