[E9-3b-ui] desktop: форма publishPackage в Столе разработчика #87

Closed
claude wants to merge 0 commits from feat/E9-3b-ui-publish-package into feat/E9-3b-sub-subscribe
Owner

Story 9.3.b-ui. Закрывает UI-петлю Эпика 9 «MVP demo-app pilot».

Stacked поверх PR #78 (E9-3b-sub) → gitea авто-перетарджетит после merge цепочки в umbrella apps-catalog.

Что добавлено

SDK @coopenomics/sdk

  • mutations/extensions/publishPackage.ts — wrapper над Mutation.publishPackage с селектором {status, requestId, error}.
  • mutations/extensions/publishRelease.ts — wrapper над Mutation.publishRelease с селектором {status, requestId, transactionId, error}. Готов к подключению на отдельной странице публикации релизов (next story 9.3.b-rel-ui).
  • mutations/extensions/index.ts: добавлены PublishPackage / PublishRelease в barrel.
  • Codegen прогнан (pnpm generate-schema → generate-client → sdk build) — zeus подхватил PublishPackageInputDTO / PublishReleaseInputDTO.

Desktop

  • features/PublishPackage/{api,model}/index.ts — каноническая пара FSD по mono-ai-N convention:
    • api: тонкая обёртка над client.Mutation(Mutations.Extensions.PublishPackage.mutation, {variables:{data}}).
    • model: IPublishPackageInput = Mutations.Extensions.PublishPackage.IInput['data'] + composable usePublishPackage() с состояниями isSubmitting / lastResult / lastError / submit.
  • pages/DeveloperPublishReleasePage.vue: форма из BaseForm + BaseInput.
    • Поля: packageId (@scope/name), ownerUsername (Antelope-name 1..12 из [a-z1-5.]), compatibleSubnets (textarea chain_id 64 hex).
    • Pre-submit валидация регуляркой; ошибки кладутся в errors. → :error на BaseInput.
    • BaseBanner variant='warn' если роль сессии ≠ chairman; submit-кнопка disabled.
    • BaseBanner variant='pos' при applied (с requestId), variant='warn' при conflict (с подсказкой использовать publishRelease).
    • Session через useSessionStore (pinia auto-unwrap, без .value).

Что НЕ делалось

  • Форма publishRelease (manifest JSON + sha256) — отдельная страница; SDK-mutation для неё уже готова.
  • Refresh списка «Мои пакеты» после applied — следующая итерация.
  • E2E с реальным ca-admin — отдельный smoke прогон после merge.

Canon-checks

  • Никаких raw GraphQL-строк в desktop ✓ (всё через Mutations.Extensions.PublishPackage из SDK).
  • data передаётся целиком: variables: { data }, без разворачивания полей ✓.
  • Тип IInput через IInput['data'] ✓.
  • BaseInput / BaseButton / BaseCard / BaseBanner / BaseForm из shared/ui/base ✓.
  • Цвет — только variant-prop'ы (warn/pos/default), без сырых hex ✓.
Story 9.3.b-ui. Закрывает UI-петлю Эпика 9 «MVP demo-app pilot». Stacked поверх PR #78 (E9-3b-sub) → gitea авто-перетарджетит после merge цепочки в umbrella apps-catalog. ## Что добавлено ### SDK @coopenomics/sdk - mutations/extensions/publishPackage.ts — wrapper над Mutation.publishPackage с селектором {status, requestId, error}. - mutations/extensions/publishRelease.ts — wrapper над Mutation.publishRelease с селектором {status, requestId, transactionId, error}. Готов к подключению на отдельной странице публикации релизов (next story 9.3.b-rel-ui). - mutations/extensions/index.ts: добавлены PublishPackage / PublishRelease в barrel. - Codegen прогнан (pnpm generate-schema → generate-client → sdk build) — zeus подхватил PublishPackageInputDTO / PublishReleaseInputDTO. ### Desktop - features/PublishPackage/{api,model}/index.ts — каноническая пара FSD по mono-ai-N convention: - api: тонкая обёртка над client.Mutation(Mutations.Extensions.PublishPackage.mutation, {variables:{data}}). - model: IPublishPackageInput = Mutations.Extensions.PublishPackage.IInput['data'] + composable usePublishPackage() с состояниями isSubmitting / lastResult / lastError / submit. - pages/DeveloperPublishReleasePage.vue: форма из BaseForm + BaseInput. - Поля: packageId (@scope/name), ownerUsername (Antelope-name 1..12 из [a-z1-5.]), compatibleSubnets (textarea chain_id 64 hex). - Pre-submit валидация регуляркой; ошибки кладутся в errors.<field> → :error на BaseInput. - BaseBanner variant='warn' если роль сессии ≠ chairman; submit-кнопка disabled. - BaseBanner variant='pos' при applied (с requestId), variant='warn' при conflict (с подсказкой использовать publishRelease). - Session через useSessionStore (pinia auto-unwrap, без .value). ## Что НЕ делалось - Форма publishRelease (manifest JSON + sha256) — отдельная страница; SDK-mutation для неё уже готова. - Refresh списка «Мои пакеты» после applied — следующая итерация. - E2E с реальным ca-admin — отдельный smoke прогон после merge. ## Canon-checks - Никаких raw GraphQL-строк в desktop ✓ (всё через Mutations.Extensions.PublishPackage из SDK). - data передаётся целиком: variables: { data }, без разворачивания полей ✓. - Тип IInput через IInput['data'] ✓. - BaseInput / BaseButton / BaseCard / BaseBanner / BaseForm из shared/ui/base ✓. - Цвет — только variant-prop'ы (warn/pos/default), без сырых hex ✓.
ant added this to the AppsCatalog project 2026-06-05 07:51:12 +00:00
Author
Owner

Замещён консолидированным PR #117 (вся работа apps-catalog/Federation в одной ветке на dev). Закрываю как superseded.

Замещён консолидированным PR #117 (вся работа apps-catalog/Federation в одной ветке на dev). Закрываю как superseded.
claude closed this pull request 2026-06-09 12:01:46 +00:00

Pull request closed

Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: C9S/mono#87