|
|
@@ -41,6 +41,15 @@ public class AdoS0QmsQualityBaseTypesController : ControllerBase
|
|
|
[HttpPost]
|
|
|
public async Task<IActionResult> CreateAsync([FromBody] AdoS0QmsQualityBaseTypeUpsertDto dto)
|
|
|
{
|
|
|
+ // C4 唯一性 pre-check:(TypeCategory, TypeCode) 全局唯一
|
|
|
+ var category = dto.TypeCategory.Trim();
|
|
|
+ var code = dto.TypeCode.Trim();
|
|
|
+ if (await _rep.AsQueryable().AnyAsync(x => x.TypeCategory == category && x.TypeCode == code))
|
|
|
+ {
|
|
|
+ return AdoS0ApiErrors.Conflict(AdoS0ErrorCodes.QualityBaseTypeDuplicate,
|
|
|
+ $"质量基础类型 '{category} / {code}' 已存在");
|
|
|
+ }
|
|
|
+
|
|
|
var entity = new AdoS0QmsQualityBaseType();
|
|
|
ApplyQualityBaseType(entity, dto, true);
|
|
|
await _rep.AsInsertable(entity).ExecuteReturnEntityAsync();
|
|
|
@@ -52,6 +61,16 @@ public class AdoS0QmsQualityBaseTypesController : ControllerBase
|
|
|
{
|
|
|
var entity = await _rep.GetByIdAsync(id);
|
|
|
if (entity == null) return NotFound();
|
|
|
+
|
|
|
+ // C4 唯一性 pre-check:(TypeCategory, TypeCode) 全局唯一,排除自身
|
|
|
+ var category = dto.TypeCategory.Trim();
|
|
|
+ var code = dto.TypeCode.Trim();
|
|
|
+ if (await _rep.AsQueryable().AnyAsync(x => x.TypeCategory == category && x.TypeCode == code && x.Id != id))
|
|
|
+ {
|
|
|
+ return AdoS0ApiErrors.Conflict(AdoS0ErrorCodes.QualityBaseTypeDuplicate,
|
|
|
+ $"质量基础类型 '{category} / {code}' 已存在");
|
|
|
+ }
|
|
|
+
|
|
|
ApplyQualityBaseType(entity, dto, false);
|
|
|
await _rep.AsUpdateable(entity).ExecuteCommandAsync();
|
|
|
return Ok(entity);
|