feat: 添加sample示例
@@ -72,7 +72,21 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "audit-logging", "audit-logg
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.AuditLogging.SqlSugarCore", "module\audit-logging\Yi.AuditLogging.SqlSugarCore\Yi.AuditLogging.SqlSugarCore.csproj", "{48806510-8E18-4E1E-9BAF-5B97E88C5FC3}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.AuditLogging.SqlSugarCore", "module\audit-logging\Yi.AuditLogging.SqlSugarCore\Yi.AuditLogging.SqlSugarCore.csproj", "{48806510-8E18-4E1E-9BAF-5B97E88C5FC3}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Framework.AspNetCore.Authentication.OAuth", "framework\Yi.Framework.AspNetCore.Authentication.OAuth\Yi.Framework.AspNetCore.Authentication.OAuth.csproj", "{791AC2FA-50D3-4408-8D68-31DA72F608BE}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Framework.AspNetCore.Authentication.OAuth", "framework\Yi.Framework.AspNetCore.Authentication.OAuth\Yi.Framework.AspNetCore.Authentication.OAuth.csproj", "{791AC2FA-50D3-4408-8D68-31DA72F608BE}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sample", "sample", "{01300F0F-686E-47B3-821D-12424177867B}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Web", "sample\Acme.BookStore.Web\Acme.BookStore.Web.csproj", "{576DBC97-4E5D-4444-B65C-F41649A5F8E0}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Domain.Shared", "sample\Acme.BookStore.Domain.Shared\Acme.BookStore.Domain.Shared.csproj", "{D7F8BD42-F6A2-4F0A-9212-391B5185A99D}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Domain", "sample\Acme.BookStore.Domain\Acme.BookStore.Domain.csproj", "{B615847F-8568-41D1-8B7E-63D61AE69F3D}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Application.Contracts", "sample\Acme.BookStore.Application.Contracts\Acme.BookStore.Application.Contracts.csproj", "{20827DB5-5CDE-491A-82E8-3CAB82618C1E}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Application", "sample\Acme.BookStore.Application\Acme.BookStore.Application.csproj", "{320273B6-7AE3-42DA-9675-D9AD4928A289}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.SqlSugarCore", "sample\Acme.BookStore.SqlSugarCore\Acme.BookStore.SqlSugarCore.csproj", "{70CCBD89-C0A1-4AC8-9AFA-C86C356DFDD7}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@@ -180,6 +194,30 @@ Global
|
|||||||
{791AC2FA-50D3-4408-8D68-31DA72F608BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{791AC2FA-50D3-4408-8D68-31DA72F608BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{791AC2FA-50D3-4408-8D68-31DA72F608BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{791AC2FA-50D3-4408-8D68-31DA72F608BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{791AC2FA-50D3-4408-8D68-31DA72F608BE}.Release|Any CPU.Build.0 = Release|Any CPU
|
{791AC2FA-50D3-4408-8D68-31DA72F608BE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{576DBC97-4E5D-4444-B65C-F41649A5F8E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{576DBC97-4E5D-4444-B65C-F41649A5F8E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{576DBC97-4E5D-4444-B65C-F41649A5F8E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{576DBC97-4E5D-4444-B65C-F41649A5F8E0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{D7F8BD42-F6A2-4F0A-9212-391B5185A99D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D7F8BD42-F6A2-4F0A-9212-391B5185A99D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D7F8BD42-F6A2-4F0A-9212-391B5185A99D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D7F8BD42-F6A2-4F0A-9212-391B5185A99D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{B615847F-8568-41D1-8B7E-63D61AE69F3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{B615847F-8568-41D1-8B7E-63D61AE69F3D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{B615847F-8568-41D1-8B7E-63D61AE69F3D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{B615847F-8568-41D1-8B7E-63D61AE69F3D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{20827DB5-5CDE-491A-82E8-3CAB82618C1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{20827DB5-5CDE-491A-82E8-3CAB82618C1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{20827DB5-5CDE-491A-82E8-3CAB82618C1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{20827DB5-5CDE-491A-82E8-3CAB82618C1E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{320273B6-7AE3-42DA-9675-D9AD4928A289}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{320273B6-7AE3-42DA-9675-D9AD4928A289}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{320273B6-7AE3-42DA-9675-D9AD4928A289}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{320273B6-7AE3-42DA-9675-D9AD4928A289}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{70CCBD89-C0A1-4AC8-9AFA-C86C356DFDD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{70CCBD89-C0A1-4AC8-9AFA-C86C356DFDD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{70CCBD89-C0A1-4AC8-9AFA-C86C356DFDD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{70CCBD89-C0A1-4AC8-9AFA-C86C356DFDD7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@@ -213,6 +251,12 @@ Global
|
|||||||
{73CCF2C4-B9FD-44AB-8D4B-0A421805B094} = {2317227D-7796-4E7B-BEDB-7CD1CAE7B853}
|
{73CCF2C4-B9FD-44AB-8D4B-0A421805B094} = {2317227D-7796-4E7B-BEDB-7CD1CAE7B853}
|
||||||
{48806510-8E18-4E1E-9BAF-5B97E88C5FC3} = {73CCF2C4-B9FD-44AB-8D4B-0A421805B094}
|
{48806510-8E18-4E1E-9BAF-5B97E88C5FC3} = {73CCF2C4-B9FD-44AB-8D4B-0A421805B094}
|
||||||
{791AC2FA-50D3-4408-8D68-31DA72F608BE} = {77B949E9-530E-45A5-9657-20F7D5C6875C}
|
{791AC2FA-50D3-4408-8D68-31DA72F608BE} = {77B949E9-530E-45A5-9657-20F7D5C6875C}
|
||||||
|
{576DBC97-4E5D-4444-B65C-F41649A5F8E0} = {01300F0F-686E-47B3-821D-12424177867B}
|
||||||
|
{D7F8BD42-F6A2-4F0A-9212-391B5185A99D} = {01300F0F-686E-47B3-821D-12424177867B}
|
||||||
|
{B615847F-8568-41D1-8B7E-63D61AE69F3D} = {01300F0F-686E-47B3-821D-12424177867B}
|
||||||
|
{20827DB5-5CDE-491A-82E8-3CAB82618C1E} = {01300F0F-686E-47B3-821D-12424177867B}
|
||||||
|
{320273B6-7AE3-42DA-9675-D9AD4928A289} = {01300F0F-686E-47B3-821D-12424177867B}
|
||||||
|
{70CCBD89-C0A1-4AC8-9AFA-C86C356DFDD7} = {01300F0F-686E-47B3-821D-12424177867B}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {23D6FBC9-C970-4641-BC1E-2AEA59F51C18}
|
SolutionGuid = {23D6FBC9-C970-4641-BC1E-2AEA59F51C18}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<Import Project="..\..\common.props" />
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\framework\Yi.Framework.Ddd.Application.Contracts\Yi.Framework.Ddd.Application.Contracts.csproj" />
|
||||||
|
<ProjectReference Include="..\..\module\bbs\Yi.Framework.Bbs.Application.Contracts\Yi.Framework.Bbs.Application.Contracts.csproj" />
|
||||||
|
<ProjectReference Include="..\..\module\rbac\Yi.Framework.Rbac.Application.Contracts\Yi.Framework.Rbac.Application.Contracts.csproj" />
|
||||||
|
<ProjectReference Include="..\Acme.BookStore.Domain.Shared\Acme.BookStore.Domain.Shared.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using Acme.BookStore.Domain.Shared.Enums;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Application.Contracts.Dtos.Book
|
||||||
|
{
|
||||||
|
|
||||||
|
public class BookCreateUpdateDto
|
||||||
|
{
|
||||||
|
[Required]
|
||||||
|
[StringLength(128)]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public BookTypeEnum Type { get; set; } = BookTypeEnum.Undefined;
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[DataType(DataType.Date)]
|
||||||
|
public DateTime PublishDate { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public float Price { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using Acme.BookStore.Domain.Shared.Enums;
|
||||||
|
using Volo.Abp.Application.Dtos;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Application.Contracts.Dtos.Book
|
||||||
|
{
|
||||||
|
public class BookDto : AuditedEntityDto<Guid>
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public BookTypeEnum Type { get; set; }
|
||||||
|
|
||||||
|
public DateTime PublishDate { get; set; }
|
||||||
|
|
||||||
|
public float Price { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using Acme.BookStore.Application.Contracts.Dtos.Book;
|
||||||
|
using Volo.Abp.Application.Dtos;
|
||||||
|
using Yi.Framework.Ddd.Application.Contracts;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Application.Contracts.IServices
|
||||||
|
{
|
||||||
|
public interface IBookAppService :
|
||||||
|
IYiCrudAppService< //Defines CRUD methods
|
||||||
|
BookDto, //Used to show books
|
||||||
|
Guid, //Primary key of the book entity
|
||||||
|
PagedAndSortedResultRequestDto, //Used for paging/sorting
|
||||||
|
BookCreateUpdateDto> //Used to create/update a book
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
using Volo.Abp.Modularity;
|
||||||
|
using Acme.BookStore.Domain.Shared;
|
||||||
|
using Yi.Framework.Bbs.Application.Contracts;
|
||||||
|
using Yi.Framework.Ddd.Application.Contracts;
|
||||||
|
using Yi.Framework.Rbac.Application.Contracts;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Application.Contracts
|
||||||
|
{
|
||||||
|
[DependsOn(
|
||||||
|
typeof(YiAbpDomainSharedModule),
|
||||||
|
|
||||||
|
typeof(YiFrameworkRbacApplicationContractsModule),
|
||||||
|
typeof(YiFrameworkBbsApplicationContractsModule),
|
||||||
|
|
||||||
|
typeof(YiFrameworkDddApplicationContractsModule))]
|
||||||
|
public class YiAbpApplicationContractsModule:AbpModule
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<Import Project="..\..\common.props" />
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\framework\Yi.Framework.Ddd.Application\Yi.Framework.Ddd.Application.csproj" />
|
||||||
|
<ProjectReference Include="..\..\module\bbs\Yi.Framework.Bbs.Application\Yi.Framework.Bbs.Application.csproj" />
|
||||||
|
<ProjectReference Include="..\..\module\rbac\Yi.Framework.Rbac.Application\Yi.Framework.Rbac.Application.csproj" />
|
||||||
|
<ProjectReference Include="..\Acme.BookStore.Application.Contracts\Acme.BookStore.Application.Contracts.csproj" />
|
||||||
|
<ProjectReference Include="..\Acme.BookStore.Domain\Acme.BookStore.Domain.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Jobs\" />
|
||||||
|
<Folder Include="EventHandlers\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using Quartz;
|
||||||
|
using SqlSugar;
|
||||||
|
using Volo.Abp.BackgroundWorkers.Quartz;
|
||||||
|
using Volo.Abp.Domain.Repositories;
|
||||||
|
using Volo.Abp.Uow;
|
||||||
|
using Yi.Framework.Rbac.Domain.Entities;
|
||||||
|
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||||
|
|
||||||
|
namespace Yi.Framework.Rbac.Application.Jobs
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 定时任务
|
||||||
|
/// </summary>
|
||||||
|
public class TestJob : QuartzBackgroundWorkerBase
|
||||||
|
{
|
||||||
|
private ISqlSugarRepository<UserEntity> _repository;
|
||||||
|
public TestJob(ISqlSugarRepository<UserEntity> repository)
|
||||||
|
{
|
||||||
|
_repository = repository;
|
||||||
|
JobDetail = JobBuilder.Create<TestJob>().WithIdentity(nameof(TestJob)).Build();
|
||||||
|
Trigger = TriggerBuilder.Create().WithIdentity(nameof(TestJob)).StartNow()
|
||||||
|
.WithSimpleSchedule(x => x
|
||||||
|
.WithIntervalInSeconds(1000 * 60)
|
||||||
|
.RepeatForever())
|
||||||
|
.Build();
|
||||||
|
}
|
||||||
|
public override async Task Execute(IJobExecutionContext context)
|
||||||
|
{
|
||||||
|
//定时任务,非常简单
|
||||||
|
Console.WriteLine("你好,世界");
|
||||||
|
// var eneities= await _repository.GetListAsync();
|
||||||
|
//var entities= await _sqlSugarClient.Queryable<UserEntity>().ToListAsync();
|
||||||
|
//await Console.Out.WriteLineAsync(entities.Count().ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
using Acme.BookStore.Application.Contracts.Dtos.Book;
|
||||||
|
using Acme.BookStore.Application.Contracts.IServices;
|
||||||
|
using Acme.BookStore.Domain.Entities;
|
||||||
|
using SqlSugar;
|
||||||
|
using Volo.Abp.Application.Dtos;
|
||||||
|
using Yi.Framework.Ddd.Application;
|
||||||
|
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Application.Services
|
||||||
|
{
|
||||||
|
public class BookAppService :
|
||||||
|
YiCrudAppService<
|
||||||
|
BookAggregateRoot, //The Book entity
|
||||||
|
BookDto, //Used to show books
|
||||||
|
Guid, //Primary key of the book entity
|
||||||
|
PagedAndSortedResultRequestDto, //Used for paging/sorting
|
||||||
|
BookCreateUpdateDto>, //Used to create/update a book
|
||||||
|
IBookAppService //implement the IBookAppService
|
||||||
|
{
|
||||||
|
private ISqlSugarRepository<BookAggregateRoot, Guid> _repository;
|
||||||
|
public BookAppService(ISqlSugarRepository<BookAggregateRoot, Guid> repository)
|
||||||
|
: base(repository)
|
||||||
|
{
|
||||||
|
_repository = repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task<PagedResultDto<BookDto>> GetListAsync(PagedAndSortedResultRequestDto input)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
RefAsync<int> total = 0;
|
||||||
|
|
||||||
|
//由于直接查询接口基本上都是有包含查询条件的,默认内置的查询接口将无法满足业务的需求,所以基本上多查询都是有进行重写的
|
||||||
|
var entities = await _repository._DbQueryable
|
||||||
|
//.WhereIF(!string.IsNullOrEmpty(input.ConfigKey), x => x.ConfigKey.Contains(input.ConfigKey!))
|
||||||
|
// .WhereIF(!string.IsNullOrEmpty(input.ConfigName), x => x.ConfigName!.Contains(input.ConfigName!))
|
||||||
|
// .WhereIF(input.StartTime is not null && input.EndTime is not null, x => x.CreationTime >= input.StartTime && x.CreationTime <= input.EndTime)
|
||||||
|
.ToPageListAsync(input.SkipCount, input.MaxResultCount, total);
|
||||||
|
return new PagedResultDto<BookDto>(total, await MapToGetListOutputDtosAsync(entities));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
using Volo.Abp.Application.Services;
|
||||||
|
using Volo.Abp.DependencyInjection;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Application.Services
|
||||||
|
{
|
||||||
|
public class TestService : ApplicationService
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 你好世界
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public string GetHelloWorld(string? name)
|
||||||
|
{
|
||||||
|
return name ?? "HelloWord";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
using Volo.Abp.Modularity;
|
||||||
|
using Acme.BookStore.Application.Contracts;
|
||||||
|
using Acme.BookStore.Domain;
|
||||||
|
using Yi.Framework.Bbs.Application;
|
||||||
|
using Yi.Framework.Ddd.Application;
|
||||||
|
using Yi.Framework.Rbac.Application;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Application
|
||||||
|
{
|
||||||
|
[DependsOn(
|
||||||
|
typeof(YiAbpApplicationContractsModule),
|
||||||
|
typeof(YiAbpDomainModule),
|
||||||
|
|
||||||
|
|
||||||
|
typeof(YiFrameworkRbacApplicationModule),
|
||||||
|
typeof(YiFrameworkBbsApplicationModule),
|
||||||
|
|
||||||
|
typeof(YiFrameworkDddApplicationModule)
|
||||||
|
)]
|
||||||
|
public class YiAbpApplicationModule : AbpModule
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<Import Project="..\..\common.props" />
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Volo.Abp.Ddd.Domain.Shared" Version="8.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\module\bbs\Yi.Framework.Bbs.Domain.Shared\Yi.Framework.Bbs.Domain.Shared.csproj" />
|
||||||
|
<ProjectReference Include="..\..\module\rbac\Yi.Framework.Rbac.Domain.Shared\Yi.Framework.Rbac.Domain.Shared.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Consts\" />
|
||||||
|
<Folder Include="Dtos\" />
|
||||||
|
<Folder Include="Etos\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Domain.Shared.Enums
|
||||||
|
{
|
||||||
|
public enum BookTypeEnum
|
||||||
|
{
|
||||||
|
Undefined,
|
||||||
|
Adventure,
|
||||||
|
Biography,
|
||||||
|
Dystopia,
|
||||||
|
Fantastic,
|
||||||
|
Horror,
|
||||||
|
Science,
|
||||||
|
ScienceFiction,
|
||||||
|
Poetry
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using Volo.Abp.Domain;
|
||||||
|
using Volo.Abp.Modularity;
|
||||||
|
using Yi.Framework.Bbs.Domain.Shared;
|
||||||
|
using Yi.Framework.Rbac.Domain.Shared;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Domain.Shared
|
||||||
|
{
|
||||||
|
[DependsOn(
|
||||||
|
typeof(YiFrameworkRbacDomainSharedModule),
|
||||||
|
typeof(YiFrameworkBbsDomainSharedModule),
|
||||||
|
|
||||||
|
typeof(AbpDddDomainSharedModule))]
|
||||||
|
public class YiAbpDomainSharedModule : AbpModule
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<Import Project="..\..\common.props" />
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Volo.Abp.Caching" Version="8.0.0" />
|
||||||
|
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\framework\Yi.Framework.Mapster\Yi.Framework.Mapster.csproj" />
|
||||||
|
<ProjectReference Include="..\..\framework\Yi.Framework.SqlSugarCore.Abstractions\Yi.Framework.SqlSugarCore.Abstractions.csproj" />
|
||||||
|
<ProjectReference Include="..\..\module\bbs\Yi.Framework.Bbs.Domain\Yi.Framework.Bbs.Domain.csproj" />
|
||||||
|
<ProjectReference Include="..\..\module\rbac\Yi.Framework.Rbac.Domain\Yi.Framework.Rbac.Domain.csproj" />
|
||||||
|
<ProjectReference Include="..\Acme.BookStore.Domain.Shared\Acme.BookStore.Domain.Shared.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Managers\" />
|
||||||
|
<Folder Include="Repositories\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
using Acme.BookStore.Domain.Shared.Enums;
|
||||||
|
using SqlSugar;
|
||||||
|
using Volo.Abp.Data;
|
||||||
|
using Volo.Abp.Domain.Entities.Auditing;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Domain.Entities
|
||||||
|
{
|
||||||
|
[SugarTable("Book")]
|
||||||
|
public class BookAggregateRoot : AuditedAggregateRoot<Guid>
|
||||||
|
{
|
||||||
|
[SugarColumn(IsPrimaryKey = true)]
|
||||||
|
public override Guid Id { get; protected set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public BookTypeEnum Type { get; set; }
|
||||||
|
|
||||||
|
public DateTime PublishDate { get; set; }
|
||||||
|
|
||||||
|
public float Price { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public override ExtraPropertyDictionary ExtraProperties { get; protected set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using Volo.Abp.Caching;
|
||||||
|
using Volo.Abp.Domain;
|
||||||
|
using Volo.Abp.Modularity;
|
||||||
|
using Acme.BookStore.Domain.Shared;
|
||||||
|
using Yi.Framework.Bbs.Domain;
|
||||||
|
using Yi.Framework.Mapster;
|
||||||
|
using Yi.Framework.Rbac.Domain;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Domain
|
||||||
|
{
|
||||||
|
[DependsOn(
|
||||||
|
typeof(YiAbpDomainSharedModule),
|
||||||
|
|
||||||
|
|
||||||
|
typeof(YiFrameworkRbacDomainModule),
|
||||||
|
typeof(YiFrameworkBbsDomainModule),
|
||||||
|
|
||||||
|
typeof(YiFrameworkMapsterModule),
|
||||||
|
typeof(AbpDddDomainModule),
|
||||||
|
typeof(AbpCachingModule)
|
||||||
|
)]
|
||||||
|
public class YiAbpDomainModule : AbpModule
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<Import Project="..\..\common.props" />
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\framework\Yi.Framework.Mapster\Yi.Framework.Mapster.csproj" />
|
||||||
|
<ProjectReference Include="..\..\framework\Yi.Framework.SqlSugarCore\Yi.Framework.SqlSugarCore.csproj" />
|
||||||
|
<ProjectReference Include="..\..\module\bbs\Yi.Framework.Bbs.SqlSugarCore\Yi.Framework.Bbs.SqlSugarCore.csproj" />
|
||||||
|
<ProjectReference Include="..\..\module\rbac\Yi.Framework.Rbac.SqlSugarCore\Yi.Framework.Rbac.SqlSugarCore.csproj" />
|
||||||
|
<ProjectReference Include="..\Acme.BookStore.Domain\Acme.BookStore.Domain.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Repositories\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
using Acme.BookStore.Domain.Entities;
|
||||||
|
using Acme.BookStore.Domain.Shared.Enums;
|
||||||
|
using Volo.Abp.Data;
|
||||||
|
using Volo.Abp.DependencyInjection;
|
||||||
|
using Volo.Abp.Guids;
|
||||||
|
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.SqlSugarCore.DataSeeds
|
||||||
|
{
|
||||||
|
public class BookStoreDataSeed : IDataSeedContributor, ITransientDependency
|
||||||
|
{
|
||||||
|
private ISqlSugarRepository<BookAggregateRoot> _bookRepository;
|
||||||
|
private IGuidGenerator _guidGenerator;
|
||||||
|
public BookStoreDataSeed(ISqlSugarRepository<BookAggregateRoot> repository, IGuidGenerator guidGenerator)
|
||||||
|
{
|
||||||
|
_bookRepository = repository;
|
||||||
|
_guidGenerator = guidGenerator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task SeedAsync(DataSeedContext context)
|
||||||
|
{
|
||||||
|
if (!await _bookRepository.IsAnyAsync(x => true))
|
||||||
|
{
|
||||||
|
await _bookRepository.InsertAsync(
|
||||||
|
new BookAggregateRoot
|
||||||
|
{
|
||||||
|
Name = "1984",
|
||||||
|
Type = BookTypeEnum.Dystopia,
|
||||||
|
PublishDate = new DateTime(1949, 6, 8),
|
||||||
|
Price = 19.84f
|
||||||
|
},
|
||||||
|
autoSave: true
|
||||||
|
);
|
||||||
|
|
||||||
|
await _bookRepository.InsertAsync(
|
||||||
|
new BookAggregateRoot
|
||||||
|
{
|
||||||
|
Name = "The Hitchhiker's Guide to the Galaxy",
|
||||||
|
Type = BookTypeEnum.ScienceFiction,
|
||||||
|
PublishDate = new DateTime(1995, 9, 27),
|
||||||
|
Price = 42.0f
|
||||||
|
},
|
||||||
|
autoSave: true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Volo.Abp.Modularity;
|
||||||
|
using Acme.BookStore.Domain;
|
||||||
|
using Acme.BookStore.SqlSugarCore;
|
||||||
|
using Yi.Framework.Bbs.SqlSugarCore;
|
||||||
|
using Yi.Framework.Mapster;
|
||||||
|
using Yi.Framework.Rbac.SqlSugarCore;
|
||||||
|
using Yi.Framework.SqlSugarCore;
|
||||||
|
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.SqlsugarCore
|
||||||
|
{
|
||||||
|
[DependsOn(
|
||||||
|
typeof(YiAbpDomainModule),
|
||||||
|
|
||||||
|
typeof(YiFrameworkRbacSqlSugarCoreModule),
|
||||||
|
typeof(YiFrameworkBbsSqlSugarCoreModule),
|
||||||
|
|
||||||
|
typeof(YiFrameworkMapsterModule),
|
||||||
|
typeof(YiFrameworkSqlSugarCoreModule)
|
||||||
|
)]
|
||||||
|
public class YiAbpSqlSugarCoreModule : AbpModule
|
||||||
|
{
|
||||||
|
public override void ConfigureServices(ServiceConfigurationContext context)
|
||||||
|
{
|
||||||
|
context.Services.AddYiDbContext<YiDbContext>();
|
||||||
|
//默认不开放,可根据项目需要是否Db直接对外开放
|
||||||
|
//context.Services.AddTransient(x => x.GetRequiredService<ISqlSugarDbContext>().SqlSugarClient);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using SqlSugar;
|
||||||
|
using Volo.Abp.DependencyInjection;
|
||||||
|
using Yi.Framework.Rbac.SqlSugarCore;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.SqlSugarCore
|
||||||
|
{
|
||||||
|
public class YiDbContext : YiRbacDbContext
|
||||||
|
{
|
||||||
|
public YiDbContext(IAbpLazyServiceProvider lazyServiceProvider) : base(lazyServiceProvider)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void CustomDataFilter()
|
||||||
|
{
|
||||||
|
base.CustomDataFilter();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected override void DataExecuted(object oldValue, DataAfterModel entityInfo)
|
||||||
|
{
|
||||||
|
base.DataExecuted(oldValue, entityInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void DataExecuting(object oldValue, DataFilterModel entityInfo)
|
||||||
|
{
|
||||||
|
base.DataExecuting(oldValue, entityInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnLogExecuting(string sql, SugarParameter[] pars)
|
||||||
|
{
|
||||||
|
base.OnLogExecuting(sql, pars);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnLogExecuted(string sql, SugarParameter[] pars)
|
||||||
|
{
|
||||||
|
base.OnLogExecuted(sql, pars);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnSqlSugarClientConfig(ISqlSugarClient sqlSugarClient)
|
||||||
|
{
|
||||||
|
base.OnSqlSugarClientConfig(sqlSugarClient);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
<Import Project="..\..\common.props" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
|
||||||
|
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Volo.Abp.Autofac" Version="8.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\framework\Yi.Framework.AspNetCore.Authentication.OAuth\Yi.Framework.AspNetCore.Authentication.OAuth.csproj" />
|
||||||
|
<ProjectReference Include="..\..\framework\Yi.Framework.AspNetCore\Yi.Framework.AspNetCore.csproj" />
|
||||||
|
<ProjectReference Include="..\Acme.BookStore.Application\Acme.BookStore.Application.csproj" />
|
||||||
|
<ProjectReference Include="..\Acme.BookStore.SqlSugarCore\Acme.BookStore.SqlSugarCore.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Update="appsettings.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Update="wwwroot\icon\**">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Update="ip2region.db">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="database_backup\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
37
Yi.Abp.Net8/sample/Acme.BookStore.Web/Program.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
using Serilog;
|
||||||
|
using Serilog.Events;
|
||||||
|
using Acme.BookStore.Web;
|
||||||
|
|
||||||
|
//创建日志,可使用{SourceContext}记录
|
||||||
|
Log.Logger = new LoggerConfiguration()
|
||||||
|
.MinimumLevel.Debug()
|
||||||
|
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
|
||||||
|
.MinimumLevel.Override("Microsoft.AspNetCore.Hosting.Diagnostics", LogEventLevel.Error)
|
||||||
|
.MinimumLevel.Override("Quartz", LogEventLevel.Warning)
|
||||||
|
.Enrich.FromLogContext()
|
||||||
|
.WriteTo.Async(c => c.File("logs/all/log-.txt", rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: LogEventLevel.Debug))
|
||||||
|
.WriteTo.Async(c => c.File("logs/error/errorlog-.txt", rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: LogEventLevel.Error))
|
||||||
|
.WriteTo.Async(c => c.Console(restrictedToMinimumLevel: LogEventLevel.Information))
|
||||||
|
.CreateLogger();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Log.Information("Yi框架-Abp.vNext,启动!");
|
||||||
|
|
||||||
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
builder.WebHost.UseUrls(builder.Configuration["App:SelfUrl"]);
|
||||||
|
builder.Host.UseAutofac();
|
||||||
|
builder.Host.UseSerilog();
|
||||||
|
await builder.Services.AddApplicationAsync<YiAbpWebModule>();
|
||||||
|
var app = builder.Build();
|
||||||
|
await app.InitializeApplicationAsync();
|
||||||
|
await app.RunAsync();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.Fatal(ex, "Yi框架-Abp.vNext,爆炸!");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Log.CloseAndFlush();
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json.schemastore.org/launchsettings.json",
|
||||||
|
"profiles": {
|
||||||
|
"Acme.BookStore.Web": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": true,
|
||||||
|
"launchUrl": "swagger",
|
||||||
|
"applicationUrl": "http://localhost:19001",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
198
Yi.Abp.Net8/sample/Acme.BookStore.Web/YiAbpWebModule.cs
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
using System.Text;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||||
|
using Microsoft.AspNetCore.Cors;
|
||||||
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using Microsoft.OpenApi.Models;
|
||||||
|
using Newtonsoft.Json.Converters;
|
||||||
|
using Volo.Abp;
|
||||||
|
using Volo.Abp.AspNetCore.Authentication.JwtBearer;
|
||||||
|
using Volo.Abp.AspNetCore.Mvc;
|
||||||
|
using Volo.Abp.AspNetCore.Mvc.AntiForgery;
|
||||||
|
using Volo.Abp.AspNetCore.Serilog;
|
||||||
|
using Volo.Abp.Auditing;
|
||||||
|
using Volo.Abp.Autofac;
|
||||||
|
using Volo.Abp.Modularity;
|
||||||
|
using Volo.Abp.Swashbuckle;
|
||||||
|
using Acme.BookStore.Application;
|
||||||
|
using Acme.BookStore.SqlsugarCore;
|
||||||
|
using Yi.Framework.AspNetCore;
|
||||||
|
using Yi.Framework.AspNetCore.Authentication.OAuth;
|
||||||
|
using Yi.Framework.AspNetCore.Authentication.OAuth.Gitee;
|
||||||
|
using Yi.Framework.AspNetCore.Authentication.OAuth.QQ;
|
||||||
|
using Yi.Framework.AspNetCore.Microsoft.AspNetCore.Builder;
|
||||||
|
using Yi.Framework.AspNetCore.Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Yi.Framework.Bbs.Application;
|
||||||
|
using Yi.Framework.Rbac.Application;
|
||||||
|
using Yi.Framework.Rbac.Domain.Shared.Options;
|
||||||
|
|
||||||
|
namespace Acme.BookStore.Web
|
||||||
|
{
|
||||||
|
[DependsOn(
|
||||||
|
typeof(YiAbpSqlSugarCoreModule),
|
||||||
|
typeof(YiAbpApplicationModule),
|
||||||
|
|
||||||
|
|
||||||
|
typeof(AbpAspNetCoreMvcModule),
|
||||||
|
typeof(AbpAutofacModule),
|
||||||
|
typeof(AbpSwashbuckleModule),
|
||||||
|
typeof(AbpAspNetCoreSerilogModule),
|
||||||
|
typeof(AbpAuditingModule),
|
||||||
|
typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
|
||||||
|
typeof(YiFrameworkAspNetCoreModule),
|
||||||
|
typeof(YiFrameworkAspNetCoreAuthenticationOAuthModule)
|
||||||
|
|
||||||
|
)]
|
||||||
|
public class YiAbpWebModule : AbpModule
|
||||||
|
{
|
||||||
|
private const string DefaultCorsPolicyName = "Default";
|
||||||
|
public override Task ConfigureServicesAsync(ServiceConfigurationContext context)
|
||||||
|
{
|
||||||
|
var configuration = context.Services.GetConfiguration();
|
||||||
|
var host = context.Services.GetHostingEnvironment();
|
||||||
|
var service = context.Services;
|
||||||
|
|
||||||
|
//请求日志
|
||||||
|
Configure<AbpAuditingOptions>(optios =>
|
||||||
|
{
|
||||||
|
optios.IsEnabled = true;
|
||||||
|
optios.AlwaysLogSelectors.Add(x => Task.FromResult(true));
|
||||||
|
});
|
||||||
|
|
||||||
|
//动态Api
|
||||||
|
Configure<AbpAspNetCoreMvcOptions>(options =>
|
||||||
|
{
|
||||||
|
options.ConventionalControllers.Create(typeof(YiAbpApplicationModule).Assembly, options => options.RemoteServiceName = "default");
|
||||||
|
options.ConventionalControllers.Create(typeof(YiFrameworkRbacApplicationModule).Assembly, options => options.RemoteServiceName = "rbac");
|
||||||
|
options.ConventionalControllers.Create(typeof(YiFrameworkBbsApplicationModule).Assembly, options => options.RemoteServiceName = "bbs");
|
||||||
|
});
|
||||||
|
|
||||||
|
//设置api格式
|
||||||
|
service.AddControllers().AddNewtonsoftJson(options =>
|
||||||
|
{
|
||||||
|
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
|
||||||
|
options.SerializerSettings.Converters.Add(new StringEnumConverter());
|
||||||
|
});
|
||||||
|
|
||||||
|
Configure<AbpAntiForgeryOptions>(options =>
|
||||||
|
{
|
||||||
|
options.AutoValidate = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
//Swagger
|
||||||
|
context.Services.AddYiSwaggerGen<YiAbpWebModule>(options =>
|
||||||
|
{
|
||||||
|
options.SwaggerDoc("default", new OpenApiInfo { Title = "Yi.Framework.Abp", Version = "v1", Description = "集大成者" });
|
||||||
|
});
|
||||||
|
|
||||||
|
//跨域
|
||||||
|
context.Services.AddCors(options =>
|
||||||
|
{
|
||||||
|
options.AddPolicy(DefaultCorsPolicyName, builder =>
|
||||||
|
{
|
||||||
|
builder
|
||||||
|
.WithOrigins(
|
||||||
|
configuration["App:CorsOrigins"]!
|
||||||
|
.Split(";", StringSplitOptions.RemoveEmptyEntries)
|
||||||
|
.Select(o => o.RemovePostFix("/"))
|
||||||
|
.ToArray()
|
||||||
|
)
|
||||||
|
.WithAbpExposedHeaders()
|
||||||
|
.SetIsOriginAllowedToAllowWildcardSubdomains()
|
||||||
|
.AllowAnyHeader()
|
||||||
|
.AllowAnyMethod()
|
||||||
|
.AllowCredentials();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//jwt鉴权
|
||||||
|
var jwtOptions = configuration.GetSection(nameof(JwtOptions)).Get<JwtOptions>();
|
||||||
|
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
|
||||||
|
.AddJwtBearer(options =>
|
||||||
|
{
|
||||||
|
options.TokenValidationParameters = new TokenValidationParameters
|
||||||
|
{
|
||||||
|
ClockSkew = TimeSpan.Zero,
|
||||||
|
ValidateIssuer = true,
|
||||||
|
ValidateAudience = true,
|
||||||
|
ValidateLifetime = true,
|
||||||
|
ValidateIssuerSigningKey = true,
|
||||||
|
ValidIssuer = jwtOptions.Issuer,
|
||||||
|
ValidAudience = jwtOptions.Audience,
|
||||||
|
RequireExpirationTime = true,
|
||||||
|
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.SecurityKey))
|
||||||
|
};
|
||||||
|
options.Events = new JwtBearerEvents
|
||||||
|
{
|
||||||
|
OnMessageReceived = context =>
|
||||||
|
{
|
||||||
|
var accessToken = context.Request.Query["access_token"];
|
||||||
|
if (!string.IsNullOrEmpty(accessToken))
|
||||||
|
{
|
||||||
|
context.Token = accessToken;
|
||||||
|
}
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.AddQQ(options =>
|
||||||
|
{
|
||||||
|
configuration.GetSection("OAuth:QQ").Bind(options);
|
||||||
|
})
|
||||||
|
.AddGitee(options =>
|
||||||
|
{
|
||||||
|
configuration.GetSection("OAuth:Gitee").Bind(options);
|
||||||
|
});
|
||||||
|
|
||||||
|
//授权
|
||||||
|
context.Services.AddAuthorization();
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
|
||||||
|
{
|
||||||
|
var service = context.ServiceProvider;
|
||||||
|
|
||||||
|
var env = context.GetEnvironment();
|
||||||
|
var app = context.GetApplicationBuilder();
|
||||||
|
|
||||||
|
app.UseRouting();
|
||||||
|
|
||||||
|
//跨域
|
||||||
|
app.UseCors(DefaultCorsPolicyName);
|
||||||
|
|
||||||
|
//鉴权
|
||||||
|
app.UseAuthentication();
|
||||||
|
|
||||||
|
//swagger
|
||||||
|
app.UseYiSwagger();
|
||||||
|
|
||||||
|
//请求处理
|
||||||
|
app.UseYiApiHandlinge();
|
||||||
|
|
||||||
|
//静态资源
|
||||||
|
app.UseStaticFiles("/api/app/wwwroot");
|
||||||
|
app.UseDefaultFiles();
|
||||||
|
app.UseDirectoryBrowser("/api/app/wwwroot");
|
||||||
|
|
||||||
|
//工作单元
|
||||||
|
app.UseUnitOfWork();
|
||||||
|
|
||||||
|
//授权
|
||||||
|
app.UseAuthorization();
|
||||||
|
|
||||||
|
//审计日志
|
||||||
|
app.UseAuditing();
|
||||||
|
|
||||||
|
//日志记录
|
||||||
|
app.UseAbpSerilogEnrichers();
|
||||||
|
|
||||||
|
//终节点
|
||||||
|
app.UseConfiguredEndpoints();
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
71
Yi.Abp.Net8/sample/Acme.BookStore.Web/appsettings.json
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
//"Default": "Information",
|
||||||
|
"Default": "Debug",
|
||||||
|
"Microsoft.AspNetCore": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//应用启动
|
||||||
|
"App": {
|
||||||
|
"SelfUrl": "http://*:19001",
|
||||||
|
"CorsOrigins": "http://localhost:19001;http://localhost:18000"
|
||||||
|
},
|
||||||
|
|
||||||
|
//数据库类型列表
|
||||||
|
"DbList": [ "Sqlite", "Mysql", "Sqlserver", "Oracle" ],
|
||||||
|
|
||||||
|
"DbConnOptions": {
|
||||||
|
"Url": "DataSource=yi-abp-dev.db",
|
||||||
|
"DbType": "Sqlite",
|
||||||
|
"EnabledReadWrite": false,
|
||||||
|
"EnabledCodeFirst": true,
|
||||||
|
"EnabledSqlLog": true,
|
||||||
|
"EnabledDbSeed": true
|
||||||
|
//读写分离地址
|
||||||
|
//"ReadUrl": [
|
||||||
|
// "DataSource=[xxxx]", //Sqlite
|
||||||
|
// "server=[xxxx];port=3306;database=[xxxx];user id=[xxxx];password=[xxxx]", //Mysql
|
||||||
|
// "Data Source=[xxxx];Initial Catalog=[xxxx];User ID=[xxxx];password=[xxxx]" //Sqlserver
|
||||||
|
//]
|
||||||
|
},
|
||||||
|
|
||||||
|
//鉴权
|
||||||
|
"JwtOptions": {
|
||||||
|
"Issuer": "https://ccnetcore.com",
|
||||||
|
"Audience": "https://ccnetcore.com",
|
||||||
|
"SecurityKey": "zqxwcevrbtnymu312412ihe9rfwhe78rh23djoi32hrui3ryf9e8wfh34iuj54y0934uti4h97fgw7hf97wyh8yy69520",
|
||||||
|
"ExpiresMinuteTime": 86400
|
||||||
|
},
|
||||||
|
|
||||||
|
//第三方登录
|
||||||
|
"OAuth": {
|
||||||
|
//QQ
|
||||||
|
"QQ": {
|
||||||
|
"ClientId": "",
|
||||||
|
"ClientSecret": "",
|
||||||
|
"RedirectUri": ""
|
||||||
|
},
|
||||||
|
//码云
|
||||||
|
"Gitee": {
|
||||||
|
"ClientId": "",
|
||||||
|
"ClientSecret": "",
|
||||||
|
"RedirectUri": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
//Rbac模块
|
||||||
|
"RbacOptions": {
|
||||||
|
//超级管理员种子数据默认密码
|
||||||
|
"AdminPassword": "123456",
|
||||||
|
|
||||||
|
//是否开启验证码验证
|
||||||
|
"EnableCaptcha": true,
|
||||||
|
|
||||||
|
//是否开启注册功能
|
||||||
|
"EnableRegister": false,
|
||||||
|
|
||||||
|
//开启定时数据库备份
|
||||||
|
"EnableDataBaseBackup": false
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/ip2region.db
Normal file
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/0.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/1.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/10.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/11.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/12.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/13.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/14.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/2.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/3.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/4.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/5.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/6.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/8.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/icon/9.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
Yi.Abp.Net8/sample/Acme.BookStore.Web/wwwroot/logo.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |