Skip to content

Add Blob Storage infrastructure service to Cellix framework and implement consumer abstraction pattern #251

@nnoce14

Description

@nnoce14

Add Blob Storage Infrastructure Service

Summary

Add Blob Storage as a first-class Cellix infrastructure service.

This should refine the legacy OwnerCommunity blob storage implementation into a Cellix-quality framework package, while also establishing the general pattern for how application code consumes infrastructure services through scoped contracts.

Legacy reference:

https://github.com/simnova/ownercommunity/tree/main/data-access/seedwork/services-seedwork-blob-storage-az

Goal

Create a reusable framework package:

  • @cellix/service-blob-storage

And an application-facing consumer package:

  • @ocom/service-blob-storage

The framework package should provide the general Blob Storage implementation.

The consumer package should define the application-specific contract that OwnerCommunity needs and expose only that contract to application code.

Core Requirement

Application code should not receive the full framework service API by default.

Instead, the consumer package should define the contract it needs, wrap or adapt the framework service, and expose only the approved methods through ApiContext.

This pattern should be reusable for future Cellix infrastructure services.

Scope

Update or add:

  • packages/cellix/service-blob-storage
  • packages/ocom/service-blob-storage
  • packages/ocom/context-spec
  • apps/api/src/index.ts

When working on @cellix/* packages, use the cellix-tdd skill.

Requirements

  • Add @cellix/service-blob-storage as the reusable framework package.
  • Use the legacy implementation as a reference, not a direct copy.
  • Support the core Blob Storage operations needed by OwnerCommunity.
  • Keep Azure SDK details behind the framework package boundary.
  • Add @ocom/service-blob-storage as the application consumer package.
  • Define an OwnerCommunity-specific Blob Storage contract in the consumer package.
  • Ensure application code only sees the scoped consumer contract.
  • Register the service in apps/api/src/index.ts.
  • Expose the scoped service on ApiContext through @ocom/context-spec.
  • Ensure the service can be used by application services, integration event handlers, Azure Functions handlers, or other application-side code that receives context.
  • Add tests for the framework package, consumer package, and context/bootstrap wiring.
  • Do not require live Azure resources for normal test execution.

Non-Goals

  • Do not migrate every legacy blob usage in this task.
  • Do not expose the full Azure SDK to application code.
  • Do not hard-code OwnerCommunity behavior into the @cellix package.
  • Do not build a large new dependency injection framework unless the existing bootstrap pattern already supports it.
  • Do not expose every framework method through ApiContext by default.

Acceptance Criteria

  • @cellix/service-blob-storage exists and provides reusable Blob Storage infrastructure.
  • @ocom/service-blob-storage exists and defines the OwnerCommunity-facing Blob Storage contract.
  • The consumer package adapts the framework service into the scoped application contract.
  • ApiContext exposes the scoped consumer contract, not the full framework service.
  • apps/api/src/index.ts registers the Blob Storage service.
  • Tests prove framework behavior, consumer contract scoping, and bootstrap/context integration.
  • Documentation briefly explains the framework package, consumer package, and scoped infrastructure contract pattern.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No fields configured for Task.

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions