Skip to content

feat: add member property management - #324

Open
henry-casper wants to merge 1 commit into
feat/Implement-property-management-section-on-admin-side-of-Community-Portalfrom
feat/Implement-property-management-section-on-member-side-of-Community-Portal
Open

feat: add member property management#324
henry-casper wants to merge 1 commit into
feat/Implement-property-management-section-on-admin-side-of-Community-Portalfrom
feat/Implement-property-management-section-on-member-side-of-Community-Portal

Conversation

@henry-casper

Copy link
Copy Markdown
Contributor

No description provided.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@henry-casper
henry-casper requested a review from a team as a code owner September 1, 2026 03:58

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry @henry-casper, your pull request is larger than the review limit of 150,000 diff characters

@henry-casper
henry-casper requested a balanced review from Copilot and removed request for a team September 1, 2026 03:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds member-facing property management across authorization, GraphQL, shared UI, routing, persistence, and verification layers.

Changes:

  • Adds ownership-aware property creation, viewing, and editing.
  • Introduces reusable property UI and member routes.
  • Adds API, UI, and E2E authorization coverage.

Reviewed changes

Copilot reviewed 144 out of 148 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
apps/ui-community/mock-oidc.users.json Adds member test identities.
apps/ui-community/package.json Adds member-route dependencies.
apps/ui-community/src/App.tsx Registers member property routes.
codegen.yml Includes member GraphQL operations.
packages/ocom-verification/acceptance-api/src/contexts/member-property/notes/member-property-notes.ts Stores API scenario state.
packages/ocom-verification/acceptance-api/src/contexts/member-property/questions/member-property-state.ts Queries API property state.
packages/ocom-verification/acceptance-api/src/contexts/member-property/step-definitions/index.ts Exports API steps.
packages/ocom-verification/acceptance-api/src/contexts/member-property/step-definitions/member-property.steps.ts Implements API scenarios.
packages/ocom-verification/acceptance-api/src/contexts/member-property/tasks/arrange-member-property.ts Arranges property fixtures.
packages/ocom-verification/acceptance-api/src/contexts/member-property/tasks/become-separate-own-property-member.ts Creates secondary member persona.
packages/ocom-verification/acceptance-api/src/contexts/member-property/tasks/establish-member-property-community.ts Establishes test communities.
packages/ocom-verification/acceptance-api/src/contexts/member-property/tasks/member-property-context.ts Configures request context.
packages/ocom-verification/acceptance-api/src/contexts/member-property/tasks/member-property-operations.ts Executes property operations.
packages/ocom-verification/acceptance-api/src/contexts/member-property/tasks/member-property-personas.ts Defines authorization personas.
packages/ocom-verification/acceptance-api/src/servers/test-mongo-server.ts Supports property fixtures.
packages/ocom-verification/acceptance-api/src/shared/abilities/index.ts Exports fixture ability.
packages/ocom-verification/acceptance-api/src/shared/abilities/provision-member-property-fixture.ts Provisions member properties.
packages/ocom-verification/acceptance-api/src/step-definitions/index.ts Registers member steps.
packages/ocom-verification/acceptance-api/src/world.ts Adds member-property abilities.
packages/ocom-verification/acceptance-ui/package.json Adds UI test dependencies.
packages/ocom-verification/acceptance-ui/src/contexts/member-property/abilities/mock-member-property-backend.ts Mocks member GraphQL behavior.
packages/ocom-verification/acceptance-ui/src/contexts/member-property/notes/member-property-ui-notes.ts Stores UI scenario state.
packages/ocom-verification/acceptance-ui/src/contexts/member-property/questions/member-property-screen.ts Inspects property screens.
packages/ocom-verification/acceptance-ui/src/contexts/member-property/step-definitions/index.ts Exports UI steps.
packages/ocom-verification/acceptance-ui/src/contexts/member-property/step-definitions/member-property.steps.ts Implements UI scenarios.
packages/ocom-verification/acceptance-ui/src/contexts/member-property/tasks/member-property-screen.tsx Renders property screens.
packages/ocom-verification/acceptance-ui/src/step-definitions/index.ts Registers UI steps.
packages/ocom-verification/acceptance-ui/tsconfig.json Configures UI tests.
packages/ocom-verification/e2e-tests/src/contexts/member-property/abilities/member-property-portal-page.ts Adds property page ability.
packages/ocom-verification/e2e-tests/src/contexts/member-property/interactions/open-member-property-detail.ts Opens property details.
packages/ocom-verification/e2e-tests/src/contexts/member-property/interactions/open-member-property-directory.ts Opens property directory.
packages/ocom-verification/e2e-tests/src/contexts/member-property/interactions/record-member-property-id.ts Records created property IDs.
packages/ocom-verification/e2e-tests/src/contexts/member-property/notes/member-property-notes.ts Stores E2E state.
packages/ocom-verification/e2e-tests/src/contexts/member-property/questions/member-property-screen.ts Inspects browser state.
packages/ocom-verification/e2e-tests/src/contexts/member-property/step-definitions/index.ts Exports E2E steps.
packages/ocom-verification/e2e-tests/src/contexts/member-property/step-definitions/member-property.steps.ts Implements E2E scenarios.
packages/ocom-verification/e2e-tests/src/contexts/member-property/tasks/arrange-member-property.ts Arranges browser fixtures.
packages/ocom-verification/e2e-tests/src/contexts/member-property/tasks/establish-member-property-community.ts Establishes E2E communities.
packages/ocom-verification/e2e-tests/src/contexts/member-property/tasks/member-property-personas.ts Configures E2E personas.
packages/ocom-verification/e2e-tests/src/contexts/member-property/tasks/member-property-route.ts Navigates member routes.
packages/ocom-verification/e2e-tests/src/servers/test-mongo-server.ts Supports E2E fixtures.
packages/ocom-verification/e2e-tests/src/step-definitions/index.ts Registers E2E steps.
packages/ocom-verification/verification-shared/src/pages/index.ts Exports property page objects.
packages/ocom-verification/verification-shared/src/pages/member-properties-list.page.ts Defines list page contract.
packages/ocom-verification/verification-shared/src/pages/member-property-read-only-detail.page.ts Defines read-only page contract.
packages/ocom-verification/verification-shared/src/scenarios/property/member-property-authorization.feature Specifies authorization behavior.
packages/ocom-verification/verification-shared/src/scenarios/property/member-property-management.feature Specifies management behavior.
packages/ocom-verification/verification-shared/src/test-data/index.ts Exports property fixtures.
packages/ocom-verification/verification-shared/src/test-data/member-property-fixtures.ts Defines shared fixtures.
packages/ocom/application-services/src/contexts/property/index.ts Exports property services.
packages/ocom/application-services/src/contexts/property/property/apply-property-fields.ts Applies role-safe updates.
packages/ocom/application-services/src/contexts/property/property/create.ts Supports self-owned creation.
packages/ocom/application-services/src/contexts/property/property/ensure-property-manageable.ts Centralizes management authorization.
packages/ocom/application-services/src/contexts/property/property/ensure-property-viewable.ts Broadens property reads.
packages/ocom/application-services/src/contexts/property/property/index.ts Exposes property operations.
packages/ocom/application-services/src/contexts/property/property/property.application-service.test.ts Tests property authorization.
packages/ocom/application-services/src/contexts/property/property/query-owner-options-by-community-id.ts Restricts owner options.
packages/ocom/application-services/src/contexts/property/property/update.ts Adds ownership-aware updates.
packages/ocom/application-services/src/index.test.ts Tests request passports.
packages/ocom/application-services/src/index.ts Resolves member request identity.
packages/ocom/domain/src/domain/contexts/property/index.ts Exports property authorization types.
packages/ocom/domain/src/domain/contexts/property/property.passport.ts Defines property passport API.
packages/ocom/domain/src/domain/contexts/property/property/features/property.aggregate.feature Specifies aggregate authorization.
packages/ocom/domain/src/domain/contexts/property/property/property.aggregate.test.ts Tests aggregate behavior.
packages/ocom/domain/src/domain/contexts/property/property/property.aggregate.ts Enforces ownership capabilities.
packages/ocom/domain/src/domain/contexts/property/property/property.repository.ts Extends repository contract.
packages/ocom/domain/src/domain/iam/guest/contexts/guest.property.passport.ts Denies guest property access.
packages/ocom/domain/src/domain/iam/member/contexts/member.property.passport.ts Creates member property visas.
packages/ocom/domain/src/domain/iam/member/contexts/member.property.visa.test.ts Tests member permissions.
packages/ocom/domain/src/domain/iam/member/contexts/member.property.visa.ts Implements ownership authorization.
packages/ocom/domain/src/domain/iam/system/contexts/system.property.passport.ts Supports system permissions.
packages/ocom/domain/src/domain/iam/user/staff-user/contexts/staff-user.property.passport.ts Supports staff permissions.
packages/ocom/graphql/src/schema/types/member.resolvers.additional.test.ts Tests member projections.
packages/ocom/graphql/src/schema/types/property.resolvers.ts Exposes property operations.
packages/ocom/graphql/src/schema/types/property.resolvers.unit.test.ts Tests property resolvers.
packages/ocom/persistence/src/datasources/domain/property/property/property.repository.test.ts Tests persisted property behavior.
packages/ocom/persistence/src/datasources/domain/property/property/property.repository.ts Populates and saves references.
packages/ocom/persistence/src/datasources/readonly/community/member/member.read-repository.test.ts Tests member lookups.
packages/ocom/persistence/src/datasources/readonly/community/member/member.read-repository.ts Adds identity-based lookup.
packages/ocom/ui-community-route-admin/src/components/format-display-address.ts Reuses shared formatting.
packages/ocom/ui-community-route-admin/src/components/properties-create.tsx Adapts shared create form.
packages/ocom/ui-community-route-admin/src/components/properties-detail.tsx Adapts shared detail view.
packages/ocom/ui-community-route-admin/src/components/properties-list.tsx Adapts shared property list.
packages/ocom/ui-community-route-admin/src/components/property-form.tsx Re-exports shared form.
packages/ocom/ui-community-route-admin/src/sub-page-layout.tsx Reuses shared layout.
packages/ocom/ui-community-route-member/.storybook/main.ts Configures member Storybook.
packages/ocom/ui-community-route-member/.storybook/preview.tsx Configures story rendering.
packages/ocom/ui-community-route-member/package.json Adds route package tooling.
packages/ocom/ui-community-route-member/src/archunit-tests/frontend-architecture.test.ts Enforces frontend architecture.
packages/ocom/ui-community-route-member/src/archunit-tests/naming-conventions.test.ts Enforces naming conventions.
packages/ocom/ui-community-route-member/src/components/member-properties-access-policy.test.ts Tests route-access decisions.
packages/ocom/ui-community-route-member/src/components/member-properties-access-policy.ts Resolves member route access.
packages/ocom/ui-community-route-member/src/components/member-properties-access.context.ts Provides selected membership.
packages/ocom/ui-community-route-member/src/components/member-properties-create.container.graphql Defines create mutation.
packages/ocom/ui-community-route-member/src/components/member-properties-create.container.stories.tsx Exercises create container.
packages/ocom/ui-community-route-member/src/components/member-properties-create.container.tsx Executes property creation.
packages/ocom/ui-community-route-member/src/components/member-properties-create.tsx Presents member create form.
packages/ocom/ui-community-route-member/src/components/member-properties-detail.container.graphql Defines detail operations.
packages/ocom/ui-community-route-member/src/components/member-properties-detail.container.tsx Loads and updates details.
packages/ocom/ui-community-route-member/src/components/member-properties-detail.stories.tsx Exercises detail states.
packages/ocom/ui-community-route-member/src/components/member-properties-detail.tsx Selects editable/read-only view.
packages/ocom/ui-community-route-member/src/components/member-properties-list.container.graphql Defines property-list query.
packages/ocom/ui-community-route-member/src/components/member-properties-list.container.tsx Loads member property list.
packages/ocom/ui-community-route-member/src/components/member-properties-list.stories.tsx Exercises list states.
packages/ocom/ui-community-route-member/src/components/member-properties-list.tsx Hides owner list data.
packages/ocom/ui-community-route-member/src/components/member-properties-route-guard.container.graphql Queries route permissions.
packages/ocom/ui-community-route-member/src/components/member-properties-route-guard.container.stories.tsx Exercises guard outcomes.
packages/ocom/ui-community-route-member/src/components/member-properties-route-guard.container.tsx Guards property routes.
packages/ocom/ui-community-route-member/src/components/member-property-graphql-contract.test.ts Tests GraphQL field restrictions.
packages/ocom/ui-community-route-member/src/components/member-section-layout.tsx Adds member navigation.
packages/ocom/ui-community-route-member/src/index.tsx Exports property pages.
packages/ocom/ui-community-route-member/src/pages/member-home.stories.tsx Updates home stories.
packages/ocom/ui-community-route-member/src/pages/member-home.tsx Links property management.
packages/ocom/ui-community-route-member/src/pages/member-properties-create.stories.tsx Adds create-page stories.
packages/ocom/ui-community-route-member/src/pages/member-properties-create.tsx Adds create page.
packages/ocom/ui-community-route-member/src/pages/member-properties-detail.stories.tsx Adds detail-page stories.
packages/ocom/ui-community-route-member/src/pages/member-properties-detail.tsx Adds detail page.
packages/ocom/ui-community-route-member/src/pages/member-properties-list.stories.tsx Adds list-page stories.
packages/ocom/ui-community-route-member/src/pages/member-properties-list.tsx Adds list page.
packages/ocom/ui-community-route-member/src/pages/member-properties.stories.tsx Adds route-shell stories.
packages/ocom/ui-community-route-member/src/pages/member-properties.tsx Adds guarded route shell.
packages/ocom/ui-community-route-member/src/vite-env.d.ts Adds Vite typings.
packages/ocom/ui-community-route-member/tsconfig.json Configures route compilation.
packages/ocom/ui-community-route-member/tsconfig.vitest.json Configures Vitest typing.
packages/ocom/ui-community-route-member/vitest.arch.config.ts Configures architecture tests.
packages/ocom/ui-community-route-member/vitest.config.ts Configures unit tests.
packages/ocom/ui-community-shared/package.json Adds shared UI dependencies.
packages/ocom/ui-community-shared/src/components/property/address-options.ts Defines address options.
packages/ocom/ui-community-shared/src/components/property/countries.ts Defines country data.
packages/ocom/ui-community-shared/src/components/property/format-display-address.test.ts Tests address formatting.
packages/ocom/ui-community-shared/src/components/property/format-display-address.ts Formats property addresses.
packages/ocom/ui-community-shared/src/components/property/properties-detail.stories.tsx Documents detail states.
packages/ocom/ui-community-shared/src/components/property/properties-detail.tsx Renders property details.
packages/ocom/ui-community-shared/src/components/property/properties-list.stories.tsx Documents list states.
packages/ocom/ui-community-shared/src/components/property/properties-list.tsx Renders property tables.
packages/ocom/ui-community-shared/src/components/property/property-edit-policy.test.ts Tests edit policies.
packages/ocom/ui-community-shared/src/components/property/property-edit-policy.ts Defines presentation capabilities.
packages/ocom/ui-community-shared/src/components/property/property-form.stories.tsx Documents form variants.
packages/ocom/ui-community-shared/src/components/property/property-form.tsx Implements shared property form.
packages/ocom/ui-community-shared/src/components/property/property-form.validation.ts Validates property inputs.
packages/ocom/ui-community-shared/src/components/property/property-input-mappers.test.ts Tests input allowlists.
packages/ocom/ui-community-shared/src/components/property/property-input-mappers.ts Maps role-safe inputs.
packages/ocom/ui-community-shared/src/components/property/property-read-only-detail.tsx Renders read-only details.
packages/ocom/ui-community-shared/src/components/property/property-types.ts Defines shared property types.
packages/ocom/ui-community-shared/src/components/property/sub-page-layout.tsx Adds reusable subpage layout.
packages/ocom/ui-community-shared/src/index.tsx Exports property UI APIs.
packages/ocom/ui-shared/src/components/organisms/dropdown-menu/member-admin-access.ts Refines member access typing.
pnpm-lock.yaml Locks dependency changes.
Files not reviewed (1)
  • pnpm-lock.yaml: Generated file
