diff --git a/API/ROLAC.API.Tests/Services/MinistryServiceTests.cs b/API/ROLAC.API.Tests/Services/MinistryServiceTests.cs index bb5ef1e..34610eb 100644 --- a/API/ROLAC.API.Tests/Services/MinistryServiceTests.cs +++ b/API/ROLAC.API.Tests/Services/MinistryServiceTests.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Http; using Moq; using ROLAC.API.Data; using ROLAC.API.Data.Interceptors; +using ROLAC.API.DTOs.Ministry; using ROLAC.API.Entities; using ROLAC.API.Services; using Xunit; @@ -41,4 +42,19 @@ public class MinistryServiceTests Assert.Equal("A", active[0].Name_en); Assert.Equal(3, all.Count); } + + [Fact] + public async Task Create_DefaultsFunctionalClassToProgram_AndUpdateChangesIt() + { + using var db = BuildDb(); + var svc = new MinistryService(db); + var id = await svc.CreateAsync(new CreateMinistryRequest { Name_en = "Worship" }); + + var afterCreate = (await svc.GetAllAsync(true)).Single(m => m.Id == id); + Assert.Equal("Program", afterCreate.DefaultFunctionalClass); + + await svc.UpdateAsync(id, new UpdateMinistryRequest { Name_en = "Worship", DefaultFunctionalClass = "ManagementGeneral" }); + var afterUpdate = (await svc.GetAllAsync(true)).Single(m => m.Id == id); + Assert.Equal("ManagementGeneral", afterUpdate.DefaultFunctionalClass); + } } diff --git a/API/ROLAC.API/DTOs/Ministry/CreateMinistryRequest.cs b/API/ROLAC.API/DTOs/Ministry/CreateMinistryRequest.cs index dabcde5..22cc296 100644 --- a/API/ROLAC.API/DTOs/Ministry/CreateMinistryRequest.cs +++ b/API/ROLAC.API/DTOs/Ministry/CreateMinistryRequest.cs @@ -8,4 +8,5 @@ public class CreateMinistryRequest [MaxLength(500)] public string? Description_en { get; set; } [MaxLength(500)] public string? Description_zh { get; set; } public int SortOrder { get; set; } + [MaxLength(20)] public string? DefaultFunctionalClass { get; set; } } diff --git a/API/ROLAC.API/DTOs/Ministry/MinistryDto.cs b/API/ROLAC.API/DTOs/Ministry/MinistryDto.cs index 752ab2f..804b1cc 100644 --- a/API/ROLAC.API/DTOs/Ministry/MinistryDto.cs +++ b/API/ROLAC.API/DTOs/Ministry/MinistryDto.cs @@ -9,4 +9,5 @@ public class MinistryDto public string? Description_zh { get; set; } public int SortOrder { get; set; } public bool IsActive { get; set; } + public string DefaultFunctionalClass { get; set; } = "Program"; } diff --git a/API/ROLAC.API/DTOs/Ministry/UpdateMinistryRequest.cs b/API/ROLAC.API/DTOs/Ministry/UpdateMinistryRequest.cs index 8861583..ada01f8 100644 --- a/API/ROLAC.API/DTOs/Ministry/UpdateMinistryRequest.cs +++ b/API/ROLAC.API/DTOs/Ministry/UpdateMinistryRequest.cs @@ -9,4 +9,5 @@ public class UpdateMinistryRequest [MaxLength(500)] public string? Description_zh { get; set; } public bool IsActive { get; set; } = true; public int SortOrder { get; set; } + [MaxLength(20)] public string? DefaultFunctionalClass { get; set; } } diff --git a/API/ROLAC.API/Data/AppDbContext.cs b/API/ROLAC.API/Data/AppDbContext.cs index 458dcd9..ffec6ab 100644 --- a/API/ROLAC.API/Data/AppDbContext.cs +++ b/API/ROLAC.API/Data/AppDbContext.cs @@ -201,6 +201,7 @@ public class AppDbContext : IdentityDbContext { entity.Property(e => e.Name_en).HasMaxLength(200).IsRequired(); entity.Property(e => e.Name_zh).HasMaxLength(200); + entity.Property(e => e.DefaultFunctionalClass).HasMaxLength(20).HasDefaultValue("Program"); }); // ── Form990ExpenseLine (Part IX natural-expense line catalog) ───────── diff --git a/API/ROLAC.API/Entities/Ministry.cs b/API/ROLAC.API/Entities/Ministry.cs index f63a9da..5917217 100644 --- a/API/ROLAC.API/Entities/Ministry.cs +++ b/API/ROLAC.API/Entities/Ministry.cs @@ -11,4 +11,5 @@ public class Ministry : IAuditable public string? Description_zh { get; set; } public int SortOrder { get; set; } public bool IsActive { get; set; } = true; + public string DefaultFunctionalClass { get; set; } = "Program"; } diff --git a/API/ROLAC.API/Services/MinistryService.cs b/API/ROLAC.API/Services/MinistryService.cs index 77c535c..7d79d7c 100644 --- a/API/ROLAC.API/Services/MinistryService.cs +++ b/API/ROLAC.API/Services/MinistryService.cs @@ -21,6 +21,7 @@ public class MinistryService : IMinistryService Id = m.Id, Name_en = m.Name_en, Name_zh = m.Name_zh, Description_en = m.Description_en, Description_zh = m.Description_zh, SortOrder = m.SortOrder, IsActive = m.IsActive, + DefaultFunctionalClass = m.DefaultFunctionalClass, }) .ToListAsync(); } @@ -32,6 +33,7 @@ public class MinistryService : IMinistryService Name_en = r.Name_en, Name_zh = r.Name_zh, Description_en = r.Description_en, Description_zh = r.Description_zh, SortOrder = r.SortOrder, IsActive = true, + DefaultFunctionalClass = ROLAC.API.Entities.FunctionalClasses.Normalize(r.DefaultFunctionalClass), }; _db.Ministries.Add(entity); await _db.SaveChangesAsync(); @@ -45,6 +47,7 @@ public class MinistryService : IMinistryService m.Name_en = r.Name_en; m.Name_zh = r.Name_zh; m.Description_en = r.Description_en; m.Description_zh = r.Description_zh; m.IsActive = r.IsActive; m.SortOrder = r.SortOrder; + m.DefaultFunctionalClass = ROLAC.API.Entities.FunctionalClasses.Normalize(r.DefaultFunctionalClass); await _db.SaveChangesAsync(); }