Browse Source

add project management module

pull/249/head
cKey 5 years ago
parent
commit
86d49e318c
  1. 24
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application.Contracts/LINGYUN.Abp.ProjectManagement.Application.Contracts.csproj
  2. 29
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application.Contracts/LINGYUN/Abp/ProjectManagement/AbpProjectManagementApplicationContractsModule.cs
  3. 5
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application.Contracts/LINGYUN/Abp/ProjectManagement/Localization/ApplicationContracts/en.json
  4. 5
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application.Contracts/LINGYUN/Abp/ProjectManagement/Localization/ApplicationContracts/zh-Hans.json
  5. 18
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application/LINGYUN.Abp.ProjectManagement.Application.csproj
  6. 12
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application/LINGYUN/Abp/ProjectManagement/AbpProjectManagementApplicationModule.cs
  7. 19
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN.Abp.ProjectManagement.Domain.Shared.csproj
  8. 30
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/AbpProjectManagementDomainSharedModule.cs
  9. 9
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Localization/AbpProjectManagementResource.cs
  10. 5
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Localization/Domain/en.json
  11. 5
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Localization/Domain/zh-Hans.json
  12. 9
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Projects/BuildStatus.cs
  13. 8
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Projects/RepositoryType.cs
  14. 9
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Templates/OptionsType.cs
  15. 20
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN.Abp.ProjectManagement.Domain.csproj
  16. 14
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/AbpProjectManagementDomainModule.cs
  17. 11
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Packages/Package.cs
  18. 16
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/IProjectLogRepository.cs
  19. 21
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/IProjectRepository.cs
  20. 21
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/IProjectRepositoryExtensions.cs
  21. 23
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/ProductBuildLog.cs
  22. 68
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/Project.cs
  23. 13
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/ProjectItem.cs
  24. 154
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/ProjectManager.cs
  25. 22
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/ProjectOptions.cs
  26. 26
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/ProjectTemplate.cs
  27. 14
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Templates/ITemplateRepository.cs
  28. 20
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Templates/ITemplateRepositoryExtensions.cs
  29. 28
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Templates/Template.cs
  30. 30
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Templates/TemplateOptions.cs
  31. 14
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.EntityFrameworkCore/LINGYUN.Abp.ProjectManagement.EntityFrameworkCore.csproj
  32. 12
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.EntityFrameworkCore/LINGYUN/Abp/ProjectManagement/AbpProjectManagementEntityFrameworkCoreModule.cs
  33. 18
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.HttpApi/LINGYUN.Abp.ProjectManagement.HttpApi.csproj
  34. 35
      aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.HttpApi/LINGYUN/Abp/ProjectManagement/AbpProjectManagementHttpApiModule.cs

24
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application.Contracts/LINGYUN.Abp.ProjectManagement.Application.Contracts.csproj

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<content Remove="LINGYUN\Abp\ProjectManagement\Localization\ApplicationContracts\*.json" />
<EmbeddedResource Include="LINGYUN\Abp\ProjectManagement\Localization\ApplicationContracts\*.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Authorization" Version="4.2.1" />
<PackageReference Include="Volo.Abp.Ddd.Application.Contracts" Version="4.2.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.ProjectManagement.Domain.Shared\LINGYUN.Abp.ProjectManagement.Domain.Shared.csproj" />
</ItemGroup>
</Project>

29
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application.Contracts/LINGYUN/Abp/ProjectManagement/AbpProjectManagementApplicationContractsModule.cs

@ -0,0 +1,29 @@
using LINGYUN.Abp.ProjectManagement.Localization;
using Volo.Abp.Application;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
namespace LINGYUN.Abp.ProjectManagement
{
[DependsOn(
typeof(AbpDddApplicationContractsModule),
typeof(AbpProjectManagementDomainSharedModule))]
public class AbpProjectManagementApplicationContractsModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpProjectManagementApplicationContractsModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Get<AbpProjectManagementResource>()
.AddVirtualJson("/LINGYUN/Abp/ProjectManagement/Localization/ApplicationContracts");
});
}
}
}

5
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application.Contracts/LINGYUN/Abp/ProjectManagement/Localization/ApplicationContracts/en.json

@ -0,0 +1,5 @@
{
"culture": "en",
"texts": {
}
}

