Browse Source

Docs module MongoDB support

resolves https://github.com/abpframework/abp/issues/1364
pull/1394/head
Yunus Emre Kalkan 7 years ago
parent
commit
03e4cd0084
  1. 16
      modules/docs/Volo.Docs.sln
  2. 17
      modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj
  3. 22
      modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/BloggingMongoDbModule.cs
  4. 25
      modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContext.cs
  5. 28
      modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContextExtensions.cs
  6. 16
      modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoModelBuilderConfigurationOptions.cs
  7. 15
      modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/IDocsMongoDbContext.cs
  8. 42
      modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs
  9. 19
      modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj
  10. 31
      modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/MongoDB/DocsMongoDBTestModule.cs
  11. 8
      modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/Project/ProjectRepository_Tests.cs

16
modules/docs/Volo.Docs.sln

@ -55,7 +55,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoloDocs.EntityFrameworkCor
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoloDocs.Web", "app\VoloDocs.Web\VoloDocs.Web.csproj", "{057EA924-4524-4452-840C-5E3D509F2ED3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VoloDocs.Migrator", "app\VoloDocs.Migrator\VoloDocs.Migrator.csproj", "{8A5E5001-C017-44A8-ADDA-DC66C102556E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoloDocs.Migrator", "app\VoloDocs.Migrator\VoloDocs.Migrator.csproj", "{8A5E5001-C017-44A8-ADDA-DC66C102556E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Docs.MongoDB", "src\Volo.Docs.MongoDB\Volo.Docs.MongoDB.csproj", "{DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Docs.MongoDB.Tests", "test\Volo.Docs.MongoDB.Tests\Volo.Docs.MongoDB.Tests.csproj", "{C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -147,6 +151,14 @@ Global
{8A5E5001-C017-44A8-ADDA-DC66C102556E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8A5E5001-C017-44A8-ADDA-DC66C102556E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8A5E5001-C017-44A8-ADDA-DC66C102556E}.Release|Any CPU.Build.0 = Release|Any CPU
{DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B}.Release|Any CPU.Build.0 = Release|Any CPU
{C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -176,6 +188,8 @@ Global
{1B459653-8DAC-41CD-A08E-28D6E74265D3} = {555508AD-F593-43E3-9354-9FA51512F181}
{057EA924-4524-4452-840C-5E3D509F2ED3} = {555508AD-F593-43E3-9354-9FA51512F181}
{8A5E5001-C017-44A8-ADDA-DC66C102556E} = {555508AD-F593-43E3-9354-9FA51512F181}
{DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B} = {A982A58E-1E92-4764-9F56-39E7AABB8556}
{C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD} = {59D430A9-AC61-4457-8338-5DA0705ABB5D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {13691265-2547-4FFF-B757-E8FACB05679D}

17
modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>Volo.Docs.MongoDB</AssemblyName>
<PackageId>Volo.Docs.MongoDB</PackageId>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Docs.Domain\Volo.Docs.Domain.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.MongoDB\Volo.Abp.MongoDB.csproj" />
</ItemGroup>
</Project>

22
modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/BloggingMongoDbModule.cs

@ -0,0 +1,22 @@
using Volo.Abp.Modularity;
using Volo.Abp.MongoDB;
using Volo.Docs.Projects;
using Microsoft.Extensions.DependencyInjection;
namespace Volo.Docs.MongoDB
{
[DependsOn(
typeof(DocsDomainModule),
typeof(AbpMongoDbModule)
)]
public class DocsMongoDbModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddMongoDbContext<DocsMongoDbContext>(options =>
{
options.AddRepository<Project, MongoProjectRepository>();
});
}
}
}

25
modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContext.cs

@ -0,0 +1,25 @@
using MongoDB.Driver;
using Volo.Abp.Data;
using Volo.Docs.Projects;
using Volo.Abp.MongoDB;
namespace Volo.Docs.MongoDB
{
[ConnectionStringName(DocsConsts.ConnectionStringName)]
public class DocsMongoDbContext : AbpMongoDbContext, IDocsMongoDbContext
{
public static string CollectionPrefix { get; set; } = DocsConsts.DefaultDbTablePrefix;
public IMongoCollection<Project> Projects => Collection<Project>();
protected override void CreateModel(IMongoModelBuilder modelBuilder)
{
base.CreateModel(modelBuilder);
modelBuilder.ConfigureDocs(options =>
{
options.CollectionPrefix = CollectionPrefix;
});
}
}
}

28
modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContextExtensions.cs

@ -0,0 +1,28 @@

using System;
using Volo.Abp;
using Volo.Abp.MongoDB;
using Volo.Docs.Projects;
namespace Volo.Docs.MongoDB
{
public static class DocsMongoDbContextExtensions
{
public static void ConfigureDocs(
this IMongoModelBuilder builder,
Action<MongoModelBuilderConfigurationOptions> optionsAction = null)
{
Check.NotNull(builder, nameof(builder));
var options = new DocsMongoModelBuilderConfigurationOptions();
optionsAction?.Invoke(options);
builder.Entity<Project>(b =>
{
b.CollectionName = options.CollectionPrefix + "Projects";
});
}
}
}

16
modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoModelBuilderConfigurationOptions.cs

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;
using JetBrains.Annotations;
using Volo.Abp.MongoDB;
namespace Volo.Docs.MongoDB
{
public class DocsMongoModelBuilderConfigurationOptions : MongoModelBuilderConfigurationOptions
{
public DocsMongoModelBuilderConfigurationOptions([NotNull] string tablePrefix = DocsConsts.DefaultDbTablePrefix)
: base(tablePrefix)
{
}
}
}

15
modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/IDocsMongoDbContext.cs

@ -0,0 +1,15 @@
using MongoDB.Driver;
using Volo.Abp.Data;
using Volo.Abp.MongoDB;
using Volo.Docs.Projects;
namespace Volo.Docs.MongoDB
{
[ConnectionStringName(DocsConsts.ConnectionStringName)]
public interface IDocsMongoDbContext : IAbpMongoDbContext
{
IMongoCollection<Project> Projects { get; }
}
}

42
modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs

@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
using Volo.Docs.MongoDB;
using System.Linq;
using System.Linq.Dynamic.Core;
namespace Volo.Docs.Projects
{
public class MongoProjectRepository : MongoDbRepository<IDocsMongoDbContext, Project, Guid>, IProjectRepository
{
public MongoProjectRepository(IMongoDbContextProvider<IDocsMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public async Task<List<Project>> GetListAsync(string sorting, int maxResultCount, int skipCount)
{
var projects = await GetMongoQueryable().OrderBy(sorting ?? "Id desc").As<IMongoQueryable<Project>>()
.PageBy<Project, IMongoQueryable<Project>>(skipCount, maxResultCount)
.ToListAsync();
return projects;
}
public async Task<Project> GetByShortNameAsync(string shortName)
{
var project = await GetMongoQueryable().FirstOrDefaultAsync(p => p.ShortName == shortName);
if (project == null)
{
throw new EntityNotFoundException($"Project with the name {shortName} not found!");
}
return project;
}
}
}

19
modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj

@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="Mongo2Go" Version="2.2.8" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Volo.Docs.MongoDB\Volo.Docs.MongoDB.csproj" />
<ProjectReference Include="..\Volo.Docs.TestBase\Volo.Docs.TestBase.csproj" />
</ItemGroup>
</Project>

31
modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/MongoDB/DocsMongoDBTestModule.cs

@ -0,0 +1,31 @@
using Mongo2Go;
using Volo.Abp;
using Volo.Abp.Data;
using Volo.Abp.Modularity;
namespace Volo.Docs.MongoDB
{
[DependsOn(
typeof(DocsTestBaseModule),
typeof(DocsMongoDbModule)
)]
public class DocsMongoDBTestModule : AbpModule
{
private MongoDbRunner _mongoDbRunner;
public override void ConfigureServices(ServiceConfigurationContext context)
{
_mongoDbRunner = MongoDbRunner.Start();
Configure<DbConnectionOptions>(options =>
{
options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString;
});
}
public override void OnApplicationShutdown(ApplicationShutdownContext context)
{
_mongoDbRunner.Dispose();
}
}
}

8
modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/Project/ProjectRepository_Tests.cs

@ -0,0 +1,8 @@
using Volo.Docs.MongoDB;
namespace Volo.Docs.Project
{
public class ProjectRepository_Tests : ProjectRepository_Tests<DocsMongoDBTestModule>
{
}
}
Loading…
Cancel
Save