Browse Source

Merge branch 'feature/snapshot' into test

qinchaoyue 3 months ago
parent
commit
fc3f235dfa

+ 37 - 0
src/Hotline.Api/Controllers/Snapshot/InviteCodeController.cs

@@ -0,0 +1,37 @@
+using Hotline.Application.Snapshot;
+using Hotline.Repository.SqlSugar.Extensions;
+using Hotline.Share.Dtos;
+using Hotline.Share.Dtos.Snapshot;
+using Hotline.Share.Tools;
+using Hotline.Snapshot;
+using Hotline.Snapshot.Interfaces;
+using Microsoft.AspNetCore.Mvc;
+using System.ComponentModel;
+
+namespace Hotline.Api.Controllers.Snapshot;
+
+/// <summary>
+/// 邀请码管理
+/// </summary>
+[Description("邀请码管理")]
+public class InviteCodeController : BaseController
+{
+    private readonly IInviteCodeApplication _inviteCodeApplication;
+
+    public InviteCodeController(IInviteCodeApplication inviteCodeApplication)
+    {
+        _inviteCodeApplication = inviteCodeApplication;
+    }
+
+    /// <summary>
+    /// 获取邀请码集合
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet]
+    public async Task<PagedDto<InviteCode>> GetInviteCodeItemsAsync([FromQuery]GetInviteCodeItemsInDto dto)
+        => (await _inviteCodeApplication.GetInviteCodeItemsAsync().ToPagedListAsync(dto)).ToPaged();
+
+    [HttpPost]
+    public async Task AddInviteCodeAsync([FromBody] AddInviteCodeInDto dto)
+        => await _inviteCodeApplication.AddInviteCodeAsync(dto);
+}

+ 43 - 0
src/Hotline.Application.Tests/Application/InviteCodeApplicationTest.cs

@@ -0,0 +1,43 @@
+using Hotline.Api.Controllers;
+using Hotline.Application.Snapshot;
+using Hotline.Identity.Accounts;
+using Hotline.Identity.Roles;
+using Hotline.Share.Dtos.Snapshot;
+using Hotline.Snapshot.Interfaces;
+using Hotline.Users;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+using Shouldly;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Tests.Application;
+public class InviteCodeApplicationTest : TestBase
+{
+    private readonly IInviteCodeApplication _inviteCodeApplication;
+
+    public InviteCodeApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, IInviteCodeApplication inviteCodeApplication) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository)
+    {
+        _inviteCodeApplication = inviteCodeApplication;
+    }
+
+    [Fact]
+    public async Task InviteCode_Test()
+    {
+        var inDto = new AddInviteCodeInDto
+        {
+            OrgName = "测试部门",
+            BeginCode = 1000,
+            EndCode = 2000,
+        };
+
+        await _inviteCodeApplication.AddInviteCodeAsync(inDto);
+
+        var items = _inviteCodeApplication.GetInviteCodeItemsAsync().ToList();
+        items.Count.ShouldNotBe(0);
+    }
+}

+ 15 - 0
src/Hotline.Application/Snapshot/IInviteCodeApplication.cs

@@ -0,0 +1,15 @@
+using Hotline.Share.Dtos.Snapshot;
+using Hotline.Snapshot;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Application.Snapshot;
+public interface IInviteCodeApplication
+{
+    Task AddInviteCodeAsync(AddInviteCodeInDto dto);
+    ISugarQueryable<InviteCode> GetInviteCodeItemsAsync();
+}

+ 38 - 0
src/Hotline.Application/Snapshot/InviteCodeApplication.cs

@@ -0,0 +1,38 @@
+using Hotline.Share.Dtos.Snapshot;
+using Hotline.Snapshot;
+using Hotline.Snapshot.Interfaces;
+using Mapster;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Dependency;
+using XF.Domain.Exceptions;
+
+namespace Hotline.Application.Snapshot;
+public class InviteCodeApplication : IInviteCodeApplication, IScopeDependency
+{
+    private readonly IInviteCodeRepository _inviteCodeRepository;
+
+    public InviteCodeApplication(IInviteCodeRepository inviteCodeRepository)
+    {
+        _inviteCodeRepository = inviteCodeRepository;
+    }
+
+    public async Task AddInviteCodeAsync(AddInviteCodeInDto dto)
+    {
+        var entity = dto.Adapt<InviteCode>();
+        if (dto.BeginCode >= dto.EndCode)
+        {
+            throw UserFriendlyException.SameMessage("开始邀请码不能大于结束邀请码");
+        }
+        await _inviteCodeRepository.AddAsync(entity);
+    }
+
+    public ISugarQueryable<InviteCode> GetInviteCodeItemsAsync()
+    {
+        return _inviteCodeRepository.Queryable();
+    }
+}

