add docs part 2
This commit is contained in:
@@ -0,0 +1,202 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user