Feature/launcher provider create db#694
Conversation
Views больше не регистрируются, они разворачиваются через DataTemplates в LauncherApp.axaml по типу VM Корневые страницы (Login, DataBases, BaseManagement, UserManagement) добавляются при создании и не удаляются. Дополнительные страницы добавляются в конец через PushPage и удаляются PopPage/PopToRoot и прогресс создания базы
перевёл обратно на старый маппинг страниц
Делает то же, что MySqlDbCreateModel для MariaDB, но физически выполняется на стороне облака: первый gRPC-вызов CreateDataBase создаёт пустую схему; второй FillDataBase прогоняет SQL-скрипт и шлёт прогресс назад. Каждое сообщение стрима транслируется в IProgressBarDisplayable, поэтому wizard-страница лаунчера выглядит идентично сценарию с MariaDB. разделил интерфейс создания базы, для гтк, и ее наполнения моделью
…одействия Адаптер, превращающий пару (CreationScript, UpdateConfiguration), которые исторически регистрируются в Autofac-контейнере проекта-потребителя как AsSelf, в реализацию IDbScriptsConfiguration. Нужен для GTK-десктоп-флоу: UpdaterDBAutofacModule → UserCreateDbController → MySqlDbCreateModel требуют IDbScriptsConfiguration, а сами приложения по-прежнему поставляют только CreationScript/UpdateConfiguration Адаптер избавляет их от необходимости менять регистрацию контейнера UpdateConfiguration опционален — если приложение его не регистрирует, отдаём пустой Конструирую MySqlDbCreateModel в UserCreateDbController явно — без Autofac TypedParameter, которым раньше прокидывался IDbCreateController. Теперь модель получает все сессионные зависимости в свой ctor.
Gankov
left a comment
There was a problem hiding this comment.
В Целом надо созвонится обсудить. Мне кажется что решение преусложенно. Оно вносит кучу каких то не стнадрартных подходов, пока не понимаю зачем. Будет время звони.
| throw new NotImplementedException(); | ||
| if(Dispatcher.UIThread.CheckAccess()) | ||
| throw new InvalidOperationException( | ||
| "Синхронный Question нельзя вызывать из UI-потока — это приведёт к дедлоку. Используйте QuestionAsync."); |
There was a problem hiding this comment.
Надо обсудить это решение. Если честно я не совсем понимю. Как вообще этот интерфейс может быть асинхронным. Если он по сути должен ждать пока пользователь кликнет чтобы получить результат.
| public string ConnectionString { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } | ||
|
|
||
| public bool IsConnected => throw new NotImplementedException(); | ||
| public int BaseId { get; private set; } |
There was a problem hiding this comment.
Не согласен, с решением, по сути ты смешиваешь зачем то 2 различные функциональности, вход в саму админку сервера и вход в базу. Просто в моем представлении у IDbProvider не может быть базы в принцепе. Или я не понял задумки.
|
|
||
| namespace QS.Cloud.Client.DataBase { | ||
| public class QsCloudScriptsConfiguration : IDbScriptsConfiguration { | ||
| private string ResourceName = "QS.Cloud.Client.Scripts.new_empty.sql"; |
There was a problem hiding this comment.
Как в библиотеках может быть такой ресурс?
это задается внешним проектом.
| var configuration = new UpdateConfiguration(); | ||
|
|
||
| configuration.AddUpdate( | ||
| new Version(1, 7), |
There was a problem hiding this comment.
То же самое, что это вообще может делать в библиотеках?
| @@ -0,0 +1,779 @@ | |||
| -- phpMyAdmin SQL Dump | |||
There was a problem hiding this comment.
Этого не может быть в библиотеках, ты чего?
| SaveLastSelectedDatabase(); | ||
|
|
||
| // Определяем, нужно ли закрывать лаунчер через Shutdown | ||
| // В standalone режиме учитываем галочку ShouldCloseLauncherAfterStart | ||
| // В in-process режиме НЕ делаем shutdown (возвращаем false) |
There was a problem hiding this comment.
Почему удаляешь этот важный комментарий?
| /// Один шаг пайплайна создания базы. Settings-VM собирает список таких фаз | ||
| /// и передаёт его в Progress-VM, который выполняет их последовательно. | ||
| /// </summary> | ||
| public sealed class DbCreationPhase { |
There was a problem hiding this comment.
Зачем для этого целый класс?
Это делает прогресс страницу универсальной, просто атомарная операция, мне кажется, классы и нужны, чтобы инкапсулировать подобную логику.
| <PackageReference Include="ReactiveUI" Version="22.3.1" /> | ||
| </ItemGroup> | ||
| <ItemGroup> | ||
| <ProjectReference Include="..\..\Insider.Desktop\Insider.Desktop.csproj" /> |
There was a problem hiding this comment.
Как может работать такая зависимость?
Библиотека не может зависить от проекта. это просто тупо поломает сборку библиотек.
| { | ||
| /// <summary> | ||
| /// Интерфейс позволяющий управлять прогресс баром не зависимо от графического тул кита. | ||
| /// </summary> |
There was a problem hiding this comment.
Почему опять удаляешь комменатарии?
|
|
||
| namespace QS.DBScripts | ||
| { | ||
| public class DbScriptsConfigurationAdapter : IDbScriptsConfiguration |
There was a problem hiding this comment.
Очень сомнительное назначение класса. Зачем он понадобился?
No description provided.