Suppressed comments (3)

packages/ocom/ui-community-route-member/src/components/member-properties-detail.container.graphql:7

  • MemberPropertyUpdate omits the required container segment from the <Layout><Container><Operation> mutation name. Include the full MemberPropertiesDetailContainer identity and regenerate the generated client API.
    packages/ocom/ui-community-route-member/src/components/member-properties-detail.container.graphql:19
  • This fragment name omits the required container segment from the <Layout><Container><Type>Fields convention. Rename it to include MemberPropertiesDetailContainer and regenerate all generated references.
    packages/ocom/ui-community-route-member/src/components/member-properties-list.container.graphql:7
  • This fragment name omits the required container segment from the <Layout><Container><Type>Fields convention. Rename it to include MemberPropertiesListContainer and regenerate all generated references.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

export const isPropertyViewable = (passport: Domain.Passport, property: Domain.Contexts.Property.Property.PropertyEntityReference): boolean => {
return passport.property.forProperty(property).determineIf((permissions) => permissions.isSystemAccount || permissions.canManageProperties);
export const isPropertyViewable = (passport: Domain.Passport, property: PropertyAuthorizationSubject): boolean => {
return passport.property.forProperty(property).determineIf((permissions) => permissions.isSystemAccount || permissions.canManageProperties || permissions.canEditOwnProperty);
const endUser = await readonlyDataSource.User.EndUser.EndUserReadRepo.getByExternalId(verifiedJwt.sub);
const member = hints?.memberId ? await readonlyDataSource.Community.Member.MemberReadRepo.getByIdWithCommunityAndRoleAndUser(hints?.memberId) : null;
const community = hints?.communityId ? await readonlyDataSource.Community.Community.CommunityReadRepo.getById(hints?.communityId) : null;
const member = endUser && hints?.communityId ? await readonlyDataSource.Community.Member.MemberReadRepo.getByEndUserIdAndCommunityIdWithRole(endUser.id, hints.communityId) : null;
// A selected community is not an authentication claim, but it can
// scope the canonical membership lookup. The member ID header is
// intentionally never consulted as actor identity.
if (endUser && member && hasResolvedMemberRole(member)) {
* sections; the containers convert between GraphQL data/input shapes and
* {@link PropertyFormValues}.
*/
export const PropertyForm: React.FC<PropertyFormProps> = (props) => {
* manager-only deletion confirmation; this component only selects the
* editable or read-only presentation from an explicit policy.
*/
export const PropertyDetails: React.FC<PropertyDetailsProps> = (props) => {
children?: React.ReactNode;
}

export const SubPageLayout: React.FC<SubPageLayoutProps> = (props) => {
@@ -0,0 +1,15 @@
mutation MemberPropertyCreate($input: PropertyCreateInput!) {
@@ -0,0 +1,28 @@
query MemberPropertiesList($communityId: ObjectID!) {
@@ -0,0 +1,25 @@
query MemberPropertiesRouteGuardMembersForCurrentEndUser {
@@ -0,0 +1,80 @@
query MemberPropertyDetail($id: ObjectID!) {
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