Skip to content

Add organization model and memberships to core service #214

@geoffjay

Description

@geoffjay

Context

The core service (#211) requires organization support with a many-to-many relationship to users through a memberships table. This builds on the user model (#213).

Acceptance Criteria

  • Create Organization model struct with fields:
    • id (UUID, primary key)
    • name (TEXT, unique, not null)
    • created_at (TEXT/datetime)
    • updated_at (TEXT/datetime)
  • Create Membership model struct with fields:
    • id (UUID, primary key)
    • user_id (UUID, foreign key to users)
    • organization_id (UUID, foreign key to organizations)
    • role (TEXT, e.g. "owner", "member")
    • created_at (TEXT/datetime)
  • Create OrganizationStorage with CRUD operations
  • Create MembershipStorage with operations:
    • add_member(org_id, user_id, role)
    • remove_member(org_id, user_id)
    • list_members(org_id) — returns users in an organization
    • list_user_organizations(user_id) — returns organizations a user belongs to
    • get_membership(org_id, user_id) — check membership/role
  • Add unique constraint on (user_id, organization_id) in memberships
  • Add foreign key constraints with ON DELETE CASCADE
  • Add unit tests for all storage operations including edge cases
  • Ensure when a user's active organization is deleted, it's set to NULL

Relevant Files

  • crates/orchestrator/src/storage.rs — reference for storage patterns
  • New: crates/core/src/models/organization.rs, crates/core/src/storage/organizations.rs, crates/core/src/storage/memberships.rs

Dependencies

Metadata

Metadata

Assignees

No one assigned

    Labels

    complexity:largeLarge scope: 200+ lines, multiple filesenhancementNew feature or requestneeds-testsArea needs dedicated test coveragetriagedIssue has been triaged, ready for planning or implementation

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions