feat: 完成排行榜功能
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
using Yi.Framework.AiHub.Domain.Shared.Enums;
|
||||
|
||||
namespace Yi.Framework.AiHub.Application.Contracts.Dtos;
|
||||
|
||||
/// <summary>
|
||||
/// 排行榜查询输入
|
||||
/// </summary>
|
||||
public class RankingGetListInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 排行榜类型:0-模型,1-工具,不传返回全部
|
||||
/// </summary>
|
||||
public RankingTypeEnum? Type { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using Yi.Framework.AiHub.Domain.Shared.Enums;
|
||||
|
||||
namespace Yi.Framework.AiHub.Application.Contracts.Dtos;
|
||||
|
||||
/// <summary>
|
||||
/// 排行榜项DTO
|
||||
/// </summary>
|
||||
public class RankingItemDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 描述
|
||||
/// </summary>
|
||||
public string Description { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Logo地址
|
||||
/// </summary>
|
||||
public string? LogoUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 得分
|
||||
/// </summary>
|
||||
public decimal Score { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 提供者
|
||||
/// </summary>
|
||||
public string Provider { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 排行榜类型
|
||||
/// </summary>
|
||||
public RankingTypeEnum Type { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using Yi.Framework.AiHub.Application.Contracts.Dtos;
|
||||
|
||||
namespace Yi.Framework.AiHub.Application.Contracts.IServices;
|
||||
|
||||
/// <summary>
|
||||
/// 排行榜服务接口
|
||||
/// </summary>
|
||||
public interface IRankingService
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取排行榜列表(全量返回)
|
||||
/// </summary>
|
||||
/// <param name="input">查询条件</param>
|
||||
/// <returns>排行榜列表</returns>
|
||||
Task<List<RankingItemDto>> GetListAsync(RankingGetListInput input);
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using Mapster;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Volo.Abp.Application.Services;
|
||||
using Yi.Framework.AiHub.Application.Contracts.Dtos;
|
||||
using Yi.Framework.AiHub.Application.Contracts.IServices;
|
||||
using Yi.Framework.AiHub.Domain.Entities;
|
||||
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||
|
||||
namespace Yi.Framework.AiHub.Application.Services;
|
||||
|
||||
/// <summary>
|
||||
/// 排行榜服务
|
||||
/// </summary>
|
||||
public class RankingService : ApplicationService, IRankingService
|
||||
{
|
||||
private readonly ISqlSugarRepository<RankingItemAggregateRoot, Guid> _repository;
|
||||
|
||||
public RankingService(ISqlSugarRepository<RankingItemAggregateRoot, Guid> repository)
|
||||
{
|
||||
_repository = repository;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取排行榜列表(全量返回,按得分降序)
|
||||
/// </summary>
|
||||
[HttpGet("ranking/list")]
|
||||
[AllowAnonymous]
|
||||
public async Task<List<RankingItemDto>> GetListAsync([FromQuery] RankingGetListInput input)
|
||||
{
|
||||
var query = _repository._DbQueryable
|
||||
.WhereIF(input.Type.HasValue, x => x.Type == input.Type!.Value)
|
||||
.OrderByDescending(x => x.Score);
|
||||
|
||||
var entities = await query.ToListAsync();
|
||||
return entities.Adapt<List<RankingItemDto>>();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
namespace Yi.Framework.AiHub.Domain.Shared.Enums;
|
||||
|
||||
/// <summary>
|
||||
/// 排行榜类型枚举
|
||||
/// </summary>
|
||||
public enum RankingTypeEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// 模型
|
||||
/// </summary>
|
||||
Model = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 工具
|
||||
/// </summary>
|
||||
Tool = 1
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp.Domain.Entities.Auditing;
|
||||
using Yi.Framework.AiHub.Domain.Shared.Enums;
|
||||
|
||||
namespace Yi.Framework.AiHub.Domain.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 排行榜项聚合根
|
||||
/// </summary>
|
||||
[SugarTable("Ai_RankingItem")]
|
||||
public class RankingItemAggregateRoot : FullAuditedAggregateRoot<Guid>
|
||||
{
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述
|
||||
/// </summary>
|
||||
public string? Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Logo地址
|
||||
/// </summary>
|
||||
public string? LogoUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 得分
|
||||
/// </summary>
|
||||
public decimal Score { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 提供者
|
||||
/// </summary>
|
||||
public string? Provider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排行榜类型:0-模型,1-工具
|
||||
/// </summary>
|
||||
public RankingTypeEnum Type { get; set; }
|
||||
}
|
||||
@@ -361,7 +361,7 @@ namespace Yi.Abp.Web
|
||||
var app = context.GetApplicationBuilder();
|
||||
app.UseRouting();
|
||||
|
||||
//app.ApplicationServices.GetRequiredService<ISqlSugarDbContext>().SqlSugarClient.CodeFirst.InitTables<SessionAggregateRoot>();
|
||||
// app.ApplicationServices.GetRequiredService<ISqlSugarDbContext>().SqlSugarClient.CodeFirst.InitTables<RankingItemAggregateRoot>();
|
||||
// app.ApplicationServices.GetRequiredService<ISqlSugarDbContext>().SqlSugarClient.CodeFirst.InitTables<ActivationCodeRecordAggregateRoot>();
|
||||
// app.ApplicationServices.GetRequiredService<ISqlSugarDbContext>().SqlSugarClient.CodeFirst.InitTables<UsageStatisticsAggregateRoot>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user