Skip to content

feat: Artist follow system, song search, user profiles & wallet history - #225

Merged
Akatenvictor merged 1 commit into
AudioBitsStellar:mainfrom
YazarAyobami:feat/issues-81-82-83-84-follow-search-profile-wallet
Aug 26, 2026
Merged

feat: Artist follow system, song search, user profiles & wallet history#225
Akatenvictor merged 1 commit into
AudioBitsStellar:mainfrom
YazarAyobami:feat/issues-81-82-83-84-follow-search-profile-wallet

Conversation

@YazarAyobami

Copy link
Copy Markdown
Contributor

Summary

Implements four Stellar Wave contributor issues: artist follow system (#81), full-text song search (#82), user profile settings (#83), and wallet balance history (#84).


#81 — Artist Follow/Unfollow System

New Entity: UserFollow (unique on followerId + followingId)

Method Path Auth Description
POST /api/artists/:id/follow Required Follow an artist (idempotent)
DELETE /api/artists/:id/follow Required Unfollow an artist (idempotent)
GET /api/artists/:id/followers Public Paginated follower list
GET /api/artists/:id/following Public Paginated following list
GET /api/feed Required Recent ready songs from followed artists

User profiles now include followerCount and followingCount.


#82 — Full-Text Song Search

Enhanced GET /api/search?q=query:

  • Searches across title, artist name, artist username, genre, composers, description
  • Relevance scoring: exact match > prefix match > contains
  • Returns artist metadata with each result
  • Pagination via page/limit params
  • Enforces min 2-character query

#83 — User Profile Settings

New fields: avatarIpfsHash, isProfilePublic

Method Path Auth Description
PUT /api/users/profile Required Update name (≤50), bio (≤500), avatar, privacy
GET /api/users/profile Required Full own profile
GET /api/users/:id/public Public Public profile (respects privacy)

#84 — Wallet Balance History

New fields on TransactionLog: amount, relatedEntityId, relatedEntityType

GET /api/wallet/history with filters: type, from, to, page, limit

Response includes running balance calculation.


Files Changed (16 files, +758 −31)

File Change
src/entities/UserFollow.ts New
src/entities/User.ts +avatarIpfsHash, +isProfilePublic
src/entities/TransactionLog.ts +amount, +relatedEntityId, +relatedEntityType
src/config/db.ts Register UserFollow
src/services/ArtistProfileService.ts +166 lines
src/services/SongService.ts Enhanced search
src/services/UserService.ts +135 lines
src/services/TransactionLogService.ts +99 lines
src/controllers/ArtistProfileController.ts +74 lines
src/controllers/SongController.ts Paginated response
src/controllers/UserController.ts +53 lines
src/controllers/WalletController.ts +34 lines
src/routes/artistRoutes.ts, userRoutes.ts, walletRoutes.ts New routes
src/app.ts Feed route

TypeScript compiles cleanly (no new errors). ESLint + Prettier passed via pre-commit hooks.

Closes #81, Closes #82, Closes #83, Closes #84

…t history

- AudioBitsStellar#81: Add artist follow/unfollow system with UserFollow entity, follow/unfollow
  endpoints, follower/following lists with pagination, follower counts on profiles,
  and personalized feed endpoint (GET /api/feed) showing recent songs from followed artists
- AudioBitsStellar#82: Enhance song search with full-text matching across title, artist name,
  genre, and description; relevance scoring (exact > prefix > contains); artist
  metadata in results; pagination; minimum 2-char query enforcement
- AudioBitsStellar#83: Add user profile settings with PUT /api/users/profile for updating name,
  bio, avatar, and privacy toggle; GET /api/users/profile for own profile;
  GET /api/users/:id/public for public profiles respecting privacy settings;
  avatarIpfsHash and isProfilePublic fields on User entity; validation (name ≤50,
  bio ≤500)
- AudioBitsStellar#84: Add wallet balance history endpoint (GET /api/wallet/history) with
  filtering by transaction type and date range, pagination, running balance
  calculation, amount/relatedEntity fields on TransactionLog

Closes AudioBitsStellar#81, Closes AudioBitsStellar#82, Closes AudioBitsStellar#83, Closes AudioBitsStellar#84

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
@drips-wave

drips-wave Bot commented Aug 25, 2026

Copy link
Copy Markdown

@YazarAyobami Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@Akatenvictor
Akatenvictor merged commit d1227b8 into AudioBitsStellar:main Aug 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants