Files
console_spo_utils/library_spo_utils/Services/ProjectDocLibraryService.cs
T
2023-06-21 10:38:57 +02:00

86 lines
2.6 KiB
C#

using library_spo_utils.Constants;
using library_spo_utils.Interfaces.Services;
using Microsoft.Extensions.Logging;
using Microsoft.SharePoint.Client;
namespace library_spo_utils.Services;
internal class ProjectDocLibraryService : IProjectDocLibraryService
{
private readonly ILogger<ProjectDocLibraryService> logger;
private readonly IRightsService rightsService;
public ProjectDocLibraryService(
ILogger<ProjectDocLibraryService> logger,
IRightsService rightsService)
{
this.logger = logger;
this.rightsService = rightsService;
}
public void Create(string ssProjectTitle, ClientContext ctx)
{
try
{
BuildProjectDocumentLibrary(ssProjectTitle, ctx);
BuildProjectFolders(ssProjectTitle, ctx);
}
catch (Exception ex)
{
logger.LogError(ex, "Create Doc Lib");
}
}
private void BuildProjectFolders(string projName, ClientContext clientContext)
{
var projectFolders = Folders.GetProjectFolders(projName);
foreach (var (folderName, folderPath) in projectFolders)
{
logger.LogInformation($"> Inizializzata la fase di {folderName} in {folderPath}.");
var list = clientContext.Web.Lists.GetByTitle(folderPath);
var info = new ListItemCreationInformation
{
UnderlyingObjectType = FileSystemObjectType.Folder,
LeafName = folderName
};
var newItem = list.AddItem(info);
newItem["Title"] = folderName;
newItem.Update();
clientContext.ExecuteQuery();
logger.LogInformation($"> {folderName} creato con successo in {folderPath}.");
}
}
private void BuildProjectDocumentLibrary(string projName, ClientContext clientContext)
{
var docLibNames = Folders.GetProjectDocLib(projName);
foreach (var (libraryName, libraryType) in docLibNames)
{
logger.LogInformation($"> Inizializzata la fase di creazione '{libraryName}'.");
var web = clientContext.Web;
clientContext.Load(web);
var lci = new ListCreationInformation
{
Title = libraryName,
TemplateType = (int)libraryType
};
web.Lists.Add(lci);
clientContext.ExecuteQuery();
if (libraryName.Contains("Commerciale"))
{
rightsService.DomainGroupRights(clientContext, string.Empty, libraryName);
}
logger.LogInformation($"> '{libraryName}' è stato creato con successo.");
}
}
}