+ 18 - 0
src/Hotline.Repository.SqlSugar/Snapshot/InviteCodeRepository.cs

@@ -0,0 +1,18 @@
+using Hotline.Snapshot.Interfaces;
+using Hotline.Snapshot;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Dependency;
+using SqlSugar;
+using Hotline.Repository.SqlSugar.DataPermissions;
+
+namespace Hotline.Repository.SqlSugar.Snapshot;
+public class InviteCodeRepository : BaseRepository<InviteCode>, IInviteCodeRepository, IScopeDependency
+{
+    public InviteCodeRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
+    {
+    }
+}

+ 47 - 0
src/Hotline.Share/Dtos/Snapshot/InviteCodeDto.cs

@@ -0,0 +1,47 @@
+using Hotline.Share.Requests;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.Snapshot;
+public class InviteCodeDto
+{
+}
+
+public record GetInviteCodeItemsInDto : PagedRequest;
+
+public class AddInviteCodeInDto
+{
+    /// <summary>
+    /// 邀请码开始
+    /// 邀请码开始 -> 结束 范围内的邀请码都有效
+    /// </summary>
+    [Required]
+    public int BeginCode { get; set; }
+
+    /// <summary>
+    /// 邀请码结束
+    /// 邀请码开始 -> 结束 范围内的邀请码都有效
+    /// </summary>
+    [Required]
+    public int EndCode { get; set; }
+
+    /// <summary>
+    /// 部门名称
+    /// </summary>
+    [Required]
+    public string OrgName { get; set; }
+
+    /// <summary>
+    /// 上级部门ID
+    /// </summary>
+    public string ParentOrgId { get; set; }
+
+    /// <summary>
+    /// 邀请码Url
+    /// </summary>
+    public string QRCodeUrl { get; set; }
+}

+ 13 - 0
src/Hotline/Snapshot/Interfaces/IInviteCodeRepository.cs

@@ -0,0 +1,13 @@
+using Microsoft.EntityFrameworkCore.Metadata;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Snapshot.Interfaces;
+public interface IInviteCodeRepository : IRepository<InviteCode>
+{
+}

+ 31 - 31
src/Hotline/Snapshot/InviteCode.cs

@@ -12,38 +12,38 @@ namespace Hotline.Snapshot;
 /// <summary>
 /// 邀请码
 /// </summary>
-//[Description("邀请码")]
-//public class InviteCode : CreationSoftDeleteEntity
-//{
-//    /// <summary>
-//    /// 邀请码开始
-//    /// 邀请码开始 -> 结束 范围内的邀请码都有效
-//    /// </summary>
-//    [SugarColumn(ColumnDescription = "邀请码开始")]
-//    public string BeginCode { get; set; }
+[Description("邀请码")]
+public class InviteCode : CreationSoftDeleteEntity
+{
+    /// <summary>
+    /// 邀请码开始
+    /// 邀请码开始 -> 结束 范围内的邀请码都有效
+    /// </summary>
+    [SugarColumn(ColumnDescription = "邀请码开始")]
+    public int BeginCode { get; set; }
 
-//    /// <summary>
-//    /// 邀请码结束
-//    /// 邀请码开始 -> 结束 范围内的邀请码都有效
-//    /// </summary>
-//    [SugarColumn(ColumnDescription = "邀请码结束")]
-//    public string EndCode { get; set; }
+    /// <summary>
+    /// 邀请码结束
+    /// 邀请码开始 -> 结束 范围内的邀请码都有效
+    /// </summary>
+    [SugarColumn(ColumnDescription = "邀请码结束")]
+    public int EndCode { get; set; }
 
-//    /// <summary>
-//    /// 部门名称
-//    /// </summary>
-//    [SugarColumn(ColumnDescription = "部门名称")]
-//    public string OrgName { get; set; }
+    /// <summary>
+    /// 部门名称
+    /// </summary>
+    [SugarColumn(ColumnDescription = "部门名称")]
+    public string OrgName { get; set; }
 
-//    /// <summary>
-//    /// 上级部门ID
-//    /// </summary>
-//    [SugarColumn(ColumnDescription = "上级部门ID")]
-//    public string ParentOrgId { get; set; }
+    /// <summary>
+    /// 上级部门ID
+    /// </summary>
+    [SugarColumn(ColumnDescription = "上级部门ID")]
+    public string ParentOrgId { get; set; }
 
-//    /// <summary>
-//    /// 邀请码Url
-//    /// </summary>
-//    [SugarColumn(ColumnDescription = "邀请码Url")]
-//    public string QRCodeUrl { get; set; }
-//}
+    /// <summary>
+    /// 邀请码Url
+    /// </summary>
+    [SugarColumn(ColumnDescription = "邀请码Url")]
+    public string QRCodeUrl { get; set; }
+}