309 lines
7.7 KiB
Markdown
309 lines
7.7 KiB
Markdown
# Data Models
|
|
|
|
Core data structures used throughout the application.
|
|
|
|
## Asset
|
|
|
|
The fundamental unit representing a photo or video.
|
|
|
|
### Properties
|
|
|
|
| Property | Type | Description |
|
|
|----------|------|-------------|
|
|
| id | Integer | Local database ID (auto-increment) |
|
|
| remoteId | String? | Server-side UUID |
|
|
| localId | String? | Device media library ID |
|
|
| checksum | String | SHA1 hash (base64 encoded) |
|
|
| thumbhash | String? | Compact image placeholder hash |
|
|
| ownerId | Integer | Hash of owner's user ID |
|
|
| fileCreatedAt | DateTime | When file was originally created |
|
|
| fileModifiedAt | DateTime | When file was last modified |
|
|
| updatedAt | DateTime | Last server update timestamp |
|
|
| durationInSeconds | Integer | Video duration (0 for images) |
|
|
| type | AssetType | image, video, audio, or other |
|
|
| width | Integer? | Image/video width in pixels |
|
|
| height | Integer? | Image/video height in pixels |
|
|
| fileName | String | Original filename |
|
|
| livePhotoVideoId | String? | ID of video component for live photos |
|
|
| isFavorite | Boolean | Marked as favorite |
|
|
| isArchived | Boolean | Hidden from main timeline |
|
|
| isTrashed | Boolean | In trash (pending deletion) |
|
|
| isOffline | Boolean | Server asset not accessible |
|
|
| stackId | String? | ID of stack this asset belongs to |
|
|
| stackPrimaryAssetId | String? | Primary asset in the stack |
|
|
| stackCount | Integer | Number of assets in stack |
|
|
| visibility | Enum | timeline, archive, hidden, locked |
|
|
|
|
### Asset Types
|
|
|
|
```
|
|
AssetType:
|
|
- other: Unknown file type
|
|
- image: Photo (JPEG, PNG, HEIC, etc.)
|
|
- video: Video file (MP4, MOV, etc.)
|
|
- audio: Audio file
|
|
```
|
|
|
|
### Asset State
|
|
|
|
Describes where asset data comes from:
|
|
|
|
```
|
|
AssetState:
|
|
- local: Only exists on device
|
|
- remote: Only exists on server
|
|
- merged: Exists on both (synced)
|
|
```
|
|
|
|
### Asset Visibility
|
|
|
|
```
|
|
AssetVisibilityEnum:
|
|
- timeline: Visible in main timeline
|
|
- archive: In archive (hidden from timeline)
|
|
- hidden: Hidden (private)
|
|
- locked: In locked folder (PIN protected)
|
|
```
|
|
|
|
### Computed Properties
|
|
|
|
| Property | Description |
|
|
|----------|-------------|
|
|
| isLocal | Has local device ID |
|
|
| isRemote | Has server ID |
|
|
| isImage | Type is image |
|
|
| isVideo | Type is video |
|
|
| isMotionPhoto | Has live photo video component |
|
|
| aspectRatio | Width / height ratio |
|
|
| duration | Duration as time object |
|
|
| name | Filename without extension |
|
|
| storage | Current asset state |
|
|
| isFlipped | EXIF indicates rotation 90/270 |
|
|
| orientatedWidth | Width accounting for rotation |
|
|
| orientatedHeight | Height accounting for rotation |
|
|
|
|
## Album
|
|
|
|
Collection of assets.
|
|
|
|
### Properties
|
|
|
|
| Property | Type | Description |
|
|
|----------|------|-------------|
|
|
| id | Integer | Local database ID |
|
|
| remoteId | String? | Server-side UUID |
|
|
| name | String | Album name |
|
|
| createdAt | DateTime | Creation timestamp |
|
|
| modifiedAt | DateTime | Last modification |
|
|
| startDate | DateTime? | Earliest asset date |
|
|
| endDate | DateTime? | Latest asset date |
|
|
| lastModifiedAssetTimestamp | DateTime? | When assets last changed |
|
|
| shared | Boolean | Is shared with others |
|
|
| ownerId | Integer | Owner's user ID hash |
|
|
| owner | User | Owner user object |
|
|
| activityEnabled | Boolean | Comments/likes allowed |
|
|
| isRemote | Boolean | Exists on server |
|
|
| assetCount | Integer | Number of assets |
|
|
|
|
### Album Types
|
|
|
|
- **Regular Album**: User-created collection
|
|
- **Shared Album**: Shared with other users
|
|
- **Partner Album**: Virtual album showing partner's assets
|
|
|
|
## User
|
|
|
|
Represents an app user.
|
|
|
|
### Properties
|
|
|
|
| Property | Type | Description |
|
|
|----------|------|-------------|
|
|
| id | String | Unique user UUID |
|
|
| email | String | User's email address |
|
|
| name | String | Display name |
|
|
| profileImagePath | String? | URL to profile picture |
|
|
| isAdmin | Boolean | Has admin privileges |
|
|
| memoryEnabled | Boolean | Show memories feature |
|
|
| avatarColor | Color | Generated avatar color |
|
|
| quotaUsageInBytes | Integer | Storage used |
|
|
| quotaSizeInBytes | Integer? | Storage quota (null = unlimited) |
|
|
| inTimeline | Boolean | Show in partner timeline |
|
|
| isPartnerSharedBy | Boolean | Sharing with current user |
|
|
| isPartnerSharedWith | Boolean | Current user shares with them |
|
|
|
|
## ExifInfo
|
|
|
|
Metadata extracted from images.
|
|
|
|
### Properties
|
|
|
|
| Property | Type | Description |
|
|
|----------|------|-------------|
|
|
| assetId | Integer | Associated asset ID |
|
|
| make | String? | Camera manufacturer |
|
|
| model | String? | Camera model |
|
|
| lens | String? | Lens used |
|
|
| fNumber | Float? | Aperture f-stop |
|
|
| focalLength | Float? | Focal length in mm |
|
|
| iso | Integer? | ISO sensitivity |
|
|
| exposureTime | String? | Shutter speed |
|
|
| latitude | Float? | GPS latitude |
|
|
| longitude | Float? | GPS longitude |
|
|
| city | String? | Location city |
|
|
| state | String? | Location state/province |
|
|
| country | String? | Location country |
|
|
| description | String? | Image description/caption |
|
|
| dateTimeOriginal | DateTime? | Original capture time |
|
|
|
|
### Computed Properties
|
|
|
|
| Property | Description |
|
|
|----------|-------------|
|
|
| hasCoordinates | Has valid GPS data |
|
|
| isFlipped | Orientation is 90 or 270 degrees |
|
|
|
|
## Activity
|
|
|
|
Comment or like on shared album.
|
|
|
|
### Properties
|
|
|
|
| Property | Type | Description |
|
|
|----------|------|-------------|
|
|
| id | String | Activity UUID |
|
|
| assetId | String? | Specific asset (null = album-level) |
|
|
| comment | String? | Comment text (null for likes) |
|
|
| createdAt | DateTime | When activity was created |
|
|
| type | ActivityType | comment or like |
|
|
| user | User | User who created activity |
|
|
|
|
### Activity Types
|
|
|
|
```
|
|
ActivityType:
|
|
- comment: Text comment
|
|
- like: Thumbs up reaction
|
|
```
|
|
|
|
## Search Filters
|
|
|
|
Parameters for searching assets.
|
|
|
|
### Properties
|
|
|
|
| Property | Type | Description |
|
|
|----------|------|-------------|
|
|
| context | String? | Text to search |
|
|
| filename | String? | Search by filename |
|
|
| personIds | List<String> | Filter by people |
|
|
| location | SearchLocationFilter? | City/state/country |
|
|
| camera | SearchCameraFilter? | Make/model |
|
|
| date | SearchDateFilter? | Date range |
|
|
| display | SearchDisplayFilters? | Archive/favorite/trash |
|
|
| mediaType | AssetType? | Image/video filter |
|
|
|
|
### Location Filter
|
|
|
|
```
|
|
SearchLocationFilter:
|
|
- city: String?
|
|
- state: String?
|
|
- country: String?
|
|
```
|
|
|
|
### Camera Filter
|
|
|
|
```
|
|
SearchCameraFilter:
|
|
- make: String?
|
|
- model: String?
|
|
```
|
|
|
|
### Date Filter
|
|
|
|
```
|
|
SearchDateFilter:
|
|
- takenAfter: DateTime?
|
|
- takenBefore: DateTime?
|
|
```
|
|
|
|
### Display Filters
|
|
|
|
```
|
|
SearchDisplayFilters:
|
|
- isArchived: Boolean?
|
|
- isFavorite: Boolean?
|
|
- isNotInAlbum: Boolean?
|
|
```
|
|
|
|
## Memory
|
|
|
|
"On this day" memories feature.
|
|
|
|
### Properties
|
|
|
|
| Property | Type | Description |
|
|
|----------|------|-------------|
|
|
| id | String | Memory UUID |
|
|
| title | String | Display title |
|
|
| assets | List<Asset> | Assets in this memory |
|
|
| yearsAgo | Integer | How many years ago |
|
|
|
|
## Backup Album
|
|
|
|
Local album selected for backup.
|
|
|
|
### Properties
|
|
|
|
| Property | Type | Description |
|
|
|----------|------|-------------|
|
|
| id | String | Device album ID |
|
|
| name | String | Album name |
|
|
| selection | BackupSelection | include, exclude, or none |
|
|
| lastBackup | DateTime? | Last successful backup time |
|
|
|
|
## Store Keys
|
|
|
|
Key-value storage for app state and settings.
|
|
|
|
### Key Categories
|
|
|
|
**Authentication:**
|
|
- serverUrl, serverEndpoint
|
|
- accessToken
|
|
- currentUser
|
|
|
|
**Backup:**
|
|
- autoBackup, backgroundBackup
|
|
- backupRequireWifi, backupRequireCharging
|
|
- backupTriggerDelay
|
|
- backupFailedSince
|
|
|
|
**Display:**
|
|
- themeMode, primaryColor
|
|
- dynamicTheme, colorfulInterface
|
|
- tilesPerRow, dynamicLayout
|
|
- groupAssetsBy
|
|
|
|
**Cache:**
|
|
- thumbnailCacheSize
|
|
- imageCacheSize
|
|
- albumThumbnailCacheSize
|
|
|
|
**Features:**
|
|
- syncAlbums
|
|
- betaTimeline
|
|
- enableHapticFeedback
|
|
|
|
**Map:**
|
|
- mapThemeMode
|
|
- mapShowFavoriteOnly
|
|
- mapIncludeArchived
|
|
- mapwithPartners
|
|
- mapRelativeDate
|
|
|
|
---
|
|
|
|
[Previous: WebSocket](websocket.md) | [Next: API Reference](api-reference.md)
|