浏览代码

删除关系

qinchaoyue 5 天之前
父节点
当前提交
1e320ad4f7

+ 13 - 0
src/Hotline.Application/Snapshot/Contracts/ISnapshotUserApplication.cs

@@ -7,5 +7,18 @@ public interface ISnapshotUserApplication
 {
     ISugarQueryable<CitizenRelationSafetyTypeOutDto> GetCitizenRelationSafetyType(CitizenRelationSafetyTypeInDto dto);
 
+    /// <summary>
+    /// 添加安全员类型和市民关系
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <param name="token"></param>
+    /// <returns></returns>
     Task AddCitizenRelationSafetyType(AddCitizenRelationSafetyTypeInDto dto, CancellationToken token);
+
+    /// <summary>
+    /// 删除关系
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    Task DeleteCitizenRelationSafetyAsync(DeleteCitizenRelationSafetyTypeInDto dto);
 }

+ 13 - 1
src/Hotline.Application/Snapshot/SnapshotUserApplication.cs

@@ -49,7 +49,9 @@ public class SnapshotUserApplication : ISnapshotUserApplication, IScopeDependenc
             safeType.Citizens.Add(new Citizen { Id = item });
         }
 
-        _safetyTypeRepository.AddNav(safeType);
+        await _safetyTypeRepository.AddNav(safeType)
+            .Include(m => m.Citizens)
+            .ExecuteCommandAsync();
     }
 
     public ISugarQueryable<CitizenRelationSafetyTypeOutDto> GetCitizenRelationSafetyType(CitizenRelationSafetyTypeInDto dto)
@@ -68,4 +70,14 @@ public class SnapshotUserApplication : ISnapshotUserApplication, IScopeDependenc
             });
         return query;
     }
+
+    public async Task DeleteCitizenRelationSafetyAsync(DeleteCitizenRelationSafetyTypeInDto dto)
+    {
+        foreach (var item in dto.Items)
+        {
+            await _citizenRepository.RemoveNav(m => m.Id == item.CitizenId)
+                .Include(m => m.SafetyTypes.Where(s => s.Id == item.SafetyTypeId).First())
+                .ExecuteCommandAsync();
+        }
+    }
 }

+ 22 - 0
src/Hotline.Share/Dtos/Snapshot/SnapshotUserInfoDto.cs

@@ -102,3 +102,25 @@ public class AddCitizenRelationSafetyTypeInDto
     public IList<string> CitizenIds { get; set; }
 }
 
+
+public class DeleteCitizenRelationSafetyTypeInDto
+{
+    /// <summary>
+    /// 市民和志愿者类型集合
+    /// </summary>
+    public IList<CitizenIdRelationSafetyTypeId> Items { get; set; }
+}
+
+public class CitizenIdRelationSafetyTypeId
+{
+    /// <summary>
+    /// 市民Id
+    /// </summary>
+    [Required]
+    public string CitizenId { get; set; }
+
+    /// <summary>
+    /// 志愿者类型Id
+    /// </summary>
+    public string SafetyTypeId { get; set; }
+}

+ 40 - 1
test/Hotline.Tests/Application/SnapshotUserApplicationTest.cs

@@ -46,7 +46,7 @@ public class SnapshotUserApplicationTest : TestBase
 
         var citizen = await _citizenRepository.Queryable()
             .LeftJoin<CitizenRelationSafetyType>((citizen, relation) => relation.CitizenId == citizen.Id)
-            .Where((citizen, relation) => relation.Id == null)
+            .Where((citizen, relation) => relation.CitizenId == null)
             .FirstAsync();
         var addDto = new AddCitizenRelationSafetyTypeInDto
         {
@@ -67,5 +67,44 @@ public class SnapshotUserApplicationTest : TestBase
         item.SafetyTypeId.ShouldBe(safetyType.Id);
         item.CitizenId.ShouldBe(citizen.Id);
         item.CitizenName.ShouldBe(citizen.Name);
+
+        var newSafetyTypeXuanChuan = new SafetyType { Name = "宣传员" };
+        var safetyTypeXuanChuan = await _safetyTypeRepository.Queryable()
+            .Where(m => m.Name == newSafetyTypeXuanChuan.Name).FirstAsync();
+        safetyTypeXuanChuan ??= new SafetyType
+            {
+                Id = await _safetyTypeRepository.AddAsync(newSafetyTypeXuanChuan)
+            };
+        addDto = new AddCitizenRelationSafetyTypeInDto
+        {
+            CitizenIds = [citizen.Id],
+            SafetyTypeId = safetyTypeXuanChuan.Id,
+        };
+        await _snapshotUserApplication.AddCitizenRelationSafetyType(addDto, CancellationToken.None);
+        var deleteInDto = new DeleteCitizenRelationSafetyTypeInDto
+        {
+            Items =
+            [
+                new() {
+                    CitizenId = citizen.Id,
+                    SafetyTypeId = safetyTypeXuanChuan.Id
+                }
+            ]
+        };
+        await _snapshotUserApplication.DeleteCitizenRelationSafetyAsync(deleteInDto);
+
+        items = await _snapshotUserApplication.GetCitizenRelationSafetyType(inDto).ToListAsync();
+        item = items.FirstOrDefault(m => m.CitizenId == citizen.Id && m.SafetyTypeId == safetyType.Id);
+        item.ShouldBeNull();
+        inDto = new CitizenRelationSafetyTypeInDto
+        {
+            SafetyTypeId = safetyTypeXuanChuan.Id
+        };
+        items = await _snapshotUserApplication.GetCitizenRelationSafetyType(inDto).ToListAsync();
+        item = items.FirstOrDefault(m => m.CitizenId == citizen.Id && m.SafetyTypeId == safetyTypeXuanChuan.Id);
+        item.SafetyTypeName.ShouldBe(safetyTypeXuanChuan.Name);
+        item.SafetyTypeId.ShouldBe(safetyTypeXuanChuan.Id);
+        item.CitizenId.ShouldBe(citizen.Id);
+        item.CitizenName.ShouldBe(citizen.Name);
     }
 }