Alex Ant 540c4ceab1 feat(marketplace): Story 1.3 — доступ к Столу по членству (#371)
* feat(marketplace): Story 1.2 — регистрация оферты в AgreementRegistry

Перепиcано через существующий core-механизм `AgreementRegistrationPort`
(закрытый PR #369 шёл через параллельный coop_cpp_registry — техдолг).
Аналогично тому, как Capital регистрирует свои оферты —
register-capital-in-agreement-registry.ts.

- constants/marketplace-agreement-ids.ts — MARKETPLACE_EXTENSION_NAME='market',
  MARKETPLACE_OFFER_AGREEMENT_ID='order_table_offer',
  MARKETPLACE_AGREEMENT_TYPE='order_table',
  MARKETPLACE_OFFER_TEMPLATE_REGISTRY_ID=0 (placeholder; Story 1.7 заменит
  на реальный registry_id из платформенной document factory, по аналогии с
  Cooperative.Registry.GeneratorOffer/BlagorostOffer).
- application/registration/register-marketplace-in-agreement-registry.ts —
  чистая функция: при ID>0 зовёт port.registerAgreement с одной офертой
  (applicable_account_types: individual + entrepreneur, order: 7); при ID<=0
  возвращает false без вызовов. Programs marketplace не регистрирует —
  Стол заказов ЦПП без program-надстройки.
- marketplace-extension.module — @Inject(AGREEMENT_REGISTRATION_PORT) +
  вызов registerMarketplaceInAgreementRegistry в initialize после initBucket;
  info-лог при skip и при успешной регистрации, error при exception.

Tests:
- tests/unit/marketplace/marketplace-plugin-register.test.ts (3 кейса):
  чистая функция — port не вызван пока placeholder=0, константы согласованы,
  programs не регистрируются.
- tests/unit/marketplace/marketplace-plugin-initialize.test.ts — обновлён
  конструктор (добавлен makeAgreementPort стаб); 4 кейса Story 1.1
  продолжают проходить.

10/10 unit-тестов зелёных, tsc 0 ошибок.

Ref: blago/.../components/3-minimalnyy-produkt/_bmad-output/implementation-artifacts/spec-1-2-cpp-registry-link.md
(spec будет переписан вместе с blago-issue после merge).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(marketplace): MARKETPLACE_AGREEMENT_TYPE = 'marketplace' (валидный eosio::name)

Per review PR #370: 'order_table' содержит '_' — не валидный eosio::name
(допустимы только [.a-z1-5], max 12). В lib/consts.hpp уже определено
program-имя `_marketplace_program = "marketplace"_n` (program_id=2), его
и принимает `soviet::coagreements`/`sndagreement`.

- MARKETPLACE_AGREEMENT_TYPE: 'order_table' → 'marketplace'.
- MARKETPLACE_OFFER_AGREEMENT_ID: 'order_table_offer' → 'marketplace_offer'
  (консистентно с 'generator_offer'/'blagorost_offer' у Capital).
- AgreementRegistrationSpec.agreement_type — JSDoc уточнён: должен быть
  eosio::name (max 12, без `_`), пример обновлён.
- Тест проверяет eosio::name regex `/^[.a-z1-5]{1,12}$/` для type.

10/10 unit зелёные, tsc 0 ошибок.

* feat(marketplace): Story 1.3 — доступ к Столу заказов по членству

Реализует:
- MarketplaceMembershipGuard: 401 (нет JWT), 403 (status != active),
  server-secret bypass, формирует request.currentMember и
  ctx.currentMember для GraphQL.
- mapUserRoleToCoreRoles: user.role → core_roles[]
  - 'user'     → ['User']
  - 'member'   → ['User', 'Member']
  - 'chairman' → ['User', 'Member', 'Chairman']
  - 'admin'/unknown → []
- @CurrentMarketplaceMember decorator + MarketplaceCurrentMemberDTO
  ({username, core_roles[], marketplace_roles[]}).
- Query marketplaceWhoAmI(): возвращает контекст текущего пайщика для
  фронта (UI открывается на primary столе по роли).
- marketplace_roles[] пока пустой — наполняется в Story 1.6.

Тесты: 18/18 зелёных (5 mapper + 6 guard + 4 initialize + 3 register).
tsc 0 ошибок.

---------

Co-authored-by: coopops <coopos@coopenomics.world>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 21:45:27 +05:00
2026-04-11 00:44:16 +05:00
2026-01-20 21:23:02 +05:00
2026-04-04 00:13:22 +05:00
2024-07-11 15:33:17 +05:00
2026-05-04 11:23:58 +00:00
2026-01-21 21:49:35 +05:00
2026-03-29 17:50:44 +05:00
2026-04-04 00:13:22 +05:00
2026-05-13 21:44:14 +05:00
2025-10-14 22:06:23 +05:00
2026-05-04 11:23:58 +00:00
2025-07-03 18:03:31 +05:00
2026-02-28 12:57:15 +05:00

Цифровой Кооператив

License Node pnpm

Платформа «Цифровой Кооператив» — комплексное программное обеспечение для управления кооперативными организациями на основе блокчейна EOSIO. Система обеспечивает полный цикл управления кооперативом: от регистрации пайщиков и электронного документооборота до проведения собраний и финансового учёта. Построена на принципах прозрачности, децентрализации и простой электронной подписи.

Проект является частью экосистемы Кооперативная Экономика.

Архитектура

Компонент Пакет Описание
boot @coopenomics/boot CLI для инициализации и управления блокчейн-инфраструктурой
cleos @coopenomics/cleos Утилита командной строки для работы с блокчейн-кошельком
contracts @coopenomics/contracts Смарт-контракты EOSIO на C++
controller @coopenomics/controller GraphQL API сервер (NestJS)
cooptypes cooptypes Общие типы и интерфейсы блокчейн-контрактов
desktop @coopenomics/desktop Рабочий стол кооператива (Vue 3 + Quasar)
factory @coopenomics/factory Генератор юридических документов
migrator migrator Утилита миграции данных
notifications @coopenomics/notifications Библиотека уведомлений на основе Novu
parser @coopenomics/parser Индексатор блокчейна через State History Plugin
sdk @coopenomics/sdk TypeScript SDK для GraphQL API
setup @coopenomics/setup Мастер первоначальной настройки

Быстрый старт

Предварительные требования

  • Node.js >= 20
  • pnpm 9
  • Docker и Docker Compose
  • WeasyPrint (для генерации PDF)

Установка

pnpm install

Конфигурация

pnpm run setup

Интерактивный мастер создаст необходимые .env файлы для всех компонентов.

Запуск инфраструктуры

docker compose up -d
pnpm run reboot

Разработка

Бэкенд (controller + parser)

pnpm run dev:backend

Фронтенд (desktop)

pnpm run dev:desktop

Библиотеки (factory + cooptypes)

pnpm run dev:lib

Все сервисы одновременно

pnpm run dev:all

Примечание: установка пакетов производится только через фильтр: pnpm add <пакет> --filter <компонент>

Тестирование

# Все тесты
pnpm run test

# Юнит-тесты (cooptypes, parser, notifications)
pnpm run test:unit

# Компонентные тесты (factory)
pnpm run test:component

# Интеграционные тесты (boot + blockchain)
pnpm run test:integration

Сборка

# Библиотеки (cooptypes, factory)
pnpm run build:lib

# Смарт-контракты
pnpm run build:contracts:all

# Desktop (SSR)
pnpm --filter @coopenomics/desktop run build

Лицензия

Продукт Потребительского Кооператива «ВОСХОД» распространяется по лицензии BY-NC-SA 4.0.

Разрешено делиться, копировать и распространять материал, адаптировать и создавать производные произведения при условии указания авторства и сохранения той же лицензии. Коммерческое использование запрещено.

S
Description
No description provided
Readme 1 GiB
Languages
TypeScript 62.6%
Vue 15.1%
C++ 13.4%
Python 4.9%
JavaScript 2.2%
Other 1.6%