private async Task ApplyTemplateAsync(IAppEntity app, string?template)
        {
            if (string.IsNullOrWhiteSpace(template))
            {
                return;
            }

            var repository = await templatesClient.GetRepositoryUrl(template);

            if (string.IsNullOrEmpty(repository))
            {
                log.LogWarning(w => w
                               .WriteProperty("message", "Template not found.")
                               .WriteProperty("template", template));
                return;
            }

            using (var cliLog = new StringLogger(template, log))
            {
                var session = CreateSession(app);

                var syncService = await CreateSyncServiceAsync(repository, session);

                var syncOptions = new SyncOptions();

                var targets = new ISynchronizer[]
                {
                    new AppSynchronizer(cliLog),
                    new AssetFoldersSynchronizer(cliLog),
                    new AssetsSynchronizer(cliLog),
                    new RulesSynchronizer(cliLog),
                    new SchemasSynchronizer(cliLog),
                    new WorkflowsSynchronizer(cliLog),
                };

                foreach (var target in targets.OrderBy(x => x.Name))
                {
                    await target.ImportAsync(syncService, syncOptions, session);
                }
            }
        }