Skip to content

Feature/launcher provider create db#694

Open
J0shlerB0y wants to merge 13 commits into
developfrom
feature/LauncherProviderCreateDb
Open

Feature/launcher provider create db#694
J0shlerB0y wants to merge 13 commits into
developfrom
feature/LauncherProviderCreateDb

Conversation

@J0shlerB0y
Copy link
Copy Markdown
Contributor

No description provided.

 Views больше не регистрируются, они разворачиваются через DataTemplates в LauncherApp.axaml по типу VM

Корневые страницы (Login, DataBases, BaseManagement, UserManagement) добавляются при создании и не удаляются. Дополнительные страницы добавляются в конец через PushPage и удаляются PopPage/PopToRoot

 и прогресс создания базы
перевёл обратно на старый маппинг страниц
Делает то же, что MySqlDbCreateModel
для MariaDB, но физически выполняется на стороне облака:
первый gRPC-вызов CreateDataBase создаёт пустую схему;
второй FillDataBase прогоняет SQL-скрипт и шлёт
 прогресс назад. Каждое сообщение стрима транслируется в
 IProgressBarDisplayable, поэтому wizard-страница лаунчера
 выглядит идентично сценарию с MariaDB.

разделил интерфейс создания базы, для гтк, и ее наполнения моделью
@J0shlerB0y J0shlerB0y requested a review from Gankov as a code owner May 6, 2026 18:30
J0shlerB0y added 3 commits May 6, 2026 22:31
…одействия

Адаптер, превращающий пару (CreationScript, UpdateConfiguration), которые исторически регистрируются в Autofac-контейнере проекта-потребителя как AsSelf, в реализацию IDbScriptsConfiguration. Нужен для GTK-десктоп-флоу: UpdaterDBAutofacModule → UserCreateDbController → MySqlDbCreateModel требуют IDbScriptsConfiguration, а сами приложения по-прежнему поставляют только CreationScript/UpdateConfiguration
Адаптер избавляет их от необходимости менять регистрацию контейнера
UpdateConfiguration опционален — если приложение его не регистрирует, отдаём пустой

 Конструирую MySqlDbCreateModel в UserCreateDbController явно — без Autofac TypedParameter, которым раньше прокидывался IDbCreateController. Теперь модель получает все сессионные зависимости в свой ctor.
Copy link
Copy Markdown
Member

@Gankov Gankov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В Целом надо созвонится обсудить. Мне кажется что решение преусложенно. Оно вносит кучу каких то не стнадрартных подходов, пока не понимаю зачем. Будет время звони.

throw new NotImplementedException();
if(Dispatcher.UIThread.CheckAccess())
throw new InvalidOperationException(
"Синхронный Question нельзя вызывать из UI-потока — это приведёт к дедлоку. Используйте QuestionAsync.");
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Надо обсудить это решение. Если честно я не совсем понимю. Как вообще этот интерфейс может быть асинхронным. Если он по сути должен ждать пока пользователь кликнет чтобы получить результат.

public string ConnectionString { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

public bool IsConnected => throw new NotImplementedException();
public int BaseId { get; private set; }
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не согласен, с решением, по сути ты смешиваешь зачем то 2 различные функциональности, вход в саму админку сервера и вход в базу. Просто в моем представлении у IDbProvider не может быть базы в принцепе. Или я не понял задумки.


namespace QS.Cloud.Client.DataBase {
public class QsCloudScriptsConfiguration : IDbScriptsConfiguration {
private string ResourceName = "QS.Cloud.Client.Scripts.new_empty.sql";
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как в библиотеках может быть такой ресурс?
это задается внешним проектом.

var configuration = new UpdateConfiguration();

configuration.AddUpdate(
new Version(1, 7),
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

То же самое, что это вообще может делать в библиотеках?

@@ -0,0 +1,779 @@
-- phpMyAdmin SQL Dump
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Этого не может быть в библиотеках, ты чего?

SaveLastSelectedDatabase();

// Определяем, нужно ли закрывать лаунчер через Shutdown
// В standalone режиме учитываем галочку ShouldCloseLauncherAfterStart
// В in-process режиме НЕ делаем shutdown (возвращаем false)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему удаляешь этот важный комментарий?

/// Один шаг пайплайна создания базы. Settings-VM собирает список таких фаз
/// и передаёт его в Progress-VM, который выполняет их последовательно.
/// </summary>
public sealed class DbCreationPhase {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем для этого целый класс?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем для этого целый класс?

Это делает прогресс страницу универсальной, просто атомарная операция, мне кажется, классы и нужны, чтобы инкапсулировать подобную логику.

<PackageReference Include="ReactiveUI" Version="22.3.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Insider.Desktop\Insider.Desktop.csproj" />
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как может работать такая зависимость?
Библиотека не может зависить от проекта. это просто тупо поломает сборку библиотек.

{
/// <summary>
/// Интерфейс позволяющий управлять прогресс баром не зависимо от графического тул кита.
/// </summary>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему опять удаляешь комменатарии?


namespace QS.DBScripts
{
public class DbScriptsConfigurationAdapter : IDbScriptsConfiguration
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Очень сомнительное назначение класса. Зачем он понадобился?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants