**Major Features Added:** - **Inline Reply System**: Replace compose screen with inline reply boxes - **Thread Navigation**: Parent/child navigation with jump functionality - **Chain Flow UI**: Reply counts, expand/collapse animations, visual hierarchy - **Enhanced Animations**: Smooth transitions, hover effects, micro-interactions **Frontend Changes:** - **ThreadedCommentWidget**: Complete rewrite with animations and navigation - **ThreadNode Model**: Added parent references and descendant counting - **ThreadedConversationScreen**: Integrated navigation handlers - **PostDetailScreen**: Replaced with threaded conversation view - **ComposeScreen**: Added reply indicators and context - **PostActions**: Fixed visibility checks for chain buttons **Backend Changes:** - **API Route**: Added /posts/:id/thread endpoint - **Post Repository**: Include allow_chain and visibility fields in feed - **Thread Handler**: Support for fetching post chains **UI/UX Improvements:** - **Reply Context**: Clear indication when replying to specific posts - **Character Counting**: 500 character limit with live counter - **Visual Hierarchy**: Depth-based indentation and styling - **Smooth Animations**: SizeTransition, FadeTransition, hover states - **Chain Navigation**: Parent/child buttons with visual feedback **Technical Enhancements:** - **Animation Controllers**: Proper lifecycle management - **State Management**: Clean separation of concerns - **Navigation Callbacks**: Reusable navigation system - **Error Handling**: Graceful fallbacks and user feedback This creates a Reddit-style threaded conversation experience with smooth animations, inline replies, and intuitive navigation between posts in a chain.
35 lines
1.3 KiB
Go
35 lines
1.3 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type Notification struct {
|
|
ID uuid.UUID `json:"id" db:"id"`
|
|
UserID uuid.UUID `json:"user_id" db:"user_id"`
|
|
Type string `json:"type" db:"type"` // like, comment, follow, reply, mention
|
|
ActorID uuid.UUID `json:"actor_id" db:"actor_id"`
|
|
PostID *uuid.UUID `json:"post_id,omitempty" db:"post_id"`
|
|
CommentID *uuid.UUID `json:"comment_id,omitempty" db:"comment_id"`
|
|
IsRead bool `json:"is_read" db:"is_read"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
Metadata json.RawMessage `json:"metadata" db:"metadata"`
|
|
|
|
// Joined fields
|
|
ActorHandle string `json:"actor_handle" db:"actor_handle"`
|
|
ActorDisplayName string `json:"actor_display_name" db:"actor_display_name"`
|
|
ActorAvatarURL string `json:"actor_avatar_url" db:"actor_avatar_url"`
|
|
PostImageURL *string `json:"post_image_url,omitempty" db:"post_image_url"` // Preview of post
|
|
}
|
|
|
|
type UserFCMToken struct {
|
|
UserID uuid.UUID `json:"user_id" db:"user_id"`
|
|
FCMToken string `json:"fcm_token" db:"fcm_token"`
|
|
Platform string `json:"platform" db:"platform"` // android, ios, web
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
|
}
|