Complete tasks 3.2-3.3: Data models and DynamoDB table schemas

- Defined all 8 data models (Page, Widget, Bookmark, Note, TagAssociation, Group, Share, Preferences)
- Implemented DynamoDB table creation for all tables with proper schemas
- Added GSIs for efficient querying (UserBookmarksIndex, UserNotesIndex, TagItemsIndex, UserSharesIndex)
- Comprehensive test coverage for all table schemas
- Updated init-db command to create all tables
This commit is contained in:
2026-02-18 22:55:06 -05:00
parent 7175ff14ba
commit 9f07b0c6f9
13 changed files with 1363 additions and 6 deletions

31
internal/models/share.go Normal file
View File

@@ -0,0 +1,31 @@
package models
import (
"time"
)
// Share represents a shareable link for bookmarks or notes
type Share struct {
ID string `dynamodbav:"share_id" json:"id"`
UserID string `dynamodbav:"user_id" json:"user_id"`
ItemID string `dynamodbav:"item_id" json:"item_id"`
ItemType ItemType `dynamodbav:"item_type" json:"item_type"`
CreatedAt time.Time `dynamodbav:"created_at" json:"created_at"`
ExpiresAt *time.Time `dynamodbav:"expires_at,omitempty" json:"expires_at,omitempty"`
AccessCount int `dynamodbav:"access_count" json:"access_count"`
}
// ShareLink represents a shareable link with full URL
type ShareLink struct {
ShareID string `json:"share_id"`
URL string `json:"url"`
ExpiresAt *time.Time `json:"expires_at,omitempty"`
}
// SharedItem represents the data returned when accessing a shared link
type SharedItem struct {
ItemType ItemType `json:"item_type"`
Data interface{} `json:"data"`
OwnerEmail *string `json:"owner_email,omitempty"`
CreatedAt time.Time `json:"created_at"`
}