Changelog
All notable releases for goongoonalo-main-backend are documented in this file.
Tagged releases currently present in Git:
0.1.00.1.10.1.20.2.00.2.10.2.20.2.30.2.40.2.50.2.60.2.70.2.80.2.90.2.100.2.110.2.120.2.130.2.140.2.150.2.160.2.170.2.180.2.19
[0.2.19] - 2026-07-01
Compare: 0.2.18...0.2.19
Changed
gSDK dependency: Bumped from0.1.116to0.1.117, which adds anormalize_social_linksvalidator onArtistUpdateRequestthat acceptsnulland coerces an empty/falsysocialLinkslist toNone.
[0.2.18] - 2026-06-30
Compare: 0.2.17...0.2.18
Added
Billing — Subscription Coupon Support
SubscriptionService: Full coupon validation and discount resolution for both recurring subscriptions and one-time plan purchases. Coupons are resolved viaget_valid_coupon_by_code(), with percentage and fixed-amount discounts applied to pricing breakdowns and stored gateway metadata.SubscriptionService.validate_coupon(): Replaces the previous placeholder coupon validation endpoint logic. Validates coupon existence, expiry, zone applicability, subscription-plan binding, and returns structured discount details (discount,discountPercent,providerOfferId).- Razorpay offer integration: Recurring subscription purchases now pass
offer_id(fromprovider_offer_id) to Razorpay when a valid coupon is applied; one-time orders reduce the charged amount directly. RazorpayWebhookService._record_coupon_usage(): After subscription activation (one-time and recurring), appends the subscriber tobilling_coupons.availed_usersviaCouponRepository.apply_coupon().- Coupon usage on payment verify: Coupon code is persisted in gateway details during purchase and recorded once payment is confirmed.
Database Migration — 0.2.18
- Drops the legacy
couponstable (01__drop_existing_coupons_table.sql) in favour of the newbilling_couponsschema managed byg-backend-sdk. - Seeds an initial SMA10 subscription coupon via
migrations/0.2.18/initial.py.
Changed
CouponsAPI:validate_couponandvalidate_coupon_postnow delegate toSubscriptionService.validate_coupon()withsubscriptionandperiodparameters; removed the standaloneapply_couponendpoint.CouponsAPI.search_coupons:coupon_typefilter now uses theCouponTypeenum instead of a raw integer.ArtistApplicationService:get_artist_application_status(),get_artist_application(), andsubmit_additional_details()now returnNonewhen no application exists for the user, instead of raisingArtistApplicationNotFoundException. Supports artists who have not yet started the application flow.- SDK bump:
g-backend-sdkproduction dependency updated to0.1.116. - Alembic removed from production requirements (
requirements/prod.in).
Fixed
SubscriptionService: Session is now explicitly committed after applying a coupon during subscription purchase, ensuring coupon usage is persisted before the response is returned.
[0.2.17] - 2026-06-18
Compare: 0.2.16...0.2.17
Added
Home API — G-Originals Content-Type Filter
GET /home/g-originalsnow accepts an optionalcontent_typequery parameter (ContentTypeenum). When omitted the endpoint defaults toContentType.Music, matching previous behaviour for existing clients.HomeService.get_g_originals()passescontent_typethrough to the repository and incorporates it into the Redis cache key (home_g_originals_{content_type}_{page}_{per_page}), so results for different content types are cached independently.
Search — Playlist Owner Name Fields
- Playlist owner entries returned inside search results now include
firstNameandlastNamefields onLeadArtistShortSchema(previously onlystageNameandprofilePicturewere populated).stageNameis also stripped of surrounding whitespace before serialisation.
Changed
- SDK bump:
g-backend-sdkproduction dependency updated to0.1.114.
[0.2.16] - 2026-06-18
Compare: 0.2.15...0.2.16
Changed
- Version and SDK bump release: Application version updated to
0.2.16;g-backend-sdkproduction dependency bumped to0.1.113(requirements/prod.in). No additional backend feature or behavior changes in this release range.
[0.2.15] - 2026-06-17
Compare: 0.2.14...0.2.15
Added
SubscriptionsAPI— subscription plans page endpoint (GET /subscriptions/plans-page): New endpoint that returns a combinedSubscriptionPlanPageDetailsSchemacontaining both the available subscription plans (filtered by country code via?cc=query param, defaulting toIN) and the plans page display texts, eliminating the need for clients to make two separate calls.
[0.2.14] - 2026-06-17
Compare: 0.2.13...0.2.14
Added
PlaylistCRUDRouter— admin studio client detection: A new helper method checks whether a request originates from an admin studio client; when it does, a predefined system user is assigned to the playlist instead of the requesting user, preventing admin-created playlists from being incorrectly attributed to admin accounts.
Changed
ReferralService— simplified referral URL generation: Referrer name derivation no longer performs intermediate string manipulation; lowercase and hyphenation are applied directly during URL construction, resulting in cleaner, more consistent referral URLs.
Fixed
AuthService— session commit after OTP send during registration: Database session is now explicitly committed after the OTP is sent in the registration flow, ensuring the user record is persisted before the client receives the response.
[0.2.13] - 2026-06-16
Compare: 0.2.12...0.2.13
Added
- Live streaming tables (migration
20260616_01): New GetStream-backed live streaming tables added; chat theme column added toapp_settings(migration03);is_visible_to_artistcolumn added toplaylists(migration04). - G-Internal upload management: Full upload management API and services for G-Internal content (
g_upload_service,internal_upload_metadata,internal_upload_studio_service); endpoints exposed viauploads_api; session-based upload flow with S3 integration; internal upload metadata schema and test coverage included. - Promotions API on Home service: Promotions content surfaced on the Home API; related home service and endpoint wiring updated accordingly.
- Claim service — role validation & promotion CRUD: Role validation and promotion CRUD functionality added to
ClaimService; artist application admin service updated to support promotion workflows. - Email notifications — user context & token generation: Email notification system enhanced with user context propagation and temporary access token generation for deep-link notification URLs.
- User profile — acquisition data on update: User profile update flow now captures and persists acquisition data (source, campaign, etc.) in addition to the existing registration path.
- Unique referral payment history constraint (migration
05): Unique constraint on(referred_artist_id)added to the referral payment history table to prevent duplicate payment records. - GetStream artist feed sync script: New
sync_getstream_artist_feed_users.pyscript to reconcile artist feed followers with GetStream state.
Changed
- Dependency injection refactor: Service dependency injections extracted into dedicated
dependencies.pymodules across theartists,billing,webhooks, andstudioapps; API routers updated to consume injected services rather than constructing them inline. - Social publishing services consolidated: All legacy platform-specific publisher files (
facebook_publisher.py,instagram_publisher.py,linkedin_publisher.py,x_publisher.py,youtube_publisher.py) removed; logic consolidated into a unifiedsocial_publish_service;token_manager_serviceremoved; new test coverage added for the consolidated service. GetStreamWebhookService— reaction handling cleanup: Reaction handling logic refactored for readability; redundant branches and dead code removed; test suite significantly expanded.ReferralService— max invites limit removed: Max invites limit check removed to simplify the invite flow.ClaimServicesimplified: Unused role validation and in-progress claim checks removed; service contract cleaned up ahead of the promotion CRUD additions.- Project structure & workspace cleanup: Legacy
manage.pyFlask CLI removed; project folder renamed to reflect the FastAPI backend; workspace configuration corrected. phonenumbersdependency version updated in base requirements.- g-backend-sdk bumped.
Fixed
- Session commit after album contents update:
UserStudioServicenow correctly commits the database session after updating album contents, preventing stale-data responses. - G-Internal upload API paths: Upload endpoint paths corrected; unused legacy content ingest code removed to avoid routing conflicts.
Removed
- Unused social tables (migration
06): Migration added to drop legacy social platform tables no longer referenced by the application. - Legacy data-migration scripts:
migrate_mongo_to_postgres.py,pdl_data_process.py, andsync_mongo.pyremoved (migrations complete; scripts no longer needed).
[0.2.12] - 2026-06-12
Compare: 0.2.11...0.2.12
Added
- App event trigger options endpoint: New
GET /users/journey/triggersendpoint that returns allAppEventsTriggerEnumvalues as selectable options;get_app_event_trigger_options()added toUserStudioServiceto back it. - Typed trigger filter on user journey API: The
trigger_namequery parameter onGET /users/journey/{user_id}is now typed toAppEventsTriggerEnuminstead of a bare string, enabling server-side validation and IDE discoverability. - Playlist visibility restrictions:
PlaylistCRUDRouternow scopes playlist listing to the requesting user for non-admin callers; user association is automatically applied on playlist creation. - Playback session unique constraint per logical session (migration
20260612_01): Replaces the old(user_id, content_id, client_session_id, state)-keyed constraint with(user_id, content_id, client_session_id), allowing a finalized session to be reopened in place rather than spawning a duplicate row. Existing duplicates are de-duplicated on migration. - Session IDs on
app_events(migration20260612_02):client_session_idandserver_session_idcolumns added to theapp_eventstable;client_session_idindexed for performant session-scoped lookups.
Changed
AppEventsService— session tracking refactor: Internal session tracking and playback-session adjustment logic significantly overhauled to align with the new per-logical-session uniqueness model.- PlaylistCRUDRouter — transformation logic: Playlist data transformation refactored for correctness and clarity.
- Note handling in
ArtistsApplicationService: Note handling improved; user retrieval logic for phone-number checks consolidated, removing redundant branches. - Email template service: Template rendering logic enhanced alongside the artist application note improvements.
Fixed
- Column order in initial platform settings insert: Corrected the column order in
migrations/0.2.11/03__insert_initial_platform_settings.sqlto match the table definition.
[0.2.11] - 2026-06-11
Compare: 0.2.10...0.2.11
Added
- Platform-wide settings API: Full CRUD API for platform-wide settings wired into the main application;
PlatformSettingsentity type added to studio event config; initial database migration included. - Threads social publishing: OAuth callbacks and end-to-end publishing support added for the Threads platform in
SocialPublishService. - Social publishing — artist ID resolution & Goongoonalo platform:
SocialPublishServicenow resolves artist IDs before publishing; Goongoonalo platform added as a publishing target; artist existence check added before publish;StreamFeedintegration included. - Platform-wide follows endpoint: New endpoint to follow all platform core artists at once;
LikesService.follow_all_core_artistsadded;AuthServiceupdated to invoke this automatically on new-user signup. - Playlist thumbnails: Thumbnail management endpoints added for playlists; a background task is now enqueued to auto-generate thumbnails for playlists whose thumbnail URL is empty; thumbnail URL extraction added for actors in
GetStreamWebhookService. - GetStream — comment reactions & notifications: Reaction handling and notification dispatch logic added for comment events; recipient push-token resolution added; improved reaction and notification context propagation throughout
GetStreamWebhookService. - G-Originals on Home API:
HomeServiceand the Home API updated to surface G-Originals content alongside other home-feed content. - User acquisition tracking:
AuthServicenow captures and persists user acquisition data (source, campaign, etc.) on registration; corresponding tests added. - Artist application — 5th Circle filter: New filter field added to artist application schemas to identify readiness for the 5th Circle project.
- FCM logout invalidation: Logout flow now invalidates all FCM device registrations for the session, preventing stale push-token deliveries.
- Playback session — device & appInfo tracking:
AppEventsServiceenriched with device metadata andappInfotracking per playback session. - Logo management & welcome notifications: Application logo management enhanced; welcome notifications added for new-user onboarding flows.
g_handleuniqueness migration: SQL migration to deduplicate existingg_handlevalues and add a unique index, preventing duplicates going forward.- Parent album mapping in content lists:
after_listenrichment now attaches parent album metadata to each returned content item.
Changed
generate_temporary_access_token: Renamed fromgenerate_temp_access_tokenthroughout for clarity.- Referral text building: Referral text construction extracted into a dedicated
ReferralServicemethod;PlatformSettingsManagerintegrated to supply configurable referral copy; URL generation logic refactored for readability with an improved fallback. - GetStream webhook — FCM & reaction refactor: FCM token resolution streamlined; reaction-handling and notification logic overhauled for correctness; unused S3 manager and related helper methods removed.
SocialPublishService.disconnect: Now returns the deleted social-account snapshot instead of the updated status object (aligned with the pattern established in 0.2.9).- YouTube API scopes: Scopes updated in
SocialPublishServicefor the required level of access. - Content & library service cleanup:
ContentServiceandLibraryServicerefactored for improved clarity; audio credit handling normalized and canonicalized; credit designations and sort order standardised. get_user_by_iddeprecated: Endpoint annotated as deprecated ahead of removal in a future release.- g-backend-sdk bumped to
0.1.110.
Fixed
- GetStream post-like handling: Webhook service now correctly identifies and routes post-like reactions.
- Duplicate comment-like notifications: Guards added to prevent duplicate push notifications for comment likes; reaction deletion events now handled to clean up notification state.
- Channel metadata for mobile clients: Chat channel
nameandimagefields are now always populated, fixing display issues in mobile clients. - User handle suggestion: Handle suggestion now derives from the first name only (was incorrectly requiring a full name).
- Artist service — forbidden exception:
StudioRoleNotFoundExceptionreplaced withForbiddenExceptioninArtistService; user-not-found handling inAuthServicecleaned up. - Artist application CRUD — field casing: Search and sortable field names corrected to camelCase, matching the API contract.
- Auth session handling:
AuthServicesession management refactored;LikeRepositoryintegrated to support post-like state checks during session setup.
Removed
sync_mongo.pyMongoDB-to-PostgreSQL user data synchronisation script (migration complete; no longer needed).- Redundant
IAPServicetest file removed; all tests consolidated intest_iap_service.py.
[0.2.10] - 2026-06-05
Compare: 0.2.9...0.2.10
Added
- Content export router: Wired the content export router into the FastAPI application, making the media-library CSV export endpoints (job creation, status polling, and download) fully reachable in the running server.
- Album details — optional content type:
getAlbumDetailsendpoint updated so thecontentTypefilter parameter is now truly optional, allowing callers to fetch full album details without specifying a content type.
Changed
- Artists report API:
StatsServiceandArtistsReportServiceenriched with comprehensive type hints; artist-filtering logic in report generation improved for accuracy; report generation API updated to reflect the revised service interface. - Google Vision moderation: Google Vision moderation service further enhanced alongside the 0.2.10 environment configuration update.
Fixed
- OTP verification — universal OTP: OTP verification logic updated to correctly recognise and handle the universal OTP setting, and to guarantee that a request ID is always generated before the OTP is validated.
- OTP session persistence: OTP request is now explicitly persisted to the database session before the verification response is returned, preventing a session rollback from silently discarding the record.
- Production house migration: Corrected a column name syntax error in the SQL migration that replaces
productionHousewithlabelin theaudio_creditstable.
[0.2.9] - 2026-06-04
Compare: 0.2.8...0.2.9
Added
- FCM / Push notifications: Enhanced FCM token management with subscription synchronization and previous-token tracking; backfill script to register existing device tokens against Firebase topics.
- User playback analytics:
PlaybackRepositoryintegrated intoUserServiceandAppEventsService;get_mefor free-plan users now returns session and listening-activity data alongside profile information. - Monthly plays API: New endpoint returning per-content monthly play counts; content plays service refactored for improved aggregation and data handling.
- App events: Background task handling for app-event processing; ad events now distinguished from regular events in processing logic; event persistence (
db_persist) moved from hardcoded value to a configuration setting; improved event saving and retry logic. - Content export API: Media library CSV export with job creation, status polling, and download endpoints — enables bulk data extraction from the studio content library.
- Lyricist mapping backfill: Processor that reads an Excel file and backfills lyricist assignments in audio credits for existing tracks.
- YouTube publishing: Support for custom titles, descriptions, and thumbnails in YouTube video uploads via the social publishing service.
- Instagram / Facebook improvements: Instagram user polling token retrieval added; Facebook page access token resolution improved; unnecessary token-expiration logic removed from both
SocialPublishServiceandTokenManagerService; Facebook page-not-found exception handled gracefully; social account sync timeout increased. - Google Vision content moderation: Google Vision moderation service integrated for social post image validation before publishing; moderation status and result fields added to the
social_poststable. - Filterable playlists: Filterable fields (search, sort, filter operators) added to the Playlists CRUD router.
- Album enhancements:
getAlbumDetailsnow accepts acontentTypeparameter;isTranscodedfilter added toAlbumCRUDRouter; content album service handles missing content references gracefully. - ArtistContentService: Lead artist transformation logic improved; new service methods to fetch an artist's latest releases and following status from the calling user's perspective.
- Artist & claim APIs: Additional-details submission and retrieval endpoints added; admin claim-management API; Simple OTP phone verification flow; email template service with HTML notifications for applications and claims.
- Identity verification: Aadhaar and live-photo fields on artist applications with service-layer persistence.
- Artists report: Background CSV report generation for the admin panel with a dedicated download endpoint.
- GetStream / live: Live chat notifications for artists; livestream handling updates; chat token endpoint;
StreamSyncServiceconsolidation replacing scattered direct service calls. - Social publishing (G-Amplify): Full Social Publishing API — connections management, scheduled post CRUD, manual Facebook page connect, presigned social-media upload URL,
tagscolumn onsocial_posts, publishers for Instagram / Facebook / LinkedIn / X (Twitter), retry for failed platform posts, OAuth 1 support for X, Jinja2 template integration for amplify flows, G-Amplify endpoint. - Audio credits: Label and publisher filters on album and content APIs; SQL migrations replacing
productionHousedesignation withlabelinaudio_creditstable and dropping copyright-year columns. - Subscription plans page API: New endpoint dedicated to the subscription plans display page; response model updated to
SubscriptionPlanDetailResponse. - Subscription plan display: Enhanced defaults and seed data on
subscription_plan_displaytable. - Explicit session commits:
session.commit()calls added across multiple services to ensure database writes are persisted reliably rather than relying on implicit flush. - Ops scripts: Script to list and delete orphaned Celery SQS queues.
- UNION ALL query optimisation: Song-count query for artist credits rewritten using
UNION ALLfor improved performance.
Changed
PlaybackRepositoryreplacesAppEventsRepository: Dashboard and spotlight services now usePlaybackRepositoryfor live listener and playback data; corresponding unit tests updated.- Collaborator filter removed from content queries: Filter commented out across album, content, and related services to streamline queries while a revised approach is determined.
- OTP background work: App type included in OTP background task; free-subscription attachment managed within the same flow.
- User service simplifications:
UserServiceinstantiation streamlined; user update logic now passes the update payload directly to the repository; unusedSettingsRepositoryremoved. - Artist ID normalisation: Custom inline artist-ID normalisation replaced with a shared utility function for consistency across services.
SocialPublishService.disconnect: Now returns the deleted social-account snapshot instead of the updated status object, giving callers richer context on what was removed.- DRM service JWT decode: Updated to use
decode_unsafe_tokenfor DRM authorization flows. - Utility imports: Import paths for file utility functions and other shared helpers updated across multiple services for clarity and consistency.
- Dropped
artist_applicationtable: Legacy table removed; application flows consolidated on the current schema. - Production-house filters renamed to label:
audioCreditsProductionHousefilter parameters renamed toaudioCreditsLabelthroughout album and content APIs; publisher filters added in parallel. - Facebook credentials:
FACEBOOK_APP_ID/FACEBOOK_APP_SECRETenv vars replaced withMETA_APP_ID/META_APP_SECRET. - g-backend-sdk stage reference: Stage (
stage.in) requirements updated to track thedevelopbranch of the SDK (0.1.107-rc2). - Reverted GetStream experiment: Interim PR #382 (subscription-plan/notification enhancements via GetStream) reverted; targeted live-chat and GetStream fixes introduced separately are retained.
Removed
- Revenue runner script and its associated CLI entry point.
- Deprecated
playback_service.py— functionality absorbed byPlaybackRepository. - Deprecated user profile settings endpoints and related settings-API logic.
- User management endpoints temporarily removed (to be re-introduced with revised design).
- Unused
timedeltaimport fromspotlight_service.py.
Fixed
appTypecorrected inlive_serviceandnotification_serviceto reflect the proper application context.- JSON formatting error in the main workspace configuration file.
- Social publish API error responses now consistently use
ErrorDetailSchemainstead of an ad-hoc dict shape. - Unused imports cleaned up in
google_iap_api.py.
[0.2.8] - 2026-05-21
Compare: 0.2.7...0.2.8
Added
- IP2Location geolocation service: Integrated the IP2Location database for server-side geolocation lookups; added dedicated endpoints for client IP lookups and arbitrary IP queries. IP2Location database files relocated to the
constraints/directory and all references updated accordingly. - Subscription plan display table: New
subscription_plan_displaytable with initial seed data and indexes; backed by a full CRUD service layer so plans can be managed without schema changes. - GIN index on
audioFeatures: Added a GIN index on theaudioFeaturesJSONB column in thecontentstable for significantly faster audio-feature queries. - Vendor upload task cancellation: Incomplete vendor upload tasks can now be cancelled programmatically, allowing operators to trigger a clean manual restart without database surgery.
Changed
- Apple IAP — app account token:
app_account_tokenrenamed toincoming_app_account_tokenthroughout the Apple IAP validation path and related tests for clarity on its role as an inbound value. - Referral URL generation: User details (name, identifier) are now embedded in referral URLs to improve referrer identification on the receiving end.
- Backend SDK bumped to
0.1.106.
Fixed
- Removed stale
type: ignorecomments from IP2Location imports and tightened error handling in the geolocation service so type errors surface at lint time rather than silently at runtime.
[0.2.7] - 2026-05-19
Compare: 0.2.6...0.2.7
Added
audioFeaturescolumn oncontents: New JSONB column stores audio feature data (key, BPM, energy, etc.) directly on content records, enabling audio-feature-driven queries and filtering.- Countries table rebuild:
countriestable recreated with proper constraints, foreign keys, and indexes for data integrity; migration adds enhanced fields (ISO codes, region, calling code) and seeds the full country list. - IAP country code & period type: Both Apple and Google IAP service methods now accept and persist
countryCodeandperiodType, giving subscription records accurate geographic and billing-cycle context. - Apple IAP —
period_typeparameter: Addedperiod_typeto Apple IAP transaction validation and subscription-sync methods so intro/promotional period handling is correctly reflected in the subscription record. - Apple IAP — upcoming user ID handling: Transaction validation now processes the
upcoming_user_idfield from Apple's server notifications, enabling pre-emptive subscription transfers before they take effect. - Google Play subscription ownership validation: New endpoint and service method to verify that a given Google Play purchase token belongs to the authenticated user.
- Google Play purchase ownership resolution:
IAPServicecan now resolve the owner of a Google Play purchase from the Google order ID; backfill job added to repair invoice pricing charges on existing transactions. - Google order ID normalisation: Normalization logic added to handle multiple Google order ID formats; subscription owner recovery from a user's Google email address implemented with corresponding tests.
- Google IAP — resubscribe context preservation: Webhook handler now carries resubscribe context through to the acknowledgment step, preventing loss of resubscription metadata in the Google IAP event flow; unit test added.
- Unresolved subscription owner handling: IAP service gracefully handles the case where a subscription owner cannot be resolved, logging the event and surfacing a structured error rather than crashing the webhook.
- Apple & Google ownership validation endpoints: Dedicated REST endpoints for clients to validate subscription ownership for both platforms, backed by new service methods.
- CORS middleware: CORS middleware added to allow cross-origin requests; vendor upload maximum row limit increased from 500 to 2,000 rows.
- Deployment: version migration handling: Deployment script now detects version mismatches during migration runs and surfaces enhanced error messages to make failed upgrades easier to diagnose.
Changed
- IAP service divisor constants: Hard-coded divisor values moved to application settings; payment amount calculation logic improved for correctness across currencies.
- IAP country & period type from payload: Country code and period type are now derived directly from the inbound transaction payload rather than being looked up separately, reducing round trips.
- Apple & Google IAP webhooks — session context: Webhook handlers refactored to use an explicit DB session context, improving transaction isolation and error recovery.
- Transaction service charge validation: Divisor included in the charge validation step to ensure amounts in minor units are correctly validated before being stored.
- Google Play period type: Period type support propagated through Google Play subscription validation and all downstream services that consume the subscription record.
- Deployment script
DATABASE_URLhandling: Environment variable loading made safer —DATABASE_URLis now read and exported in a way that prevents shell-expansion issues on strings containing special characters. - Deployment scripts refactored: Migration scripts versioned under
0.2.7; deployment workflow updated to include countries-table and audio-features migrations in the correct order. - Homepage & root endpoint: Landing page title updated; root-endpoint logic streamlined to reduce boilerplate.
- Backend SDK: Bumped to
0.1.105in production; staging tracked through0.1.105-rc1→0.1.105-rc11during the release candidate cycle.
Fixed
- Razorpay invoice generation: Edge cases in tax-payload construction corrected; invoice generation task enqueueing fixed; error reporting improved for failed attempts.
GoogleIAPError→GoogleIapException: Incorrect exception class replaced acrossIAPServiceand the Google IAP webhook service so exception handling is consistent with the SDK.- IAP webhook error responses: Apple and Google IAP webhook handlers now return structured error responses and log failures with enough context for post-incident debugging.
[0.2.6] - 2026-05-14
Compare: 0.2.5...0.2.6
Added
RazorpayHostedInvoiceService: New service for managing Razorpay hosted invoices — creates, issues, and cancels invoices as part of the subscription payment lifecycle.- Google IAP support: Full Google Play in-app purchase flow — webhook handler, server-side purchase validation, and transaction creation (amounts stored in minor units).
- Invoice generation task enqueueing in the Razorpay webhook service so invoice work is dispatched asynchronously after payment events.
- Invoice task management in the Razorpay webhook service to track and reconcile pending invoice jobs.
- Google and Apple product IDs exposed in subscription plan detail responses.
- Subscription resolution and service-period backfilling in
TransactionServiceso existing transactions gain correct period metadata retroactively. - Service-period formatting helpers across
IAPServiceandTransactionServicefor consistent period display. pg_trgmPostgreSQL extension enabled via migration to power fuzzy text-similarity search.- Payment Gateway Plans CRUD: New endpoints and service layer for managing gateway-specific subscription plans.
totalSongsfield added to artist responses;ArtistCRUDRoutersorting logic enhanced to support it.- Migration scripts to convert
PaymentMethod→PaymentMethodTypeand to backfillgdpZoneId/periodIdon existingUserSubscriptionsrows. - Unit tests for
CRUDRouterextended filter operators (regex and fuzzy similarity).
Changed
- Subscription service enhanced with GDP zone and period resolution, pricing breakdown, tax handling, and verified-payment processing for both Razorpay and IAP flows.
- Razorpay subscription handling updated with improved cycle-count logic and support for one-time and recurring plan variants.
- IAP service updated to handle payment amounts in subunits (Apple and Google) and to sync expired subscriptions during reconciliation.
- Transaction currency fields normalised in the Razorpay webhook service for consistent downstream processing.
- User email validation tightened in the subscription service; user update logic improved to handle partial field changes more reliably.
- Lead artist transformation refactored for reuse; live-event content retrieval updated accordingly.
- Backend SDK bumped to
0.1.104.
Fixed
- Capped Razorpay maximum subscription duration at 5 years to prevent out-of-range plan creation.
- Removed hardcoded error message from
validate_google_iap_purchase— errors now propagate the actual upstream message. - Improved "user not found" error messages in
AuthServicefor clearer client-side diagnostics.
Refactored
ErrorDetailrenamed toErrorDetailSchemain Google IAP API usage, matching the SDK-level rename.- Type annotations cleaned up across subscription and transaction services.
- Removed unused method from
UserCRUDRouter; subscription status handling streamlined.
[0.2.5] - 2026-05-08
Compare: 0.2.4...0.2.5
Added
MergeJobStore(apps/studio/services/merge_job_store.py): Redis-backed job store for PDL metadata merge jobs, replacing the previous in-memoryMERGE_JOBSdict. Job metadata is keyed atmerge_job:{job_id}with a 1-hour TTL; merged CSV bytes are stored separately atmerge_job_csv:{job_id}(base64-encoded) with a 5-minute TTL. Providescreate,update,get,store_csv,get_csv,mark_completed,mark_failed,cancel, andis_cancelledasync methods.MergeJobStore.for_thread()class method that creates a store with a fresh Redis connection (bypassing thelru_cachesingleton) for safe use inside sync background tasks running their own event loop.
Changed
- PDL merge background task and all four merge endpoints (
start,status,cancel,download) migrated from the in-memoryMERGE_JOBSdict toMergeJobStore, making job state visible across all Gunicorn workers. - Download endpoint now reads CSV bytes from Redis instead of process memory; returns
404with a clear message if the 5-minute CSV TTL has elapsed.
Fixed
- Background task event-loop conflict under multi-worker Gunicorn: the task now creates its own
asyncioevent loop and a dedicated Redis connection viaMergeJobStore.for_thread(), avoiding "Future attached to a different loop" errors caused by the shared singleton client.
[0.2.4] - 2026-05-08
Compare: 0.2.3...0.2.4
Added
- PDL Metadata Merge: New REST endpoints to start, poll, and cancel PDL metadata merge jobs —
/system/pdl-merge/start,/system/pdl-merge/status/{job_id}, and/system/pdl-merge/cancel/{job_id}. - In-memory job store: Merge job states and progress are tracked in memory so clients can poll for real-time status without hitting the database.
- PDL merge logic migrated from a standalone script into the
VendorUploadService, enabling S3 integration and on-the-fly CSV generation directly from the service layer. - Enhanced error handling and structured logging throughout the merge pipeline for better traceability when processing large PDL datasets.
Changed
- Backend SDK bumped to
0.1.102.
[0.2.3] - 2026-05-06
Compare: 0.2.2...0.2.3
Added
- User app settings are now auto-created on first fetch — the new
get_or_create_user_settingspath eliminates 404 errors on fresh accounts and removes the need for a separate creation step. - Artist chat token is generated and saved to the artist's profile during GetStream chat channel creation, so the token persists across sessions and is always consistent with the stored channel details.
- Album CRUD now supports filtering by
audioCreditsDistributorandaudioCreditsProductionHouse— these filters query nested content audio-credit records to locate albums where a specific artist appears in those credit roles. - Live event artist responses now include an
isLive: trueflag, so clients no longer need to infer live status from context. - Tasks/Jobs: Subscription expiry reconciliation periodic task that runs every 10 minutes (configurable via
SUBSCRIPTION_EXPIRY_RECONCILE_INTERVAL), proactively marking overdue subscriptions as Expired to keep read-time checks accurate. - Tasks/Jobs: Bulk review handler for content and event approvals, allowing moderators to approve or reject multiple items in a single request.
- Tasks/Jobs: Custom notification delivery update task for tracking and persisting notification status changes.
- Tasks/Jobs: Vendor upload processing now copies album group thumbnails and tracks source file paths through the pipeline.
- Tasks/Jobs: Missing playlist thumbnails are now auto-generated as part of vendor upload post-processing.
Changed
- Lead artist transformation refactored to reuse a single
LeadArtistsTransformerinstance and a shared artists map per request, reducing redundant database fetches when rendering live-event artist listings. - Backend SDK updated to
0.1.101across both production and staging. - Removed the unused
HundredMsWebhookServiceand cleaned up stale imports in the AWS webhook service. - Tasks/Jobs: Album upsert context added to vendor upload processing so re-uploaded albums correctly update existing records instead of creating duplicates.
- Tasks/Jobs: Vendor upload error reporting enhanced with more detailed messages, stricter header validation, and deferred content linking to improve reliability on large batches.
Fixed
- Corrected folder names in the workspace configuration file.
[0.2.2] - 2026-04-27
Compare: 0.2.1...0.2.2
Added
- Added new user analytics endpoints so the admin panel can show per-user insights — including when a user listens most, how many hours they use the app, their listening habits (plays, skips, completions), top genres, favourite artists, how they discover tracks, and a content-type breakdown.
- End dates on all analytics queries are now treated as inclusive, so filtering "up to April 27" returns data for the full day of April 27.
Changed
- Improved invoice and payment details handling in the transaction service — tax details are now backfilled from the user's active subscription when missing from invoice data, so transaction records are more complete.
- Improved subscription service to pull payment method details from recent transactions when they are not directly available, reducing gaps in payment history.
- Improved Razorpay webhook handling with better error recovery and more complete payment detail fetching.
- Added
upcCodeto album search fields in the album CRUD router. - Updated backend SDK reference requirements to
0.1.100.
Fixed
- Fixed shared cache entries not being cleared after create, update, or delete operations, which could cause stale data to be returned.
- Fixed idle transaction risk by committing status changes before external API calls.
[0.2.1] - 2026-04-23
Compare: 0.2.0...0.2.1
Fixed
- Fixed a crash in the OTP request flow that occurred when no matching user was found — the service now handles this case gracefully instead of raising an error.
[0.2.0] - 2026-04-23
Compare: 0.1.2...develop-new
Added
- Expand CRUD tooling with request context propagation, richer sorting, new filter operators, audit logging, and dedicated artist app-event CRUD support.
- Add studio event CRUD and tracking flows, new album
created_atfilters, event-ticket wiring, and hard-delete cleanup for same-day contents and albums. - Add richer custom notification capabilities with age-group targeting, gesture playback app settings support, and
starCastexposure in content and search responses. - Add an Alembic migration that converts
users.genderfrom PostgreSQL enum storage to integer-backed values while repairing existing rows during the upgrade.
Changed
- Bump the application version to
0.2.0. - Refactor custom notification services and tighten dashboard query handling, including user creation-date filters in consolidated statistics.
- Move the backend SDK dependency to
0.1.99and align backend user-gender persistence with the SDK's integer-backed model.
Fixed
- Fix custom notification behavior after the service refactor.
- Align staging SDK dependency updates required by the
0.2.0branch train. - Fix gender demographic labeling and legacy Mongo-to-PostgreSQL user gender remapping to match the new integer representation.
[0.1.2] - 2026-04-22
Compare: 0.1.1...0.1.2
Fixed
- Repair automated deployment after the
0.1.1release cut.
[0.1.1] - 2026-04-22
Compare: 0.1.0...0.1.1
Added
- Add vendor-upload ingestion and PDL processing, along with direct database checks for incomplete uploads.
- Add featured video URL support for artists and contents, web-view token generation and verification, playlist reordering hooks, referral balance endpoints, dynamic artist referral URLs, default artist profile images, and file-browser support.
- Introduce studio event APIs with new query parameters and schema/index work, plus bulk content and event moderation improvements and collaborator-aware content queries.
Changed
- Refresh mobile-app details behavior and notification subscription handling while the backend SDK moved through the
0.1.96to0.1.98train. - Improve deployment workflow automation and release version handling ahead of the
0.1.1and0.1.2releases.
Fixed
- Fix non-published content approval, media status updates, referral and refund issues, force-update logic, phone-normalization conflicts, and deployment workflow problems.
[0.1.0] - 2026-03-28
Added
- Launch the FastAPI and SQLModel backend foundation with modular apps for auth, content, artists, studio, registry, analytics, billing, getstream, and webhooks.
- Implement OTP authentication, token and logout flows, user CRUD, content, album, artist, studio, events, notifications, and dashboard APIs, plus health and landing pages.
- Add MongoDB-to-PostgreSQL migration tooling, playlist caching, share-link improvements, transaction detail responses, artist app-event background tasks, media-processing utilities, and private-SDK-aware CI and deployment automation.
Changed
- Restructure the codebase from its early monolithic layout into modular
gcore packages and service-specific FastAPI apps. - Harden deployment scripts and GitHub Actions for environment-specific releases, private dependency access, ownership fixes, and release validation.
Fixed
- Resolve template rendering issues, payment-gateway plan validation, share-link payload handling, restore and deployment scripts, and server permission problems.