Breaking changes

ยกเลิกกลุ่ม Endpoint /api/app* (เช่น /api/appdata, /api/appfile)

AtlasX 8 จะยกเลิกกลุ่มทางเข้า /api/app*** ทั้งหมด เพื่อแก้ปัญหาสิทธิ์การเข้าถึงที่หละหลวม โดยเปลี่ยนไปใช้ระบบ เช็คสิทธิ์แบบรวมศูนย์ที่หน้าบ้าน (API Gateway) แทน การปรับนี้เป็นการยกระดับความปลอดภัยตามมาตรฐาน OWASP 2025 เพื่อป้องกันการลักลอบเข้าถึงข้อมูล (A01) และวางรากฐานการออกแบบที่ปลอดภัยตั้งแต่เริ่ม (A06) ช่วยให้ระบบในอนาคตปลอดภัยและตรวจสอบได้แม่นยำขึ้น

จากเดิมที่เราาเขียน /appdata endpoint เดียวรองรับการเรียกจากหน้าบ้าน จะถูกเปลี่ยนเป็นการเขียน endpoint แยกตาม business ของข้อมูลหรือฟังก์ชันนั้นแทน เช่น

    public static RouteGroupBuilder MapUserEndpoints(this RouteGroupBuilder group)
    {
        RouteGroupBuilder builder = group.MapGroup("/users");
        builder.MapGet("/{userId}", GetUser);
        builder.MapGet("/exists", UserExists);
        builder.MapGet("/search", SearchUser);
        builder.MapPost("/", CreateUser);
        builder.MapPut("/{userId}", UpdateUser);
        builder.MapPut("/password", UpdatePassword);
        builder.MapPut("/{userId}/password", UpdateUserPassword);
        builder.MapDelete("/", DeleteUser);
        return group;
    }

    private static async Task<IResult> CreateUser(
        CreateUserDto createUserDto,
        [FromServices] AppDataAccess appDataAccess,
        [FromServices] ILogger logger,
        CancellationToken cancellationToken = default)
    {
        // TO DO: Implement create user endpoint.
        // ...

        return Results.Ok(new
        {
            Success = true
        });
    }

ยกเลิกการรับค่าผ่าน QueryParameter → บังคับใช้ DTO ใน Endpoint

ยกเลิกการใช้ Class กลางตัวเดียวที่รับทุกอย่าง (Query/Form/Body) แบบเหมาเข่ง บังคับสร้าง DTO (Data Transfer Object) แยกตาม Request ของแต่ละ Action โดยเฉพาะ เพื่อป้องกัน Client แอบส่ง Field ที่ไม่ได้ขอ (เช่น IsAdmin, Role) เข้ามา Inject ในระบบ และช่วยให้ Swagger แสดง Schema ที่แม่นยำ 100% ไม่ต้องเดาว่าตัวไหน Required/Optional และยังสามารถใช้ Data Annotations ([Required], [StringLength]) บน DTO ได้โดยตรง ลด Logic การเช็คค่าใน Controller

ตัวอย่าง DTO

public record CreateUserManualDto
{
    [Required]
    public required IFormFile File { get; set; }

    [JsonPropertyName("fileName")]
    public string FileName { get; init; } = string.Empty;
    
    #region สิทธิ์การเข้าถึงไฟล์
    [JsonPropertyName("adminPermission")]
    public bool AdminPermission { get; init; } = false;
    [JsonPropertyName("memberPermission")]
    public bool MemberPermission { get; init; } = false;
    [JsonPropertyName("publicPermission")]
    public bool PublicPermission { get; init; } = false;
    #endregion
}

ตัวอย่างตอนใช้งาน

private static async Task<IResult> AddUserManualAsync(
    [FromForm] CreateUserManualDto userManualDto,
    UserManualService userManualService,
    HistoryService historyService,
    HttpContext httpContext,
    CancellationToken cancellationToken
)
{
    // ...
}

ยกเลิกการอัปโหลดไฟล์ผ่าน QueryParameter → ใช้ IFormFile

ยกเลิกการใช้ QueryParameter class ในการรับไฟล์ (File Upload) และข้อมูลผสม (Mixed Content) ทุกกรณี โดยบังคับให้ประกาศ DTO Class ที่ระบุ Properties ชัดเจน และใช้ IFormFile สำหรับการจัดการไฟล์โดยเฉพาะ

❌ แบบเดิม (Deprecated):

[HttpPost("check-shapefile")]
public IActionResult CheckShapeFile()
{

    var queryParameter = new QueryParameter(Request);
    byte[] uploadedFileContent = queryParameter.FileParameters[0].FileContent;
    
    ...

}

✅ แบบใหม่ (v8 Standard):

public class UserProfileUploadDto 
{
    [Required]
    public IFormFile Avatar { get; set; } // ระบุชัดเจนว่าเป็นไฟล์
    
    [StringLength(100)]
    public string DisplayName { get; set; }
}

[HttpPost("profile-picture")]
public IActionResult UpdateProfile([FromForm] UserProfileUploadDto dto) 
{
    // ใช้งาน dto.Avatar ได้ทันที พร้อมระบบ Validation อัตโนมัติ
    // ...
}

แนวทางการอัปเกรด AtlasX 7 สู่ .NET 10 และการรักษาความเข้ากันได้

สำหรับโครงการที่พัฒนาด้วย AtlasX 7 (.NET 8) และต้องการอัปเกรด Runtime เป็น .NET 10 โดยที่ยังจำเป็นต้องใช้งาน QueryParameter และโครงสร้างเดิมอยู่ เพื่อหลีกเลี่ยงการ Refactor โค้ดจำนวนมาก (Breaking Changes) สามารถดำเนินการตามขั้นตอน Maintenance Track ดังนี้

1. Update Target Framework: ปรับแก้ไฟล์โปรเจกต์ (.csproj) หรือ Directory.Build.props โดยเปลี่ยน Target Framework เป็น

<TargetFramework>net10.0</TargetFramework>

2. Update AtlasX Engine: อัปเดต Library หลักผ่าน NuGet Package Manager เป็นเวอร์ชันรองรับ Runtime ใหม่

<PackageReference Include="AtlasX.Engine" Version="3.1.0" />