5
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application.Contracts/LINGYUN/Abp/ProjectManagement/Localization/ApplicationContracts/zh-Hans.json

@ -0,0 +1,5 @@
{
"culture": "zh-Hans",
"texts": {
}
}

18
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application/LINGYUN.Abp.ProjectManagement.Application.csproj

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Ddd.Application" Version="4.2.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.ProjectManagement.Application.Contracts\LINGYUN.Abp.ProjectManagement.Application.Contracts.csproj" />
</ItemGroup>
</Project>

12
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Application/LINGYUN/Abp/ProjectManagement/AbpProjectManagementApplicationModule.cs

@ -0,0 +1,12 @@
using Volo.Abp.Application;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.ProjectManagement
{
[DependsOn(
typeof(AbpDddApplicationModule),
typeof(AbpProjectManagementApplicationContractsModule))]
public class AbpProjectManagementApplicationModule : AbpModule
{
}
}

19
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN.Abp.ProjectManagement.Domain.Shared.csproj

@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<content Remove="LINGYUN\Abp\ProjectManagement\Localization\Domain\*.json" />
<EmbeddedResource Include="LINGYUN\Abp\ProjectManagement\Localization\Domain\*.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Validation" Version="4.2.1" />
</ItemGroup>
</Project>

30
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/AbpProjectManagementDomainSharedModule.cs

@ -0,0 +1,30 @@
using LINGYUN.Abp.ProjectManagement.Localization;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Validation;
using Volo.Abp.Validation.Localization;
using Volo.Abp.VirtualFileSystem;
namespace LINGYUN.Abp.ProjectManagement
{
[DependsOn(
typeof(AbpValidationModule))]
public class AbpProjectManagementDomainSharedModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpProjectManagementDomainSharedModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<AbpProjectManagementResource>()
.AddBaseTypes(typeof(AbpValidationResource))
.AddVirtualJson("/LINGYUN/Abp/ProjectManagement/Localization/Domain");
});
}
}
}

9
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Localization/AbpProjectManagementResource.cs

@ -0,0 +1,9 @@
using Volo.Abp.Localization;
namespace LINGYUN.Abp.ProjectManagement.Localization
{
[LocalizationResourceName("AbpProjectManagement")]
public class AbpProjectManagementResource
{
}
}

5
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Localization/Domain/en.json

@ -0,0 +1,5 @@
{
"culture": "en",
"texts": {
}
}

5
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Localization/Domain/zh-Hans.json

@ -0,0 +1,5 @@
{
"culture": "zh-Hans",
"texts": {
}
}

9
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Projects/BuildStatus.cs

@ -0,0 +1,9 @@
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public enum BuildStatus
{
Created = 0,
Successed = 1,
Failed = 10
}
}

8
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Projects/RepositoryType.cs

@ -0,0 +1,8 @@
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public enum RepositoryType
{
Git = 0,
Subversion = 1
}
}

9
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain.Shared/LINGYUN/Abp/ProjectManagement/Templates/OptionsType.cs

@ -0,0 +1,9 @@
namespace LINGYUN.Abp.ProjectManagement.Templates
{
public enum OptionsType
{
Empty = 0,
Input = 1,
Options = 2
}
}

20
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN.Abp.ProjectManagement.Domain.csproj

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AutoMapper" Version="4.2.1" />
<PackageReference Include="Volo.Abp.Cli.Core" Version="4.2.1" />
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="4.2.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.ProjectManagement.Domain.Shared\LINGYUN.Abp.ProjectManagement.Domain.Shared.csproj" />
</ItemGroup>
</Project>

14
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/AbpProjectManagementDomainModule.cs

@ -0,0 +1,14 @@
using Volo.Abp.Cli;
using Volo.Abp.Domain;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.ProjectManagement
{
[DependsOn(
typeof(AbpDddDomainModule),
typeof(AbpCliCoreModule),
typeof(AbpProjectManagementDomainSharedModule))]
public class AbpProjectManagementDomainModule : AbpModule
{
}
}

11
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Packages/Package.cs

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace LINGYUN.Abp.ProjectManagement.Packages
{
public class Package
{
}
}

16
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/IProjectLogRepository.cs

@ -0,0 +1,16 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public interface IProjectLogRepository : IRepository<ProductBuildLog, int>
{
Task<List<ProductBuildLog>> GetListAsync(
Guid projectId,
LogLevel? level = null);
}
}

