Commit graph

181 commits

Author SHA1 Message Date
senke
17ef1b71b1 [BE-SVC-007] be-svc: Implement recommendation engine
- Created TrackRecommendationService with ML-based algorithms
- Collaborative filtering (40%) using similar users' preferences
- Content-based filtering (30%) using track metadata (genre, artist, year)
- Popularity scoring (20%) based on play_count and like_count
- Recency scoring (10%) for recently uploaded tracks
- Support for seed tracks, genre filtering, and track exclusion
- Added unit tests for scoring algorithms
- Combines multiple algorithms for personalized recommendations
2025-12-24 16:34:17 +01:00
senke
ddc08def9f [BE-SVC-006] be-svc: Implement search service
- Created FullTextSearchService using PostgreSQL tsvector/tsquery
- Supports full-text search for tracks, users, and playlists
- Uses GIN indexes from migration 048_search_indexes.sql
- Features relevance scoring with ts_rank_cd
- Weighted search (title/name weighted higher than description)
- Pagination and minimum relevance score filtering
- Unified search across all types and individual search methods
- Added unit tests for service validation and query preparation
2025-12-24 16:31:40 +01:00
senke
072d792437 [BE-SVC-005] be-svc: Implement file storage abstraction
- Added AWS SDK v2 dependency for S3 support
- Created S3StorageService implementing S3Service interface
- Support for AWS S3 and MinIO (S3-compatible storage)
- Added S3 configuration in config.go with environment variables
- Implemented upload, delete, presigned URL, and public URL methods
- Added unit tests for service validation and URL generation
- Service integrates with existing TrackStorageService
2025-12-24 16:28:51 +01:00
senke
75c62a9713 [BE-SVC-004] be-svc: Implement email service 2025-12-24 16:11:02 +01:00
senke
b9333b908c [BE-SVC-003] be-svc: Implement background job queue 2025-12-24 16:08:51 +01:00
senke
e2fd27e78d [BE-SVC-002] be-svc: Implement rate limiting per user 2025-12-24 16:04:36 +01:00
senke
c5ce2d6f00 [BE-SVC-001] be-svc: Implement caching layer for frequently accessed data 2025-12-24 16:02:16 +01:00
senke
68468cd5fc [BE-DB-018] be-db: Add database performance monitoring 2025-12-24 15:58:48 +01:00
senke
ff1253a9c8 [BE-DB-017] be-db: Add database migration rollback tests 2025-12-24 15:57:19 +01:00
senke
8016058ccf [BE-DB-016] be-db: Add database backup strategy 2025-12-24 15:55:46 +01:00
senke
bf78bb2c42 [BE-DB-015] be-db: Optimize database connection pooling 2025-12-24 15:53:19 +01:00
senke
e4412d88ee [BE-DB-014] be-db: Add database triggers for audit logging 2025-12-24 15:47:38 +01:00
senke
168391a781 [BE-DB-013] be-db: Add database views for common queries 2025-12-24 15:46:29 +01:00
senke
a370a47c9a [BE-DB-012] be-db: Create migration for analytics_events table (already exists) 2025-12-24 15:45:17 +01:00
senke
57b7a98b79 [BE-DB-011] be-db: Add database constraints for data validation 2025-12-24 15:43:52 +01:00
senke
a661ebab45 [BE-DB-010] be-db: Add composite indexes for common queries 2025-12-24 15:14:17 +01:00
senke
1dab4c7d14 [BE-DB-009] be-db: Add indexes for search queries 2025-12-24 15:13:03 +01:00
senke
26841afb0e [BE-DB-008] be-db: Create migration for notifications table 2025-12-24 15:12:11 +01:00
senke
282c66ec6b [BE-DB-007] be-db: Create migration for user_blocks table 2025-12-24 15:11:32 +01:00
senke
f0f770b512 [BE-DB-006] be-db: Create migration for user_follows table 2025-12-24 15:10:34 +01:00
senke
863e925d90 [BE-DB-005] be-db: Create migration for playlist_share_link table 2025-12-24 15:09:44 +01:00
senke
83996c9ead [BE-DB-004] be-db: Add created_at and updated_at timestamps to all models 2025-12-24 15:08:43 +01:00
senke
b824e89534 [BE-DB-003] be-db: Add soft delete support to all models 2025-12-24 15:07:25 +01:00
senke
ec38e14412 [BE-API-042] be-api: Implement OAuth callback endpoint 2025-12-24 15:05:40 +01:00
senke
ccfb77bc10 [BE-API-041] be-api: Implement user delete endpoint with soft delete support 2025-12-24 15:03:21 +01:00
senke
d8bb2f6f6a [BE-API-039] be-api: Implement marketplace order details endpoint 2025-12-24 15:00:32 +01:00
senke
9326a49e4a [BE-API-038] be-api: Implement marketplace order list endpoint 2025-12-24 14:50:39 +01:00
senke
daeef2b150 [BE-API-037] be-api: Implement marketplace product update endpoint 2025-12-24 14:49:41 +01:00
senke
0ed89e62fa [BE-API-036] be-api: Implement track analytics dashboard endpoint 2025-12-24 14:48:28 +01:00
senke
eb92dfeb11 [BE-API-035] be-api: Implement analytics events endpoint 2025-12-24 14:47:12 +01:00
senke
38f63edc86 [BE-API-026] be-api: Implement track quota endpoint validation 2025-12-24 14:45:12 +01:00
senke
b42493d264 [BE-API-025] be-api: Implement upload resume endpoint validation 2025-12-24 14:42:52 +01:00
senke
89fb8220db [BE-API-005] be-api: Implement playlist recommendations endpoint 2025-12-24 14:41:33 +01:00
senke
0d125d97e3 [FE-COMP-004] fe-comp: Add confirmation dialogs for destructive actions
- Created reusable ConfirmationDialog component for destructive actions
- Replaced native confirm() dialogs with ConfirmationDialog in ChatSidebar (leave room, delete room)
- Replaced native confirm() dialogs with ConfirmationDialog in RolesPage (delete role)
- Replaced Dialog with ConfirmationDialog in PlaylistActions (delete playlist)
- Replaced window.confirm() with ConfirmationDialog in SessionsPage (revoke session, revoke all sessions)
- All destructive actions now use consistent confirmation dialogs
- Confirmation dialogs include proper messaging, loading states, and variant support
- Improved UX with better visual feedback and clearer action descriptions
2025-12-24 14:38:55 +01:00
senke
a893e51911 [FE-COMP-003] fe-comp: Add empty states to all list views
- Created reusable EmptyState component with icon, title, description, and action support
- Improved empty state in PlaylistList with better messaging and icons
- Improved empty states in UserProfilePage for tracks and playlists tabs
- Added contextual messages based on whether viewing own profile or others
- Added helpful descriptions and icons to all empty states
- Empty states now provide clear guidance on what users can do next
- All list views now have consistent and helpful empty state messaging
2025-12-24 14:33:20 +01:00
senke
920304ca56 [FE-COMP-002] fe-comp: Add error boundaries to all pages
- Added ErrorBoundary to all public routes (login, register, forgot-password, verify-email, reset-password)
- Added ErrorBoundary to public user profile page (/u/:username)
- Added ErrorBoundary to protected routes: dashboard, marketplace, chat
- Added ErrorBoundary to settings/sessions route
- Added ErrorBoundary to admin/roles route
- Added ErrorBoundary to tracks/:id route
- Added ErrorBoundary to playlists/* route
- Added ErrorBoundary to search route
- Added ErrorBoundary to notifications route
- Added ErrorBoundary to error pages (404, 500)
- All pages now have error boundaries for graceful error handling
- Error boundaries provide fallback UI with retry and home navigation options
2025-12-24 14:31:28 +01:00
senke
883e2cf4e2 [FE-COMP-001] fe-comp: Add loading states to all async operations
- Created ButtonLoading component for consistent loading button pattern
- Created comprehensive loading states pattern guide
- Documented best practices for loading states in async operations
- Identified and documented existing loading state implementations
- Provided patterns for form submissions, data fetching, mutations, and skeleton loaders
- Created checklist for implementing loading states
- Documented examples from existing codebase

Most components already have loading states implemented. Pattern guide ensures consistency for future implementations.
2025-12-24 13:25:10 +01:00
senke
8e83007cf7 [FE-PAGE-014] fe-page: Add Notifications page
- Created dedicated Notifications page with full notification management
- Added notification service with API integration (get, mark as read, mark all as read)
- Added filtering by status (all/unread/read) and type (message/track/mention/system/etc)
- Added mark as read functionality for individual notifications
- Added mark all as read functionality
- Added notification type icons and labels
- Added notification timestamps with relative time formatting
- Added notification links support for navigation
- Added empty states for no notifications
- Added loading and error states
- Integrated with backend notification APIs
- Added route /notifications to router
- Added lazy loading for NotificationsPage component
- Added visual distinction for unread notifications (badge, background)
- Added notification type badges
2025-12-24 13:22:31 +01:00
senke
6e03122578 [FE-PAGE-013] fe-page: Add Search page
- Created dedicated Search page with unified search interface
- Added search functionality for tracks, playlists, and users
- Implemented tabs for filtering results by type (All/Tracks/Playlists/Users)
- Added search query debouncing for performance
- Added URL query parameter synchronization (q, type)
- Added pagination for each result type
- Added empty states for no query and no results
- Added loading states for all search operations
- Added error handling for search failures
- Integrated with existing search APIs (tracks, playlists, users)
- Added search service for user search API
- Added route /search to router
- Added lazy loading for SearchPage component
- Added result previews in All tab (6 items per type)
- Added View All buttons to navigate to specific tabs
2025-12-24 13:19:54 +01:00
senke
72ded18285 [FE-PAGE-012] fe-page: Complete Sessions page implementation
- Added user agent parser to extract device information (OS, browser, device type)
- Added device information display with formatted device details
- Added location information display (with support for private IP detection)
- Enhanced session cards with device type badges and detailed info
- Improved device icon selection based on device type (mobile/tablet/desktop)
- Added formatted device info display (OS, browser, versions)
- Added location display with MapPin icon
- Added device type badge (mobile/tablet/desktop)
- Improved visual hierarchy with better spacing and badges
- Maintained existing session management actions (revoke, revoke all)
2025-12-24 13:16:32 +01:00
senke
1d92267dbc [FE-PAGE-011] fe-page: Complete Roles page implementation
- Added CreateRoleModal for creating new roles
- Added EditRoleModal for editing existing roles
- Added AssignRoleModal for assigning roles to users
- Fixed roleService type issues (roleId from number to string)
- Enhanced RolesPage with create/edit/assign functionality
- Added UI section for assigning roles to users by ID
- Integrated all modals with existing role management
- Added proper form validation and error handling
- Added loading states for all async operations
- Added display of user current roles in assign modal
2025-12-24 13:13:54 +01:00
senke
78501accc3 [FE-PAGE-010] fe-page: Complete User Profile page (public)
- Added user tracks display with grid layout and pagination
- Added user playlists display with grid layout and pagination
- Added stats section showing tracks, playlists, and followers count
- Implemented tabs for switching between tracks and playlists
- Enhanced FollowButton with API integration (follow/unfollow)
- Added follow/unfollow API functions in profileService
- Added followers/following API functions (getFollowers, getFollowing)
- Added View All links for tracks and playlists when count > 12
- Improved profile layout with better organization
- Added empty states for tracks and playlists sections
2025-12-24 13:09:30 +01:00
senke
f4698f1fa1 [FE-PAGE-009] fe-page: Complete Playlist List page implementation
- Added server-side search using searchPlaylists API
- Added filtering: visibility (public/private), owner (all/mine/others)
- Added client-side sorting: by date, title, track count (asc/desc)
- Enhanced filter UI with collapsible filters panel
- Added sort controls with field selector and order toggle
- Integrated search API when search query or filters are active
- Maintained existing bulk operations (delete, share, export)
- Added clear filters button when filters are active
- Improved UX with filter badges and active state indicators
2025-12-24 13:05:21 +01:00
senke
4564829174 [FE-PAGE-008] fe-page: Complete Playlist Detail page implementation
- Added collaborator management UI with AddCollaboratorModal
- Added sharing functionality with SharePlaylistModal
- Added recommendations section using PlaylistRecommendations component
- Integrated CollaboratorList component in tabs
- Organized content in tabs (Tracks, Collaborators, Recommendations)
- Enhanced share button to open share modal with token generation
- Added Add Collaborator button for playlist owners/admins
- Integrated existing components: CollaboratorList, PlaylistRecommendations
2025-12-24 13:02:32 +01:00
senke
ce22448c4d [FE-PAGE-007] fe-page: Complete Track Detail page implementation
- Added comments section with CommentSection component
- Added sharing functionality with ShareDialog component
- Added version history display using TrackHistory component
- Added analytics display using TrackStatsDisplay component
- Organized content in tabs (Comments, History)
- Enhanced share button to open share dialog with token generation
- Integrated comment creation, deletion, and pagination
- Added track statistics display (views, likes, comments, downloads, play time)
2025-12-24 12:57:49 +01:00
senke
0dd54d1476 [FE-PAGE-006] fe-page: Complete Marketplace page implementation
- Added product browsing with pagination (page, limit, total_pages)
- Added product filtering: search, product type, price range
- Added cart functionality: add, remove, update quantity, checkout
- Created cartStore with Zustand and persistence
- Added Cart component with checkout functionality
- Enhanced ProductCard with Add to Cart button
- Added filter UI with collapsible filters panel
- Added search bar for product search
- Added pagination controls (Previous/Next)
- Updated marketplaceService to support filters and pagination
2025-12-24 12:54:20 +01:00
senke
fcb7539e59 [FE-PAGE-005] fe-page: Complete Chat page implementation
- Added room management: create, join, leave, delete rooms
- Added CreateRoomDialog component for creating new rooms
- Added room actions menu (leave/delete) in ChatSidebar
- Added message search functionality with MessageSearch component
- Added search bar in ChatRoom with message highlighting
- Added TypingIndicator component (placeholder for future WebSocket integration)
- Enhanced ChatSidebar with room management UI
- Enhanced ChatRoom with search and typing indicators
2025-12-24 12:51:40 +01:00
senke
f7a6f8b953 [FE-PAGE-004] fe-page: Complete Settings page implementation
- Added Account Settings section with password change, data export, and account deletion
- Added Playback Settings section with audio quality, volume, crossfade, and autoplay controls
- Updated SettingsTabs to include Account and Playback tabs (5 tabs total)
- Added PlaybackSettings interface to types
- Integrated account management features (password change, data export, account deletion)
- Added audio playback controls (quality selector, volume slider, crossfade slider, autoplay toggle)
2025-12-24 12:48:28 +01:00
senke
0a84ae4f7d [FE-PAGE-003] fe-page: Complete Profile page implementation
- Added profile completion indicator with progress bar
- Added profile completion percentage and missing fields display
- Added social links management (Twitter, Instagram, Facebook, YouTube, Website)
- Improved bio editing with Textarea component and character counter
- Added social links display when not editing
- Added location field
- Updated UpdateProfileRequest interface to include social_links
- Integrated profile completion API endpoint
2025-12-24 12:41:34 +01:00
senke
e4625c562d [FE-PAGE-002] fe-page: Complete Library page implementation
- Added filtering by genre and format with dropdown selects
- Added sorting by date, title, and popularity with order toggle
- Added bulk operations: select multiple tracks, bulk delete, bulk update
- Added bulk mode toggle with selection checkboxes
- Added batch delete and batch update API functions
- Added pagination controls
- Improved UI with filter bar and sort dropdown
- Added toast notifications for operations
- Added select all/deselect all functionality
2025-12-24 12:38:25 +01:00
senke
5f886b58d5 [FE-PAGE-001] fe-page: Complete Dashboard page implementation
- Created dashboardService.ts to fetch real stats and activity from API
- Created useDashboard hook for managing dashboard data
- Updated DashboardPage to use real data instead of hardcoded values
- Added loading states and skeletons for better UX
- Made quick actions functional with navigation
- Added activity timeline with real timestamps
- Formatted numbers with K/M suffixes for readability
- Added relative time formatting using date-fns
2025-12-24 12:35:38 +01:00
senke
dfd6eb3ed3 [BE-SEC-014] be-sec: Implement secrets management
- Enhanced secrets management with environment-aware defaults
- Fixed RabbitMQ URL: no default credentials in production
- Added getRabbitMQURL with environment-aware logic
- Added ValidateRequiredSecrets to validate required secrets
- Added RequiredSecretKeys listing production-required secrets
- Added validation for RabbitMQ URL in production
- All secrets properly managed via environment variables
- No hardcoded secrets in production code
2025-12-24 12:30:18 +01:00
senke
77e27f4d75 [BE-SEC-013] be-sec: Implement audit logging for security events
- Added comprehensive audit logging methods for security events
- LogPasswordChange, LogPasswordResetRequest, LogPasswordReset
- LogTwoFactorEnabled, LogTwoFactorDisabled, LogTwoFactorVerification
- LogAccessDenied, LogRoleChange, LogAccountLocked
- LogSecurityEvent for generic security events
- Integrated audit logging in password reset handlers
- All security events logged with IP, user agent, and metadata
2025-12-24 12:27:39 +01:00
senke
bddde37f73 [BE-SEC-011] be-sec: Implement security headers
- Enhanced security headers middleware with additional headers
- Added X-Permitted-Cross-Domain-Policies: none
- Added Cross-Origin-Embedder-Policy: require-corp
- Added Cross-Origin-Opener-Policy: same-origin
- Added Cross-Origin-Resource-Policy: same-origin
- Enhanced Permissions-Policy with additional restrictions
- Enhanced CSP with frame-ancestors directive
- HSTS now only set in production (not in development)
- Updated tests to verify all new headers
2025-12-24 12:24:54 +01:00
senke
548e0e95e6 [BE-SEC-010] be-sec: Implement file upload validation
- Enhanced file validation with robust magic bytes checking
- Added validateMagicBytes to prevent file type spoofing
- Added validateAudioMagicBytes (MP3, FLAC, WAV, OGG, AAC/M4A)
- Added validateImageMagicBytes (JPEG, PNG, GIF, WebP, SVG)
- Added validateVideoMagicBytes (MP4, WebM, OGG, AVI)
- Magic bytes validation runs before MIME type validation
- Existing validations: MIME type, file size, extension, ClamAV scanning
2025-12-24 12:17:06 +01:00
senke
4ba6b7f6db [BE-SEC-009] be-sec: Implement input sanitization
- Created comprehensive sanitization utility functions
- SanitizeInput, SanitizeText, SanitizeHTML, SanitizeURL, SanitizeEmail, SanitizeUsername
- Applied sanitization to profile handler (username, bio, names, search)
- Applied sanitization to social posts content
- Applied sanitization to comment content
- Applied sanitization to playlist titles and descriptions
- All functions prevent XSS via HTML escaping and remove dangerous URL schemes
- Removes control characters and limits input length to prevent DoS
2025-12-24 12:15:25 +01:00
senke
fb2caa6706 [BE-SEC-008] be-sec: Implement session timeout and refresh
- Added automatic session refresh mechanism in auth middleware
- Sessions are refreshed when they reach 25% of lifetime remaining
- Refresh happens asynchronously to avoid blocking requests
- Applied to both RequireAuth and OptionalAuth middlewares
- Session timeout enforced through ValidateSession checks
2025-12-24 12:12:29 +01:00
senke
ca4f8d021c [BE-SEC-007] security: Implement account lockout after failed login attempts
- Created AccountLockoutService to track failed login attempts
- Accounts are locked after 5 failed attempts within 15 minutes
- Lockout duration: 30 minutes (auto-unlock)
- Service uses Redis for persistence (fail-open if Redis unavailable)
- Integrated into AuthService Login method:
  * Check account lockout status before login
  * Record failed attempts (even for non-existent users to prevent enumeration)
  * Reset failed attempts counter on successful login
  * Auto-unlock expired accounts
- Added SetAccountLockoutService method to AuthService
- Service initialized in router when Redis is available

Phase: PHASE-4
Priority: P1
Progress: 9/267 (3.4%)
2025-12-24 12:10:41 +01:00
senke
52a4a1276f [BE-SEC-006] security: Implement comprehensive password strength validation
- Enhanced PasswordValidator with additional security checks:
  * Maximum length validation (128 characters)
  * Common password detection (password, 123456, qwerty, etc.)
  * Repetitive pattern detection (aaaa, 1111, etc.)
  * Sequential pattern detection (1234, abcd, qwerty, etc.)
- Added ValidatePasswordChange method to ensure new password is
  sufficiently different from old password (similarity check)
- Updated PasswordService to use enhanced validator consistently
- Replaced utils.ValidatePasswordStrength with validators.PasswordValidator
- All password operations now use the same comprehensive validation rules

Phase: PHASE-4
Priority: P1
Progress: 8/267 (3.0%)
2025-12-24 12:08:03 +01:00
senke
8722344aba [BE-SEC-005] security: Implement rate limiting for authentication endpoints
- Applied RegisterRateLimit to POST /auth/register (3 attempts/hour)
- Applied PasswordResetRateLimit to password reset endpoints (3 attempts/hour)
- Added VerifyEmailRateLimit for POST /auth/verify-email (5 attempts/hour)
- Added ResendVerificationRateLimit for POST /auth/resend-verification (3 attempts/hour)
- Login endpoint already had rate limiting (5 attempts/15min)
- All rate limits are IP-based and use Redis for persistence
- Rate limiting disabled in test/e2e environments

Phase: PHASE-4
Priority: P1
Progress: 7/267 (2.6%)
2025-12-24 12:05:35 +01:00
senke
7d8ca7a53e [BE-SEC-004] security: Implement CSRF protection for all state-changing endpoints
- Created applyCSRFProtection helper function to apply CSRF middleware
- Applied CSRF protection to all protected routes with POST/PUT/DELETE:
  * Users routes (PUT, POST, DELETE)
  * Tracks routes (POST, PUT, DELETE)
  * Playlists routes (POST, PUT, DELETE)
  * Chat routes (POST)
  * Auth protected routes (POST logout, 2FA)
  * Roles routes (GET only, no state-changing)
  * Marketplace routes (POST)
  * Webhooks routes (POST, DELETE)
  * Comments routes (POST, DELETE)
- CSRF token endpoint (/csrf-token) remains accessible without CSRF check
- Middleware validates X-CSRF-Token header for all state-changing requests
- Protection only applies when Redis is available

Phase: PHASE-4
Priority: P1
Progress: 6/267 (2.2%)
2025-12-24 12:03:27 +01:00
senke
f093a84650 [BE-API-040] api: Implement user list endpoint
- Added ListUsers method to UserService with pagination and filtering
- Added ListUsers handler to ProfileHandler
- Registered GET /api/v1/users endpoint in router
- Supports filtering by role, is_active, is_verified, and search
- Supports sorting by created_at, username, email, last_login_at
- Includes pagination metadata (page, limit, total, total_pages, has_next, has_prev)

Phase: PHASE-2
Priority: P1
Progress: 5/267 (1.9%)
2025-12-24 11:59:56 +01:00
senke
6ca3ecef1f chore: Update BE-API-034 completion status 2025-12-24 11:57:07 +01:00
senke
786291eb2f [BE-API-034] be-api: Implement audit log search improvements
- Added additional filters: resource_id, ip_address, user_agent
- Added page-based pagination support in addition to offset-based
- Added CountLogs method to get total count for pagination
- Standardized SearchLogs handler to use RespondSuccess/RespondWithAppError
- Replaced c.Get with GetUserIDUUID helper
- Improved validation for query parameters
- Response includes total count, page, total_pages, and offset metadata

Phase: PHASE-2
Priority: P2
Progress: 41/267 (15.4%)
2025-12-24 11:56:57 +01:00
senke
f54471f035 chore: Update BE-API-033 completion status 2025-12-24 11:54:31 +01:00
senke
fb8bdf25e3 [BE-API-033] be-api: Implement webhook stats endpoint validation
- Standardized GetWebhookStats handler to use RespondSuccess/RespondWithAppError
- Replaced c.Get with GetUserIDUUID helper
- Handler retrieves webhook statistics via WebhookWorker.GetStats
- Handler returns queue_size, workers, and max_retries
- Handler uses standard API response format
- Added apperrors import

Phase: PHASE-2
Priority: P2
Progress: 40/267 (15.0%)
2025-12-24 11:54:22 +01:00
senke
6313c1cf62 chore: Update BE-API-032 completion status 2025-12-24 11:52:58 +01:00
senke
315d56f5de [BE-API-032] be-api: Implement upload stats endpoint
- Added GetUploadStats method in TrackUploadService to calculate statistics from tracks table
- Standardized GetUploadStats handler to use RespondSuccess/RespondWithAppError
- Replaced c.Get with GetUserIDUUID helper
- Handler retrieves statistics: total_uploads, total_size, audio_files, image_files, video_files
- Updated UploadHandler to include TrackUploadService dependency
- Updated router to pass TrackUploadService to UploadHandler

Phase: PHASE-2
Priority: P2
Progress: 39/267 (14.6%)
2025-12-24 11:52:49 +01:00
senke
6ddf69afd5 chore: Update BE-API-031 completion status 2025-12-24 11:48:54 +01:00
senke
cc8c531ca6 [BE-API-031] be-api: Implement session stats endpoint
- Standardized GetSessionStats handler to use RespondSuccess/RespondWithAppError
- Replaced c.Get with GetUserIDUUID helper
- Handler retrieves session statistics via SessionService.GetSessionStats
- Handler returns total_active sessions and unique_users count
- Handler uses standard API response format

Phase: PHASE-2
Priority: P2
Progress: 38/267 (14.2%)
2025-12-24 11:48:43 +01:00
senke
4e2a6897f7 chore: Update BE-API-030 completion status 2025-12-24 11:47:25 +01:00
senke
474b629372 [BE-API-030] be-api: Implement session refresh endpoint validation
- Standardized RefreshSession handler to use RespondSuccess/RespondWithAppError
- Replaced c.Get with GetUserIDUUID helper
- Handler validates Authorization header and extracts Bearer token
- Handler extends session timeout to 24 hours via SessionService.RefreshSession
- Handler properly handles errors (session not found, expired, internal errors)
- Handler returns message, expires_in, and expires_at
- Handler uses standard API response format

Phase: PHASE-2
Priority: P1
Progress: 37/267 (13.9%)
2025-12-24 11:47:15 +01:00
senke
90baaf01c4 chore: Update BE-API-029 completion status 2025-12-24 11:45:41 +01:00
senke
f5b1412ffa [BE-API-029] be-api: Implement shared track access endpoint validation
- Standardized GetSharedTrack handler to use RespondSuccess/RespondWithAppError
- Handler validates share token via TrackShareService.ValidateShareToken
- Handler retrieves track by share.TrackID
- Handler properly handles errors (share not found, expired, track not found)
- Handler returns track and share information
- Handler uses standard API response format
- Endpoint is public (no authentication required)

Phase: PHASE-2
Priority: P1
Progress: 36/267 (13.5%)
2025-12-24 11:45:27 +01:00
senke
000301dba7 chore: Update BE-API-028 completion status 2025-12-24 11:43:47 +01:00
senke
63207b6595 [BE-API-028] be-api: Implement track share revoke endpoint validation
- Standardized RevokeShare handler to use RespondSuccess/RespondWithAppError
- Handler validates share ID and checks ownership
- Handler revokes share link via TrackShareService.RevokeShare
- Handler properly handles errors (share not found, forbidden, internal errors)
- Handler uses standard API response format

Phase: PHASE-2
Priority: P1
Progress: 35/267 (13.1%)
2025-12-24 11:43:31 +01:00
senke
51e6b32e6d chore: Update BE-API-027 completion status 2025-12-24 11:42:12 +01:00
senke
2c80bf999d [BE-API-027] be-api: Implement user liked tracks endpoint
- Standardized GetUserLikedTracks handler to use RespondSuccess/RespondWithAppError
- Added limit validation (max 100)
- Moved route from setupTrackRoutes to setupUserRoutes in protected group
- Handler uses existing TrackLikeService methods
- Handler returns paginated results with tracks, total, limit, and offset
- Handler uses standard API response format

Phase: PHASE-2
Priority: P1
Progress: 34/267 (12.7%)
2025-12-24 11:41:50 +01:00
senke
21ff41d2c5 chore: Update BE-API-024 completion status 2025-12-24 11:39:30 +01:00
senke
1d8b53f69a [BE-API-024] be-api: Implement track batch operations validation
- Standardized BatchDeleteTracks and BatchUpdateTracks handlers
- Handlers use RespondSuccess and RespondWithAppError
- BatchDeleteTracks validates IDs, checks ownership, deletes in batch
- BatchUpdateTracks validates IDs and updates, checks ownership, updates in batch
- Both handlers return results with successful and failed operations
- Handlers use standard API response format

Phase: PHASE-2
Priority: P2
Progress: 33/267 (12.4%)
2025-12-24 11:39:21 +01:00
senke
6c9bb5a2b7 chore: Update BE-API-023 completion status 2025-12-24 11:37:59 +01:00
senke
c0d1a3c58f [BE-API-023] be-api: Implement user completion endpoint validation
- Standardized GetProfileCompletion handler to use GetUserIDUUID
- Added validation to ensure completion percentage is between 0 and 100
- Handler already existed and was working correctly
- Endpoint returns correct completion percentage (0-100) and missing fields
- Handler uses standard API response format

Phase: PHASE-2
Priority: P1
Progress: 32/267 (12.0%)
2025-12-24 11:37:51 +01:00
senke
b8f8f4f60b chore: Update BE-API-022 completion status 2025-12-24 11:36:27 +01:00
senke
feca73969c [BE-API-022] be-api: Implement avatar delete endpoint
- DeleteAvatar handler was already implemented and standardized
- Added route: DELETE /users/:userId/avatar
- Handler validates user authentication and ownership
- Handler deletes avatar file from storage and updates database
- Handler uses standard API response format

Phase: PHASE-2
Priority: P1
Progress: 31/267 (11.6%)
2025-12-24 11:36:15 +01:00
senke
3898f950b4 chore: Update BE-API-021 completion status 2025-12-24 11:34:51 +01:00
senke
0b9247d5ac [BE-API-021] be-api: Implement avatar upload endpoint
- Standardized UploadAvatar handler to use RespondSuccess/RespondWithAppError
- Replaced common.GetUserIDFromContext with GetUserIDUUID
- Handler accepts both :userId and :id parameters
- Added route: POST /users/:userId/avatar
- Handler validates user authentication and ownership
- Handler uses existing ImageService methods
- Handler updates avatar URL in database

Phase: PHASE-2
Priority: P1
Progress: 30/267 (11.2%)
2025-12-24 11:34:41 +01:00
senke
77e044fe56 chore: Update BE-API-020 completion status 2025-12-24 11:32:58 +01:00
senke
3273fa3296 [BE-API-020] be-api: Implement HLS stream info endpoint
- Added GetStreamInfo method to HLSService
- Added GetStreamInfo handler in HLSHandler
- Standardized GetStreamStatus handler to use RespondSuccess/RespondWithAppError
- Added routes: GET /tracks/:id/hls/info and GET /tracks/:id/hls/status
- GetStreamInfo returns general stream information
- GetStreamStatus returns status with processing info if applicable
- Handlers use standard API response format

Phase: PHASE-2
Priority: P1
Progress: 29/267 (10.9%)
2025-12-24 11:32:50 +01:00
senke
dc6f4f6843 chore: Update BE-API-019 completion status 2025-12-24 11:31:13 +01:00
senke
78603fdb08 [BE-API-019] be-api: Implement track play analytics endpoint
- Added RecordPlay handler in TrackHandler
- Added playbackAnalyticsService field and SetPlaybackAnalyticsService method
- Initialized PlaybackAnalyticsService in router.go
- Added route: POST /tracks/:id/play
- Handler accepts optional play_time in request body
- Handler uses existing PlaybackAnalyticsService.RecordPlayback method
- Handler uses standard API response format

Phase: PHASE-2
Priority: P1
Progress: 28/267 (10.5%)
2025-12-24 11:31:02 +01:00
senke
a59c5c446c chore: Update BE-API-018 completion status 2025-12-24 11:29:00 +01:00
senke
02a83c4b71 [BE-API-018] be-api: Implement user block/unblock endpoints
- Added BlockUser and UnblockUser methods to SocialService
- Added BlockUser and UnblockUser handlers in ProfileHandler
- Added routes: POST /users/:id/block and DELETE /users/:id/block
- Handlers use existing SocialService methods
- Includes validation to prevent users from blocking themselves
- Added IsBlocked helper method to check block status
- Handlers use standard API response format

Phase: PHASE-2
Priority: P2
Progress: 27/267 (10.1%)
2025-12-24 11:28:49 +01:00
senke
ad63f139a8 chore: Update BE-API-017 completion status 2025-12-24 11:26:42 +01:00
senke
9c49bce93e [BE-API-017] be-api: Implement user follow/unfollow endpoints
- Added FollowUser and UnfollowUser handlers in ProfileHandler
- Added socialService field and SetSocialService method
- Initialized SocialService in setupUserRoutes
- Added routes: POST /users/:id/follow and DELETE /users/:id/follow
- Handlers use existing SocialService methods
- Includes validation to prevent users from following themselves
- Handlers use standard API response format

Phase: PHASE-2
Priority: P2
Progress: 26/267 (9.7%)
2025-12-24 11:26:32 +01:00
senke
a20266299c chore: Update BE-API-016 completion status 2025-12-24 11:23:44 +01:00
senke
37dfffef6e [BE-API-016] be-api: Implement notifications endpoints
- Standardized API responses in notification handlers
- Replaced c.Get with GetUserIDUUID for consistent user ID extraction
- Added routes: GET /notifications, POST /notifications/:id/read, POST /notifications/read-all
- Initialized NotificationService and NotificationHandlers in router
- Handlers and service already existed, only routes and response standardization were needed

Phase: PHASE-2
Priority: P1
Progress: 25/267 (9.4%)
2025-12-24 11:23:24 +01:00
senke
f737ac81be chore: Update BE-API-015 completion status 2025-12-24 11:21:44 +01:00
senke
75dfad9293 [BE-API-015] be-api: Implement playlist collaborators GET endpoint
- Endpoint already implemented in BE-API-002
- Route GET /playlists/:id/collaborators exists
- Handler GetCollaborators exists and uses standard API response format
- No changes needed

Phase: PHASE-2
Priority: P1
Progress: 24/267 (9.0%)
2025-12-24 11:21:28 +01:00
senke
5372e4fc69 chore: Update BE-API-014 completion status 2025-12-24 11:20:43 +01:00
senke
e502d56d8c [BE-API-014] be-api: Implement track versions restore endpoint
- Added RestoreVersion handler method in TrackHandler
- Initialized TrackVersionService in setupTrackRoutes
- Added POST /tracks/:id/versions/:versionId/restore route (protected)
- Handler uses existing TrackVersionService.RestoreVersion method
- Includes ownership check (only track owner can restore versions)

Phase: PHASE-2
Priority: P2
Progress: 23/267 (8.6%)
2025-12-24 11:20:38 +01:00