ABP 接口开发步骤

ABP 接口开发步骤

一.数据库生成

1. 创建实体

在MyCompanyName.AbpZeroTemplate 下创建实体。

 [Table("TelphoneBook")]
    public class TelphoneBook : Entity<string>, IHasCreationTime, IMayHaveTenant, IHasDeletionTime, IHasModificationTime
    {
        /// <summary>
        /// 电话号码
        /// </summary>
        [Required]
        [StringLength(11)]
        public string PhoneNumber { get; set; }
        /// <summary>
        /// 姓
        /// </summary>
        [Required]
        [StringLength(50)]
        public string FirstName { get; set; }
        /// <summary>
        /// 名
        /// </summary>
        [Required]
        [StringLength(50)]
        public string LastName { get; set; }
      
        public DateTime CreationTime { get; set; }
        public int? TenantId { get; set; }
        public DateTime? DeletionTime { get; set; }
        public bool IsDeleted { get; set; }
        public DateTime? LastModificationTime { get; set; }

    }

2. 生成数据库表

MyCompanyName.AbpZeroTemplate.EntityFrameworkCore下添加,在重写的 OnModelCreating(ModelBuilder modelBuilder)方法中可以设置表的索引等

  public virtual DbSet<TelphoneBook> TelphoneBooks { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  	base.OnModelCreating(modelBuilder);
   	modelBuilder.Entity<TelphoneBook>(b => {
   		b.HasIndex(e => new { e.TenantId, e.PhoneNumber });
         });
    modelBuilder.ConfigurePersistedGrantEntity();
 }

上面步骤完成后,在控制台执行 Add-Migration MyCompanyName.AbpZeroTemplate.Telbook.TelphoneBook 执行成功后,接着执行更新操作 Update-Database

接口部分

MyCompanyName.AbpZeroTemplate.Application.Shared 添加以下内容

namespace MyCompanyName.AbpZeroTemplate.Telbook.Dto
{
    public class TelphoneBookDto : EntityDto<string>, IHasCreationTime, IMayHaveTenant, IHasDeletionTime, IHasModificationTime
    {
        /// <summary>
        /// 电话号码
        /// </summary>
        public string PhoneNumber { get; set; }
        /// <summary>
        /// 姓
        /// </summary>
        public string FirstName { get; set; }
        /// <summary>
        /// 名
        /// </summary>
    
        public string LastName { get; set; }

        public DateTime CreationTime { get; set; }
        public int? TenantId { get; set; }
        public DateTime? DeletionTime { get; set; }
        public bool IsDeleted { get; set; }
        public DateTime? LastModificationTime { get; set; }
    }
}
namespace MyCompanyName.AbpZeroTemplate.Telbook
{
    public interface ITelBookAppService: IApplicationService
    {
        PagedResultDto<TelphoneBookDto> GetTelBooks(GetTelBooksInput input);
        Task CreateOrUpdateTelBook(CreateOrUpdateTelbookInput input);
        Task DeleteTelBook(string id);
    }
}
namespace MyCompanyName.AbpZeroTemplate.Telbook.Dto
{
    /// <summary>
    /// 查询用
    /// </summary>
    public class GetTelBooksInput : PagedAndSortedInputDto
    {
        public string PhoneNumber { get; set; }
    }
}

MyCompanyName.AbpZeroTemplate 下实现ITelBookAppService 接口

 [AbpAuthorize(AppPermissions.Pages_Telbooks)]
    public class TelBookAppService : AbpZeroTemplateAppServiceBase, ITelBookAppService
    {
        private readonly IRepository<TelphoneBook, string> _telbookRepository;
        public TelBookAppService(IRepository<TelphoneBook, string> telbookRepository)
        {
            _telbookRepository = telbookRepository;
        }
        [HttpPost]
        public async Task CreateOrUpdateTelBook(CreateOrUpdateTelbookInput input)
        {
            if (string.IsNullOrEmpty(input.Id))
            {
                await UpdateTelbookAsync(input);
            }
            else
            {
                await CreateTelbookAsync(input);
            }
        }
        [HttpPost]
        public async Task UpdateTelbookAsync(CreateOrUpdateTelbookInput input)
        {
            Debug.Assert(input.Id != null, "input.Id != null");
            await CheckTelbookIfAlreadyExists(input.PhoneNumber);
            var info = await _telbookRepository.GetAsync(input.Id);
            info.PhoneNumber = input.PhoneNumber;
            info.FirstName = input.FirstName;
            info.LastName = input.LastName;
            info.IsDeleted = false;
            info.LastModificationTime = DateTime.UtcNow;
            await _telbookRepository.UpdateAsync(info);
        }
        [HttpPost]
        public async Task CreateTelbookAsync(CreateOrUpdateTelbookInput input)
        {
            await CheckTelbookIfAlreadyExists(input.PhoneNumber);

            await _telbookRepository.InsertAsync(
                new TelphoneBook()
                {
                    Id = input.Id,
                    FirstName = input.FirstName,
                    LastName = input.LastName,
                    PhoneNumber = input.PhoneNumber,
                    IsDeleted = false,
                    TenantId = AbpSession.TenantId,
                    CreationTime = DateTime.UtcNow,
                }
            );
        }

        [HttpPost]
        public async Task DeleteTelBook(string id)
        {
            var info = await _telbookRepository.GetAsync(id);
            await _telbookRepository.DeleteAsync(info);
        }

        [HttpPost]
        public PagedResultDto<TelphoneBookDto> GetTelBooks(GetTelBooksInput input)
        {
            var query = _telbookRepository.GetAll();
            var Count = query.Count();

            if (!input.Sorting.IsNullOrEmpty())
            {
                query = query.OrderBy(input.Sorting);
            }
            //Paging
            if (input.SkipCount > 0)
            {
                query = query.Skip(input.SkipCount);
            }
            if (input.MaxResultCount > 0)
            {
                query = query.Take(input.MaxResultCount);
            }
            var ListDtos = ObjectMapper.Map<List<TelphoneBookDto>>(query.ToList());
            return new PagedResultDto<TelphoneBookDto>(
                Count,
                ListDtos
            ); 
        }
        private async Task CheckTelbookIfAlreadyExists(string phonenumber)
        {
            var obj = (await _telbookRepository.GetAllListAsync())
             .FirstOrDefault(l => l.PhoneNumber == phonenumber);
            if (obj == null)
            {
                return;
            }
            throw new UserFriendlyException(L("ThisTelNumberAlreadyExists"));
        }
    }

最后一步,在 MyCompanyName.AbpZeroTemplate.CreateMappings添加实体映射(这里真的很重要)。

 			//TelBook
            configuration.CreateMap<TelphoneBook, TelphoneBookDto>();

最后运行MyCompanyName.AbpZeroTemplate.Web.Host 访问*https://localhost:44301/swagger/index.html*
可以对接口进行测试啦
备注: 由于使用的数据库为PostGreSql, 里面涉及到的时间为 UTC格式, 所以这个一定要处理, 要不然无法正常访问。可以在启动程序中设置全局时间格式。

 //设置UTC时间格式
            Clock.Provider = ClockProviders.Utc;

刚开始写博客, 若有不足之处, 还请各位见谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值