21
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/IProjectRepository.cs

@ -0,0 +1,21 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public interface IProjectRepository : IRepository<Project, Guid>
{
Task<bool> CheckNameAsync(
string name,
CancellationToken cancellationToken = default);
Task<Project> FindByNameAsync(
string name,
CancellationToken cancellationToken = default);
Task<ProjectTemplate> FindTemplateAsync(
Guid id,
CancellationToken cancellationToken = default);
}
}

21
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/IProjectRepositoryExtensions.cs

@ -0,0 +1,21 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public static class IProjectRepositoryExtensions
{
public static async Task<ProjectTemplate> GetTemplateAsync(
this IProjectRepository repository,
Guid id,
CancellationToken cancellationToken = default)
{
var template = await repository.FindTemplateAsync(id, cancellationToken);
return template ??
throw new EntityNotFoundException(typeof(ProjectTemplate), id);
}
}
}

23
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/ProductBuildLog.cs

@ -0,0 +1,23 @@
using Microsoft.Extensions.Logging;
using System;
using Volo.Abp.Domain.Entities;
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public class ProductBuildLog : Entity<int>
{
public virtual Guid ProjectId { get; set; }
public virtual string Message { get; set; }
public virtual LogLevel Level { get; set; }
protected ProductBuildLog() { }
public ProductBuildLog(
Guid projectId,
string message,
LogLevel level = LogLevel.Information)
{
ProjectId = projectId;
Message = message;
Level = level;
}
}
}

68
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/Project.cs

@ -0,0 +1,68 @@
using System;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.Timing;
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public class Project : AuditedAggregateRoot<Guid>
{
public virtual string Name { get; protected set; }
public virtual string Version { get; protected set; }
public virtual BuildStatus Status { get; protected set; }
public virtual DateTime? BuildTime { get; protected set; }
public virtual string BuildError { get; protected set; }
public virtual string PackageIconUrl { get; protected set; }
public virtual string PackageProjectUrl { get; protected set; }
public virtual string PackageLicenseExpression { get; protected set; }
public virtual RepositoryType? RepositoryType { get; protected set; }
public virtual string RepositoryUrl { get; protected set; }
public virtual string Template { get; protected set; }
protected Project() { }
public Project(
Guid id,
string template,
string name,
string version = "1.0.0.0",
string packageIconUrl = "",
string packageProjectUrl = "",
string packageLicenseExpression = "MIT",
RepositoryType? repositoryType = null,
string repositoryUrl = "")
: base(id)
{
Name = name;
Template = template;
Version = version;
PackageIconUrl = packageIconUrl;
PackageProjectUrl = packageProjectUrl;
PackageLicenseExpression = packageLicenseExpression;
RepositoryType = repositoryType;
RepositoryUrl = repositoryUrl;
Status = BuildStatus.Created;
}
public void BuildSuccess(IClock clock)
{
BuildError = "";
BuildTime = clock.Now;
Status = BuildStatus.Successed;
}
public void BuildFailed(IClock clock, Exception ex)
{
BuildTime = clock.Now;
Status = BuildStatus.Failed;
BuildError = GetBaseExceptionError(ex);
}
private static string GetBaseExceptionError(Exception ex)
{
if (ex == null)
{
return "";
}
return string.Concat(ex?.Message ?? "", GetBaseExceptionError(ex?.InnerException));
}
}
}

13
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/ProjectItem.cs

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
using Volo.Abp.Domain.Entities;
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public class ProjectItem : AggregateRoot<Guid>
{
public virtual string Path { get; protected set; }
public virtual string Name { get; protected set; }
}
}

154
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/ProjectManager.cs

@ -0,0 +1,154 @@
using ICSharpCode.SharpZipLib.Zip;
using LINGYUN.Abp.ProjectManagement.Templates;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Cli;
using Volo.Abp.Domain.Services;
using Volo.Abp.IO;
using Volo.Abp.Uow;
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public class ProjectManager : DomainService
{
protected IProjectRepository ProjectRepository { get; }
protected ITemplateRepository TemplateRepository { get; }
protected CliService Service => LazyServiceProvider.LazyGetRequiredService<CliService>();
protected IUnitOfWorkManager UnitOfWorkManager => LazyServiceProvider.LazyGetRequiredService<IUnitOfWorkManager>();
public ProjectManager(
IProjectRepository projectRepository,
ITemplateRepository templateRepository)
{
ProjectRepository = projectRepository;
TemplateRepository = templateRepository;
}
public virtual async Task<Project> CreateAsync(Project project)
{
if (await ProjectRepository.CheckNameAsync(project.Name))
{
throw new BusinessException("");
}
project = await ProjectRepository.InsertAsync(project);
return project;
}
public virtual async Task<Project> UpdateAsync(Project project)
{
project = await ProjectRepository.UpdateAsync(project);
return project;
}
public virtual async Task DeleteAsync(Project project)
{
await ProjectRepository.DeleteAsync(project);
}
public virtual async Task<bool> BuildAsync(Project project)
{
using var unitOfWork = UnitOfWorkManager.Begin();
try
{
var projectTemplate = await ProjectRepository.FindTemplateAsync(project.Id);
var template = await TemplateRepository.GetAsync(projectTemplate.TemplateId);
// 组成参数列表
var projectBuildArgs = projectTemplate.Options
.Select(x => new { x.Key, x.Value });
if (projectTemplate.ExtraProperties.Any())
{
projectBuildArgs = projectBuildArgs.Union(
projectTemplate.ExtraProperties
.Select(x => new { x.Key, Value = x.Value?.ToString() ?? "" }));
}
// 检查必须参数
var ignoredArgs = template.GetMustOptions().Where(x => !projectBuildArgs.Any(y => x.Key.Equals(y.Key)));
if (ignoredArgs.Any())
{
project.BuildFailed(Clock, new Exception($"构建项目失败,缺失必要的参数: {ignoredArgs.Select(x => x.Key).JoinAsString(";")}"));
}
else
{
// 取项目ID作为存储路径
var path = Path.Combine(
Directory.GetCurrentDirectory(),
project.Id.ToString());
var argsList = new List<string>
{
"new", // new命令
"--skip-cli-version-check", // 不检查cli版本
project.Name,
"-o", // 输出目录
path
};
foreach (var option in projectBuildArgs)
{
argsList.Add(option.Key);
if (!option.Value.IsNullOrWhiteSpace())
{
var value = option.Value;
if (value.Contains(" "))
{
if (!value.StartsWith("\""))
{
value = "\"" + value;
}
if (!value.EndsWith("\""))
{
value += "\"";
}
}
argsList.Add(value);
}
}
await Service.RunAsync(argsList.ToArray());
project.BuildSuccess(Clock);
}
}
catch (Exception ex)
{
project.BuildFailed(Clock, ex);
}
await ProjectRepository.UpdateAsync(project);
await unitOfWork.CompleteAsync();
return project.Status == BuildStatus.Successed;
}
public virtual async Task AddPackagesAsync()
{
}
public virtual async Task<byte[]> DownloadAsync(Project project)
{
var projectDir = Path.Combine(
Directory.GetCurrentDirectory(),
project.Id.ToString());
var projectZipFile = Path.Combine(projectDir, project.Name + ".zip");
FileHelper.DeleteIfExists(projectZipFile);
if (!Directory.Exists(projectDir))
{
throw new BusinessException("");
}
var zip = new FastZip();
zip.CreateZip(projectZipFile, projectDir, true, null);
return await FileHelper.ReadAllBytesAsync(projectZipFile);
}
}
}

22
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/ProjectOptions.cs

@ -0,0 +1,22 @@
using System;
using Volo.Abp.Domain.Entities;
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public class ProjectOptions : Entity<int>
{
public virtual Guid ProjectId { get; protected set; }
public virtual string Key { get; protected set; }
public virtual string Value { get; protected set; }
protected ProjectOptions() { }
public ProjectOptions(
Guid projectId,
string key,
string value = "")
{
ProjectId = projectId;
Key = key;
Value = value;
}
}
}

26
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Projects/ProjectTemplate.cs

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Volo.Abp.Domain.Entities;
namespace LINGYUN.Abp.ProjectManagement.Projects
{
public class ProjectTemplate : AggregateRoot<Guid>
{
public virtual Guid ProjectId { get; protected set; }
public virtual Guid TemplateId { get; protected set; }
public virtual ICollection<ProjectOptions> Options { get; protected set; }
protected ProjectTemplate() { }
public ProjectTemplate(
Guid id,
Guid projectId,
Guid templateId)
: base(id)
{
ProjectId = projectId;
TemplateId = templateId;
Options = new Collection<ProjectOptions>();
}
}
}

