Files
immish/docs/activities.md

203 lines
4.9 KiB
Markdown

# Activities - Comments and Likes
Activities allow users to interact with assets in shared albums through comments and likes. This creates a social layer for collaborative photo sharing.
## Activity Types
### Comment
A text-based reaction attached to an album or specific asset:
- **id**: Unique identifier
- **assetId**: Optional - if set, comment is on specific asset; otherwise on album
- **comment**: The text content
- **createdAt**: Timestamp when comment was created
- **user**: The user who created the comment
### Like
A simple thumbs-up reaction:
- **id**: Unique identifier
- **assetId**: Optional - if set, like is on specific asset; otherwise on album
- **createdAt**: Timestamp when like was created
- **user**: The user who liked
## Activity Statistics
The app can fetch activity statistics for an album:
- **comments**: Number of comments on the album
## API Endpoints
### Get All Activities
Fetch all activities for an album, optionally filtered to a specific asset.
**Request:**
```
GET /activities?albumId={albumId}&assetId={assetId}
```
**Response:**
```json
[
{
"id": "activity-uuid",
"albumId": "album-uuid",
"assetId": "asset-uuid",
"comment": "Great photo!",
"type": "comment",
"createdAt": "2024-01-15T10:30:00Z",
"user": {
"id": "user-uuid",
"name": "John Doe",
"email": "john@example.com"
}
}
]
```
### Create Activity
Add a new comment or like.
**Request:**
```
POST /activities
{
"albumId": "album-uuid",
"assetId": "asset-uuid",
"type": "comment",
"comment": "Great photo!"
}
```
**Response:** The created activity object
### Delete Activity
Remove an activity (comment or like).
**Request:**
```
DELETE /activities/{id}
```
### Get Activity Statistics
Get comment count for an album.
**Request:**
```
GET /activities/statistics?albumId={albumId}&assetId={assetId}
```
**Response:**
```json
{
"comments": 5
}
```
## UI Components
### Activities Page
The main activities page displays all activities for an album or asset.
**Layout:**
```
+----------------------------------+
| [Back] Album Name |
+----------------------------------+
| |
| [Avatar] User • 2 hours ago |
| Comment text here |
| |
| [Thumbs Up] User • 1 hour ago |
| |
| [Avatar] User • 30 min ago |
| Another comment |
| |
| ... (scrollable list) |
| |
+----------------------------------+
| [Avatar] [Text Input] [Like] |
+----------------------------------+
```
**Behaviors:**
- List scrolls to show all activities
- New comments auto-scroll to bottom
- Activities can be dismissed by swiping (if user has permission)
### Activity Tile
Each activity is displayed as a tile:
**Comment Tile:**
- User avatar on the left
- Username and relative time ("2 hours ago") in header
- Comment text as subtitle
- If viewing from album page: thumbnail of asset on right (tappable)
**Like Tile:**
- Thumbs up icon on the left (colored with primary theme color)
- Username and relative time
- If on specific asset: shows asset thumbnail
### Activity Text Field
Input area at bottom of activities page:
**Components:**
- Current user's avatar on the left
- Text input field in center
- Like/unlike button on the right
**States:**
- **Enabled**: User can type comments and toggle like
- **Disabled**: Shows message "Activities are disabled" (when album owner disables activities)
**Like Button States:**
- **Not liked**: Outline thumbs up icon
- **Liked**: Filled thumbs up icon in primary color
**Behaviors:**
- Keyboard shows automatically when page opens
- Pressing "Send" on keyboard submits comment
- Tapping outside unfocuses input
- Like button toggles current user's like on/off
### Dismissible Activity
Activities can be swiped to delete if user has permission:
- Activity author can delete their own activities
- Album owner can delete any activity
**Swipe Animation:**
- Red background appears
- Trash icon shown
- Activity slides away when dismissed
## Permission Rules
| Action | Who Can Perform |
|--------|-----------------|
| Add comment | Any album member (if activities enabled) |
| Add like | Any album member (if activities enabled) |
| Delete own activity | Activity author |
| Delete any activity | Album owner |
| Disable activities | Album owner |
## Localization Strings
| Key | Usage |
|-----|-------|
| `say_something` | Placeholder text in comment input |
| `shared_album_activities_input_disable` | Shown when activities are disabled |
## Navigation
When viewing activities from album page and tapping an activity with an asset:
1. Build asset viewer route
2. Navigate to full-screen asset viewer
3. Show the specific asset the activity references
---
[Previous: Partners](partners.md) | [Next: Background Services](background-services.md)