Files
CherryHQ-cherry-studio/packages/shared/data
fullex 12e4e60005 feat(data-api): add group and pin resources with polymorphic pin table
Two sibling resources land together because their migration SQL is
generated as one unit and their API-schema / handler wiring has to go
in the same commit to keep the repo compiling.

group: upgrade the existing group table from `sort_order INT` to
`order_key TEXT` (`scopedOrderKeyIndex('group', 'entityType')`) and
expose it as a first-class resource under /groups. Each entityType
owns an independent orderKey sequence. Reorder delegates to the new
applyScopedMoves helper.

pin: brand-new polymorphic table `(id, entityType, entityId, orderKey,
timestamps)` with UNIQUE(entityType, entityId) enforcing idempotency
at the DB layer. One table serves arbitrarily many consumers — same
precedent as entity_tag. No FK to consumer tables; every consumer
service's delete path must call `pinService.purgeForEntity(tx,
entityType, entityId)` to keep the two tables in sync (signature is
tx-first, the mainstream ORM convention; tagService.removeEntityTags
is the project's historical tx-last outlier and is left as-is).

PinService.pin is idempotent and concurrent-safe: a fast-path SELECT
returns existing rows, and a UNIQUE collision under concurrent INSERT
is caught, classified, and re-SELECTed so the caller never sees a
constraint error.

Handler layer is a thin Zod-parse shell — all scope inference, row
lookup, and orderKey computation live in the services.
2026-04-21 23:28:14 -07:00
..

Shared Data Types

This directory contains shared type definitions for Cherry Studio's data layer.

Documentation

For comprehensive documentation, see:

Directory Structure

packages/shared/data/
├── api/                     # Data API type system
│   ├── index.ts             # Barrel exports
│   ├── apiTypes.ts          # Core request/response types
│   ├── apiPaths.ts          # Path template utilities
│   ├── apiErrors.ts         # Error handling
│   └── schemas/             # Domain-specific API schemas
├── cache/                   # Cache system type definitions
│   ├── cacheTypes.ts        # Core cache types
│   ├── cacheSchemas.ts      # Cache key schemas
│   └── cacheValueTypes.ts   # Cache value types
├── preference/              # Preference system type definitions
│   ├── preferenceTypes.ts   # Core preference types
│   └── preferenceSchemas.ts # Preference schemas
└── types/                   # Shared data types

Quick Reference

Import Conventions

// API infrastructure types (from barrel)
import type { DataRequest, DataResponse, ApiClient } from '@shared/data/api'
import { ErrorCode, DataApiError, DataApiErrorFactory } from '@shared/data/api'

// Domain DTOs (from schema files)
import type { Topic, CreateTopicDto } from '@shared/data/api/schemas/topic'

// Cache types
import type { UseCacheKey, UseSharedCacheKey } from '@shared/data/cache'

// Preference types
import type { PreferenceKeyType } from '@shared/data/preference'