14
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Templates/ITemplateRepository.cs

@ -0,0 +1,14 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace LINGYUN.Abp.ProjectManagement.Templates
{
public interface ITemplateRepository : IRepository<Template, Guid>
{
Task<Template> FindByNameAsync(
string name,
CancellationToken cancellationToken = default);
}
}

20
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Templates/ITemplateRepositoryExtensions.cs

@ -0,0 +1,20 @@
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
namespace LINGYUN.Abp.ProjectManagement.Templates
{
public static class ITemplateRepositoryExtensions
{
public static async Task<Template> GetByNameAsync(
this ITemplateRepository repository,
string name,
CancellationToken cancellationToken = default)
{
var template = await repository.FindByNameAsync(name, cancellationToken);
return template ??
throw new EntityNotFoundException(typeof(Template), name);
}
}
}

28
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Templates/Template.cs

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Volo.Abp.Domain.Entities;
namespace LINGYUN.Abp.ProjectManagement.Templates
{
public class Template : AggregateRoot<Guid>
{
public virtual string Name { get; protected set; }
public virtual ICollection<TemplateOptions> Options { get; protected set; }
protected Template() { }
public Template(
Guid id,
string name)
: base(id)
{
Name = name;
Options = new Collection<TemplateOptions>();
}
public IEnumerable<TemplateOptions> GetMustOptions()
{
return Options.Where(x => !x.Optional);
}
}
}

30
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.Domain/LINGYUN/Abp/ProjectManagement/Templates/TemplateOptions.cs

@ -0,0 +1,30 @@
using System;
using Volo.Abp.Domain.Entities;
namespace LINGYUN.Abp.ProjectManagement.Templates
{
public class TemplateOptions : AggregateRoot<Guid>
{
public virtual bool Optional { get; protected set; }
public virtual string Key { get; protected set; }
public virtual string FullKey { get; protected set; }
public virtual OptionsType Type { get; protected set; }
public virtual string Description { get; protected set; }
protected TemplateOptions() { }
public TemplateOptions(
Guid id,
string key,
string fullKey,
bool optional = true,
OptionsType type = OptionsType.Empty,
string description = "")
: base(id)
{
Key = key;
FullKey = fullKey;
Optional = optional;
Type = type;
Description = description;
}
}
}

14
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.EntityFrameworkCore/LINGYUN.Abp.ProjectManagement.EntityFrameworkCore.csproj

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.EntityFrameworkCore" Version="4.2.1" />
</ItemGroup>
</Project>

12
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.EntityFrameworkCore/LINGYUN/Abp/ProjectManagement/AbpProjectManagementEntityFrameworkCoreModule.cs

@ -0,0 +1,12 @@
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.ProjectManagement.EntityFrameworkCore
{
[DependsOn(
typeof(AbpProjectManagementDomainModule),
typeof(AbpEntityFrameworkCoreModule))]
public class AbpProjectManagementEntityFrameworkCoreModule : AbpModule
{
}
}

18
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.HttpApi/LINGYUN.Abp.ProjectManagement.HttpApi.csproj

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="4.2.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.ProjectManagement.Application.Contracts\LINGYUN.Abp.ProjectManagement.Application.Contracts.csproj" />
</ItemGroup>
</Project>

35
aspnet-core/modules/project/LINGYUN.Abp.ProjectManagement.HttpApi/LINGYUN/Abp/ProjectManagement/AbpProjectManagementHttpApiModule.cs

@ -0,0 +1,35 @@
using LINGYUN.Abp.ProjectManagement.Localization;
using Localization.Resources.AbpUi;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.ProjectManagement
{
[DependsOn(
typeof(AbpAspNetCoreMvcModule),
typeof(AbpProjectManagementApplicationContractsModule))]
public class AbpProjectManagementHttpApiModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<IMvcBuilder>(mvcBuilder =>
{
mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpProjectManagementHttpApiModule).Assembly);
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Get<AbpProjectManagementResource>()
.AddBaseTypes(
typeof(AbpUiResource)
);
});
}
}
}
Loading…
Cancel
Save