Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
929 commits
Select commit Hold shift + click to select a range
15ee486
Merge pull request #139 from Rythmify/M8-discovery-search-feed
nourabosaif Apr 25, 2026
ecc92b7
Update openapi.yaml
SajaAboulmagd05 Apr 25, 2026
54430c1
added soft delete
SajaAboulmagd05 Apr 25, 2026
458866e
added cover_IMAGE to result of search in playlist
SajaAboulmagd05 Apr 25, 2026
29f3bf4
prettier
SajaAboulmagd05 Apr 25, 2026
49227c5
Merge branch 'development' into M12-Subscription
omar13Hamdy37 Apr 25, 2026
8c2bbb0
feat(tracks): add offline download URL endpoint for premium users
omar13Hamdy37 Apr 25, 2026
b807487
Merge pull request #140 from Rythmify/M8-discovery-search-feed-fixed
OmarHamza22 Apr 25, 2026
7185f0c
Merge branch 'development' into M12-Subscription
OmarHamza22 Apr 25, 2026
3f230b8
Merge pull request #136 from Rythmify/M12-Subscription
OmarHamza22 Apr 25, 2026
34dc373
feat(playback): add cover image field to track metadata and responses
omar13Hamdy37 Apr 25, 2026
ed5a3c0
style(playback): style softDeleteListeningHistoryByUserId test
omar13Hamdy37 Apr 25, 2026
d08aea5
Merge pull request #141 from Rythmify/m5-playback
BisoLab Apr 25, 2026
4c5ad93
feat: add Firebase Cloud Messaging environment variables to CI/CD wor…
Abasy714 Apr 25, 2026
6a4b96b
Merge branch 'development' into devops-infra
Abasy714 Apr 25, 2026
2d7bf10
Merge pull request #142 from Rythmify/devops-infra
OmarHamza22 Apr 25, 2026
c69b19f
refactor(playlists)
alyaa18 Apr 25, 2026
9bfb856
Merge branch 'development' into M7_Sets-&-Playlists
OmarHamza22 Apr 25, 2026
018f2c3
Merge pull request #143 from Rythmify/M7_Sets-&-Playlists
OmarHamza22 Apr 25, 2026
2499e0f
fix(albums): correct wrong column name user_id → artist_id in album-l…
OmarHamza22 Apr 25, 2026
ae262c5
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 Apr 25, 2026
07b8c26
Merge pull request #144 from Rythmify/M8-discovery-search-feed
Abasy714 Apr 25, 2026
e501d95
feat(rate-limiter): refactor limiters to use createLimiter function a…
omar13Hamdy37 Apr 25, 2026
205948d
refactor(notifications)
alyaa18 Apr 25, 2026
011e156
feat(rate-limiter): enhance track routes with additional rate limiter…
omar13Hamdy37 Apr 25, 2026
fdaa67d
feat(rate-limiter): add playback write limiter to history and playbac…
omar13Hamdy37 Apr 25, 2026
f1a3034
feat(rate-limiter): add subscription write limiter to checkout, mock …
omar13Hamdy37 Apr 25, 2026
0b63489
feat(subscriptions): enhance subscription plans with user roles and d…
omar13Hamdy37 Apr 25, 2026
d38b3b3
migration to backfill playlists cover images
alyaa18 Apr 25, 2026
e88b096
fix: unify follower counts across suggestion endpoints
OmarHamza22 Apr 25, 2026
6e9a378
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 Apr 25, 2026
b88be80
Merge branch 'development' into M7_Sets-&-Playlists
OmarHamza22 Apr 25, 2026
a5a3569
feat(playlists): implement playlist creation limit based on user subs…
omar13Hamdy37 Apr 25, 2026
baf94e6
Merge pull request #147 from Rythmify/M8-discovery-search-feed
Abasy714 Apr 25, 2026
4a61724
Merge branch 'development' into M7_Sets-&-Playlists
OmarHamza22 Apr 25, 2026
f587856
Merge pull request #146 from Rythmify/M7_Sets-&-Playlists
OmarHamza22 Apr 25, 2026
beecb18
Merge branch 'development' into M9-Notifications
alyaa18 Apr 25, 2026
f08605c
refactor(playlists): remove subtype filter from countUserRegularPlayl…
omar13Hamdy37 Apr 25, 2026
44f4733
Fix Pipeline
OmarHamza22 Apr 25, 2026
42e6b82
Merge branch 'M8-discovery-search-feed' of https://github.com/Rythmif…
OmarHamza22 Apr 25, 2026
91155f1
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 Apr 25, 2026
c29cda2
Merge pull request #148 from Rythmify/M8-discovery-search-feed
Abasy714 Apr 25, 2026
b679fea
Merge branch 'development' into M9-Notifications
OmarHamza22 Apr 25, 2026
880e52f
fix(tracks): Update track fan leaderboard query to include soft-delet…
omar13Hamdy37 Apr 25, 2026
af9052a
Merge pull request #145 from Rythmify/M9-Notifications
OmarHamza22 Apr 25, 2026
924834b
Merge branch 'development' into m4-tracks
omar13Hamdy37 Apr 25, 2026
19ab8ab
Merge pull request #149 from Rythmify/m4-tracks
BisoLab Apr 25, 2026
e35df37
Merge branch 'development' into M12-Subscription
omar13Hamdy37 Apr 25, 2026
c37ae70
style(subscriptions): formatting of getPremiumDisplayNameForRole func…
omar13Hamdy37 Apr 25, 2026
764576d
perf: optimize DB connections and fix race conditions in social modules
Beshoy205 Apr 26, 2026
3fe701a
Merge branch 'development' into M6-M3-Integration
Beshoy205 Apr 26, 2026
c334e8a
Code style: fix formatting and lint issues
Beshoy205 Apr 26, 2026
7f0f466
Merge branch 'M6-M3-Integration' of https://github.com/Rythmify/backe…
Beshoy205 Apr 26, 2026
da7b2c4
updated(messaging socket):removed all validations
alyaa18 Apr 26, 2026
e9719e4
Merge branch 'development' into M9_Messaging
alyaa18 Apr 26, 2026
86ca105
Merge pull request #152 from Rythmify/M9_Messaging
Abasy714 Apr 26, 2026
55b37a8
Merge branch 'development' into M12-Subscription
omar13Hamdy37 Apr 26, 2026
6ca956e
feat(Subscription): enhance subscription model to support duration in…
omar13Hamdy37 Apr 26, 2026
da9e16d
feat(Subscription): add development reset endpoint and testing utilit…
omar13Hamdy37 Apr 26, 2026
17e84b8
feat(Subscription): add development-only subscription reset endpoint …
omar13Hamdy37 Apr 26, 2026
8867043
style(Subscription): streamline subscription refresh logic for improv…
omar13Hamdy37 Apr 26, 2026
9189a17
Merge pull request #150 from Rythmify/M12-Subscription
BisoLab Apr 26, 2026
e2c9c74
Merge branch 'development' into M6-M3-Integration
Beshoy205 Apr 26, 2026
32add12
Merge pull request #151 from Rythmify/M6-M3-Integration
OmarHamza22 Apr 26, 2026
4963f78
Fix playlist lookup for UUID-like seeded IDs
OmarHamza22 Apr 26, 2026
086884f
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 Apr 26, 2026
26238ad
Merge pull request #153 from Rythmify/M8-discovery-search-feed
Abasy714 Apr 26, 2026
05629d7
Unify feed track URLs and user profile_picture fields
OmarHamza22 Apr 27, 2026
7323832
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 Apr 27, 2026
bcbecc5
Run Prettier
OmarHamza22 Apr 27, 2026
b616e99
Merge branch 'M8-discovery-search-feed' of https://github.com/Rythmif…
OmarHamza22 Apr 27, 2026
72a7bf7
Merge pull request #154 from Rythmify/M8-discovery-search-feed
Abasy714 Apr 27, 2026
b619f8d
added albums to everything endpoint
SajaAboulmagd05 Apr 27, 2026
91d8d1d
added search for one char
SajaAboulmagd05 Apr 27, 2026
2de6e45
fix(auth): refresh token cookie and fix CORS for deployed backend
OmarHamza22 Apr 27, 2026
ba3967d
Merge pull request #155 from Rythmify/M8-discovery-search-feed
Abasy714 Apr 27, 2026
b41c981
fix(admin-moderation): harden moderation flows, audit logs, and migra…
OmarHamza22 Apr 27, 2026
6adbe4b
Merge branch 'development' into Admin
OmarHamza22 Apr 27, 2026
dd08729
Run prettier
OmarHamza22 Apr 27, 2026
a0ac65a
Merge pull request #156 from Rythmify/Admin
Abasy714 Apr 27, 2026
9711fa8
resolve endpoint handling different formats of playlists and tracks
SajaAboulmagd05 Apr 27, 2026
12de238
displaying my own reposts and posts in the feed
SajaAboulmagd05 Apr 27, 2026
9ecb2b4
prettier
SajaAboulmagd05 Apr 27, 2026
256514f
Merge branch 'development' into M8-discovery-search-feed-fixed
SajaAboulmagd05 Apr 27, 2026
5de0a7a
refactor(notifications):only notify posts if public
alyaa18 Apr 27, 2026
71d581f
Merge pull request #157 from Rythmify/M8-discovery-search-feed-fixed
OmarHamza22 Apr 27, 2026
db53d85
fix(feed): return real mix UUIDs for made-for-you daily and weekly en…
OmarHamza22 Apr 27, 2026
bb96272
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 Apr 27, 2026
c94ccfd
Merge branch 'development' into M9-Notifications
OmarHamza22 Apr 27, 2026
c686fc0
Merge pull request #159 from Rythmify/M8-discovery-search-feed
Abasy714 Apr 27, 2026
2b8983c
Merge branch 'development' into M9-Notifications
OmarHamza22 Apr 27, 2026
9c4244b
Replace old seed migrations with dev seeds
Abasy714 Apr 27, 2026
f830474
fix(track-processing): update preview generation to use middle 30s or…
omar13Hamdy37 Apr 27, 2026
4d32ee8
Merge branch 'development' into DB-Migrations
OmarHamza22 Apr 27, 2026
9ace741
Run Prettier
OmarHamza22 Apr 27, 2026
25b9809
Merge pull request #161 from Rythmify/DB-Migrations
OmarHamza22 Apr 27, 2026
f353f47
Merge branch 'development' into m4-tracks
OmarHamza22 Apr 28, 2026
58a821e
Merge branch 'development' into M9-Notifications
OmarHamza22 Apr 28, 2026
1fd9d9e
Merge pull request #160 from Rythmify/m4-tracks
OmarHamza22 Apr 28, 2026
4086cad
Merge branch 'development' into M9-Notifications
OmarHamza22 Apr 28, 2026
cafc06d
Merge pull request #158 from Rythmify/M9-Notifications
OmarHamza22 Apr 28, 2026
d6aa798
Merge branch 'development' into Rate-Limits-M4-M5-M12
omar13Hamdy37 Apr 28, 2026
fa9a716
feat(notification):add premium notification
alyaa18 Apr 28, 2026
fff27a4
Add user premium and blocked status to comments and user models
omar13Hamdy37 Apr 28, 2026
06063aa
Refactor rate limiter imports for consistency in playback and tracks …
omar13Hamdy37 Apr 28, 2026
09b0e1d
fix(sockets): fix ioRef initialization and duplicate middleware in no…
alyaa18 Apr 28, 2026
9e1cf91
Merge pull request #163 from Rythmify/Rate-Limits-M4-M5-M12
BisoLab Apr 28, 2026
d7c7926
Add Prometheus metrics middleware and update unit test coverage thres…
Abasy714 Apr 28, 2026
25f392b
added username to playlists, tracks and albums result
SajaAboulmagd05 Apr 29, 2026
5ca96c6
updated the resolve endpoints to handle the correct urls
SajaAboulmagd05 Apr 29, 2026
0bc9c02
prettier
SajaAboulmagd05 Apr 29, 2026
9e1385b
Merge pull request #164 from Rythmify/M8-discovery-search-feed-fixed
nourabosaif Apr 29, 2026
69a7efd
Unit tests playlists
alyaa18 Apr 29, 2026
08610ef
fixed feed from showing auto-generated playlists
SajaAboulmagd05 Apr 29, 2026
14bf1dd
Merge branch 'development' into M8-discovery-search-feed-fixed
SajaAboulmagd05 Apr 29, 2026
744c6b8
Merge pull request #165 from Rythmify/M8-discovery-search-feed-fixed
nourabosaif Apr 29, 2026
26aac4b
feat(tracks): add endpoint to replace track audio and restart processing
omar13Hamdy37 Apr 29, 2026
2af4014
Merge branch 'development' into m4-tracks
omar13Hamdy37 Apr 29, 2026
56d8c93
updated user register after being deleted
SajaAboulmagd05 Apr 29, 2026
ee39f90
prettier
SajaAboulmagd05 Apr 29, 2026
a285bc7
Merge branch 'development' into devops-infra
Abasy714 Apr 29, 2026
cd49052
Merge pull request #167 from Rythmify/devops-infra
OmarHamza22 Apr 29, 2026
3aac038
Add Redis environment variables to deployment script
Abasy714 Apr 29, 2026
83f660d
Merge branch 'development' into devops-infra
Abasy714 Apr 29, 2026
bec4eec
Merge pull request #168 from Rythmify/devops-infra
Abasy714 Apr 29, 2026
58ca991
updated the feed discovery and following
SajaAboulmagd05 Apr 29, 2026
9a41c16
prettier
SajaAboulmagd05 Apr 29, 2026
a615e3b
Merge branch 'development' into M8-discovery-search-feed-fixed
SajaAboulmagd05 Apr 29, 2026
0caaae3
Merge pull request #172 from Rythmify/M8-discovery-search-feed-fixed
Abasy714 Apr 29, 2026
fedd6fc
feat(feed): use playlists (subtype='album') as albums and add fallback
OmarHamza22 Apr 30, 2026
dd23c05
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 Apr 30, 2026
d5e6f0c
Merge pull request #173 from Rythmify/M8-discovery-search-feed
Abasy714 Apr 30, 2026
553662c
Merge branch 'development' into m4-tracks
OmarHamza22 Apr 30, 2026
f5895d4
Merge pull request #166 from Rythmify/m4-tracks
OmarHamza22 Apr 30, 2026
4fcf409
Merge branch 'development' into M9-Notifications
OmarHamza22 Apr 30, 2026
2c5514c
Merge pull request #162 from Rythmify/M9-Notifications
OmarHamza22 Apr 30, 2026
f528c38
Merge branch 'development' into M7_Sets-&-Playlists
alyaa18 Apr 30, 2026
7c62487
feat(notifications):add actor name in response
alyaa18 Apr 30, 2026
9aa4752
Revert "Init DB on startup and add OAuth logs"
SajaAboulmagd05 Apr 30, 2026
2bf7ecf
Merge branch 'development' into M1-Authentication
SajaAboulmagd05 Apr 30, 2026
4da276f
refactor(unit tests messaging)
alyaa18 Apr 30, 2026
d831665
Revert "refactor(unit tests messaging)"
alyaa18 Apr 30, 2026
0f65e0a
feat(playlists): improve coverage for playlists
alyaa18 Apr 30, 2026
f733630
feat(notifications):unit tests
alyaa18 Apr 30, 2026
0fd1fe3
feat(notifications):enhance coverage
alyaa18 Apr 30, 2026
b5fe558
Merge pull request #174 from Rythmify/M7_Sets-&-Playlists
OmarHamza22 Apr 30, 2026
88d4a4f
added username to search result for users
SajaAboulmagd05 Apr 30, 2026
3108087
Merge branch 'development' into M8-discovery-search-feed-fixed
SajaAboulmagd05 Apr 30, 2026
55598db
Merge pull request #175 from Rythmify/M8-discovery-search-feed-fixed
nourabosaif Apr 30, 2026
c52ad58
refactor(user): include is_private in privacy settings flow
Beshoy205 Apr 30, 2026
42f585b
Merge branch 'development' into M6-M3-Integration
Beshoy205 Apr 30, 2026
7a928ff
Run Prettier
Beshoy205 Apr 30, 2026
e24907b
Merge branch 'M6-M3-Integration' of https://github.com/Rythmify/backe…
Beshoy205 Apr 30, 2026
a9dc48a
Merge pull request #176 from Rythmify/M6-M3-Integration
OmarHamza22 May 1, 2026
9311e1c
fix(push notification messaging)
alyaa18 May 1, 2026
1afba55
fix message email redirection
alyaa18 May 1, 2026
ba701fd
Merge pull request #177 from Rythmify/M9-Notifications
Abasy714 May 1, 2026
fa257ce
Add trust proxy to app.js
OmarHamza22 May 1, 2026
82f673c
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 May 1, 2026
ff8f2f8
Merge pull request #178 from Rythmify/M8-discovery-search-feed
Abasy714 May 1, 2026
c494a97
Fix album home preview tracks for playlist-backed albums
OmarHamza22 May 1, 2026
98c4b26
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 May 1, 2026
f2973ec
Merge pull request #179 from Rythmify/M8-discovery-search-feed
Abasy714 May 1, 2026
a7bde76
Add ENABLE_BLOB_DELETION config and enhance blob deletion logging
Abasy714 May 1, 2026
d232835
Merge pull request #180 from Rythmify/devops-infra-2
OmarHamza22 May 1, 2026
5dca574
Implement creator insights feature with API endpoints, service logic,…
Abasy714 May 1, 2026
ddceb14
Refactor metrics middleware and update playback and track models to a…
Abasy714 May 1, 2026
c4d963e
fix(subscription): fixed is_user_premium attribute behavior
omar13Hamdy37 May 1, 2026
ca1353f
Merge branch 'development' into devops-infra-2
Abasy714 May 1, 2026
0454717
Raise feed and follow discovery unit-test branch coverage above 95%
OmarHamza22 May 1, 2026
e988d8f
Merge pull request #182 from Rythmify/M12-Subscription
BisoLab May 1, 2026
38382d5
Add comprehensive unit tests for feed module with >95% coverage
OmarHamza22 May 1, 2026
cb422a4
feat(user): add public web profiles endpoint with privacy guard
Beshoy205 May 1, 2026
a20face
Merge branch 'development' into M6-M3-Integration
Beshoy205 May 1, 2026
e7ac912
Run Prettier
Beshoy205 May 1, 2026
5712e63
Merge branch 'M6-M3-Integration' of https://github.com/Rythmify/backe…
Beshoy205 May 1, 2026
9ff5b55
Merge pull request #183 from Rythmify/M6-M3-Integration
OmarHamza22 May 1, 2026
7d675f0
run prettier
Abasy714 May 1, 2026
4a86db8
Merge branch 'development' into M1-Authentication
SajaAboulmagd05 May 1, 2026
c2ebd4b
Module1 units tests
SajaAboulmagd05 May 1, 2026
21fee89
Merge branch 'development' into devops-infra-2
OmarHamza22 May 1, 2026
5878053
genre endpoints unit tests
SajaAboulmagd05 May 1, 2026
603baf9
Create search.service.unit.test.js
SajaAboulmagd05 May 1, 2026
46bb919
added unit tests for resolve controller and model
SajaAboulmagd05 May 1, 2026
94058c6
Merge pull request #181 from Rythmify/devops-infra-2
OmarHamza22 May 1, 2026
0c9f90f
refactor(user): ensure privacy settings defaults
Beshoy205 May 1, 2026
0e2c68d
Run Prettier
Beshoy205 May 1, 2026
fce171a
Merge branch 'development' into M6-M3-Integration
Beshoy205 May 1, 2026
ed18ad2
Merge pull request #184 from Rythmify/M6-M3-Integration
OmarHamza22 May 1, 2026
6a372ab
chore(feed-service): add istanbul ignore for non-unit-testable orches…
OmarHamza22 May 1, 2026
b92bbaf
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 May 1, 2026
fa8c2bb
Merge pull request #185 from Rythmify/M8-discovery-search-feed
Abasy714 May 1, 2026
cb3f2d5
feat: implement geo-restriction handling for track playback
omar13Hamdy37 May 1, 2026
d73460e
Merge branch 'development' into geo-restricted-playback
omar13Hamdy37 May 1, 2026
7e0d11e
feat(playback): enhance geo-restriction handling and update error mes…
omar13Hamdy37 May 1, 2026
15a8ade
refactor(playback): streamline error handling and improve code readab…
omar13Hamdy37 May 1, 2026
00f28a3
Merge pull request #186 from Rythmify/geo-restricted-playback
BisoLab May 1, 2026
80aaf1a
feat(playback): add fan leaderboard visibility check and related tests
omar13Hamdy37 May 1, 2026
fb3dcc0
Merge pull request #187 from Rythmify/m4-tracks
BisoLab May 1, 2026
9a42096
Create search.model.unit.test.js
SajaAboulmagd05 May 1, 2026
89756db
Create search.controller.unit.test.js
SajaAboulmagd05 May 1, 2026
c2747e0
add albums path according to unit tests results
SajaAboulmagd05 May 1, 2026
accf63d
prettier
SajaAboulmagd05 May 1, 2026
68a7884
Merge branch 'development' into M1-Authentication
SajaAboulmagd05 May 1, 2026
e4cafb8
test(playback): add comprehensive tests for playback controller metho…
omar13Hamdy37 May 1, 2026
92342c6
Merge branch 'development' into m4-tracks
omar13Hamdy37 May 1, 2026
c58a7c9
tests: Add tests for genre, storage, subscription, track processing, …
omar13Hamdy37 May 2, 2026
86cf215
feat(geo-restrictions): enhance geo region validation and normalizati…
omar13Hamdy37 May 2, 2026
c7fb5c6
test(geo-restrictions): add tests for ISO alpha-2 country code valida…
omar13Hamdy37 May 2, 2026
c8446d9
Merge pull request #188 from Rythmify/M1-Authentication
BisoLab May 2, 2026
964ea54
Merge branch 'development' into m4-tracks
omar13Hamdy37 May 2, 2026
a7277be
Merge pull request #189 from Rythmify/m4-tracks
BisoLab May 2, 2026
fe9fb8e
test(user-actions): complete unit tests and evaluate coverage
Beshoy205 May 2, 2026
1e6a2f5
feat(auth): add auth check-email endpoint
OmarHamza22 May 2, 2026
94bd2d5
feat(admin): implement immediate session invalidation on user suspension
Beshoy205 May 2, 2026
b61666f
Merge branch 'development' into M6-M3-Integration
Beshoy205 May 2, 2026
4c1bf38
Merge pull request #190 from Rythmify/M6-M3-Integration
OmarHamza22 May 2, 2026
e912c7e
docs(api): audit and sync openapi spec with backend implementation
OmarHamza22 May 2, 2026
92fb4f2
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 May 2, 2026
b1bbbf3
Merge pull request #191 from Rythmify/M8-discovery-search-feed
Ahmedattay May 2, 2026
8b943b5
fix(notification)type comment
alyaa18 May 2, 2026
a3740ac
fix(notifications)spam push notifications for each new message)
alyaa18 May 2, 2026
9227698
prettier format
alyaa18 May 2, 2026
9b21811
prevent spam push notifications
alyaa18 May 2, 2026
4ebf867
refactor(messages)speed of sending messages
alyaa18 May 2, 2026
b46ba3e
prettier format
alyaa18 May 2, 2026
d618edb
Merge branch 'development' into M9-Notifications
OmarHamza22 May 2, 2026
08ce25e
Merge pull request #192 from Rythmify/M9-Notifications
OmarHamza22 May 2, 2026
7499752
test: reorganize test suite architecture and resolve suite-wide failures
OmarHamza22 May 2, 2026
6d573f7
rag3 comment zy ma kanet w lefy been ya donya
alyaa18 May 2, 2026
393c226
Merge pull request #193 from Rythmify/M9-Notifications
BisoLab May 2, 2026
2120145
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 May 2, 2026
b35b797
Fix(test): Refactoring Unit tests
OmarHamza22 May 2, 2026
f4d25d7
Merge pull request #194 from Rythmify/M8-discovery-search-feed
BisoLab May 2, 2026
2983142
refactor(admin): implement immediate session invalidation and logout …
Beshoy205 May 2, 2026
ca58b86
Merge branch 'development' into M6-M3-Integration
Beshoy205 May 2, 2026
8e5eeba
Merge pull request #197 from Rythmify/M6-M3-Integration
OmarHamza22 May 2, 2026
04b2f2a
test: expand backend coverage across auth, messaging, social, media, …
OmarHamza22 May 2, 2026
78fb0ec
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 May 2, 2026
bc73f6b
Merge pull request #199 from Rythmify/M8-discovery-search-feed
OmarHamza22 May 2, 2026
8ec7e47
Edit backend-main
OmarHamza22 May 2, 2026
b15ce4a
Merge branch 'M8-discovery-search-feed' of https://github.com/Rythmif…
OmarHamza22 May 2, 2026
e27fc6d
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 May 2, 2026
184dff5
Merge pull request #200 from Rythmify/M8-discovery-search-feed
BisoLab May 2, 2026
a323b12
Fix Unit Tests
OmarHamza22 May 2, 2026
3f00132
Merge branch 'development' into M8-discovery-search-feed
OmarHamza22 May 2, 2026
43ec8ce
Merge pull request #201 from Rythmify/M8-discovery-search-feed
OmarHamza22 May 2, 2026
813facf
fix: remove local storage initialization to resolve CI test failures
OmarHamza22 May 2, 2026
976dc3d
Merge branch 'development' into M8-discovery-search-feed
Abasy714 May 2, 2026
30ed76b
Merge pull request #202 from Rythmify/M8-discovery-search-feed
OmarHamza22 May 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
node_modules
.git
.gitignore
.env
.env.*
*.log
npm-debug.log*
dist
coverage
.nyc_output
tests
64 changes: 0 additions & 64 deletions .env.example

This file was deleted.

2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module.exports = {
env: { node: true, es2021: true },
env: { node: true, es2021: true, jest: true },
extends: ['eslint:recommended'],
parserOptions: { ecmaVersion: 'latest', sourceType: 'commonjs' },
rules: {
Expand Down
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* text=auto eol=lf
*.js text eol=lf
125 changes: 125 additions & 0 deletions .github/workflows/backend-cd-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: Backend — Dev CD Pipeline

on:
push:
branches:
- development

jobs:
deploy-dev:
name: Build, Push & Deploy (Development)
runs-on: ubuntu-latest
environment: development

steps:
- name: Checkout backend repo
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- name: Install dependencies
run: npm ci

- name: Install PostgreSQL client
run: |
sudo apt-get update -qq
sudo apt-get install -y postgresql-client

- name: Log in to Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}

- name: Log in to Azure Container Registry
run: |
echo ${{ secrets.ACR_PASSWORD }} | docker login ${{ secrets.ACR_LOGIN_SERVER }} \
--username ${{ secrets.ACR_USERNAME }} \
--password-stdin

- name: Build and push Docker image
run: |
docker build -t ${{ secrets.ACR_LOGIN_SERVER }}/backend:dev .
docker tag ${{ secrets.ACR_LOGIN_SERVER }}/backend:dev ${{ secrets.ACR_LOGIN_SERVER }}/backend:dev-${{ github.sha }}
docker push ${{ secrets.ACR_LOGIN_SERVER }}/backend:dev
docker push ${{ secrets.ACR_LOGIN_SERVER }}/backend:dev-${{ github.sha }}

- name: Run migrations against Azure PostgreSQL (dev)
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: npm run migrate:up

- name: Register ACR credentials with Container App
run: |
az containerapp registry set \
--name ${{ secrets.CONTAINER_APP_NAME }} \
--resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \
--server ${{ secrets.ACR_LOGIN_SERVER }} \
--username ${{ secrets.ACR_USERNAME }} \
--password ${{ secrets.ACR_PASSWORD }}

- name: Set Container App environment variables
run: |
az containerapp update \
--name ${{ secrets.CONTAINER_APP_NAME }} \
--resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \
--set-env-vars \
NODE_ENV=development \
PORT=8080 \
BLOB_CONTAINER_AUDIO=audio \
BLOB_CONTAINER_MEDIA=media \
JWT_ACCESS_EXPIRES_IN=15m \
JWT_REFRESH_EXPIRES_IN=7d \
"EMAIL_FROM=Rythmify <rythmify.noreply@gmail.com>" \
BASE_URL=https://${{ secrets.CONTAINER_APP_URL }} \
CLIENT_URL=https://gray-grass-0ab138600.7.azurestaticapps.net \
APP_URL=https://gray-grass-0ab138600.7.azurestaticapps.net \
GOOGLE_CALLBACK_URL=https://gray-grass-0ab138600.7.azurestaticapps.net/api/v1/auth/google/callback \
JWT_SECRET=secretref:jwt-secret \
AZURE_STORAGE_CONNECTION_STRING=secretref:storage-connection-string \
DATABASE_URL=secretref:database-url \
GOOGLE_CLIENT_ID=secretref:google-client-id \
GOOGLE_CLIENT_SECRET=secretref:google-client-secret \
GMAIL_USER=secretref:gmail-user \
GMAIL_APP_PASSWORD=secretref:gmail-app-password \
RECAPTCHA_SECRET=secretref:recaptcha-secret \
GITHUB_CLIENT_ID=secretref:oauth-github-client-id \
GITHUB_CLIENT_SECRET=secretref:oauth-github-client-secret \
GITHUB_REDIRECT_URI=https://rythmify-backend-dev.livelypebble-6b7965ef.uaenorth.azurecontainerapps.io/api/v1/auth/oauth/github/callback

- name: Update Container App with new image
run: |
az containerapp update \
--name ${{ secrets.CONTAINER_APP_NAME }} \
--resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \
--image ${{ secrets.ACR_LOGIN_SERVER }}/backend:dev-${{ github.sha }}

- name: Wait for deployment to stabilize
run: sleep 30

- name: Smoke check dev deployment
run: |
DEV_URL=$(az containerapp show \
--name ${{ secrets.CONTAINER_APP_NAME }} \
--resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \
--query "properties.configuration.ingress.fqdn" \
--output tsv)
echo "Dev URL: https://$DEV_URL"
for i in $(seq 1 15); do
response=$(curl -sf "https://$DEV_URL/health") && echo "Health OK: $response" && break
echo "Attempt $i — not ready, waiting 10s..."
sleep 10
done
curl -sf "https://$DEV_URL/health" | grep -q '"status":"ok"' || { echo "Dev smoke check failed."; exit 1; }
echo "Dev deployment smoke check passed."

- name: Collect deployment logs on failure
if: failure()
run: |
az containerapp logs show \
--name ${{ secrets.CONTAINER_APP_NAME }} \
--resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \
--tail 50 || true
149 changes: 149 additions & 0 deletions .github/workflows/backend-cd-main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: Backend CD — VM Deploy

on:
push:
branches:
- development

jobs:
deploy:
name: Build, Push & Deploy to VM1
runs-on: ubuntu-latest
environment: development

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Log in to Azure Container Registry
run: |
docker login ${{ secrets.ACR_LOGIN_SERVER }} \
-u ${{ secrets.ACR_USERNAME }} \
-p ${{ secrets.ACR_PASSWORD }}

- name: Build and push Docker image
run: |
IMAGE=${{ secrets.ACR_LOGIN_SERVER }}/backend
SHA=${{ github.sha }}

docker build -t $IMAGE:main -t $IMAGE:main-${SHA::7} .
docker push $IMAGE:main
docker push $IMAGE:main-${SHA::7}

- name: Write SSH key to file
run: |
echo "${{ secrets.VM_SSH_KEY }}" > vm_key.pem
chmod 600 vm_key.pem

- name: Create deploy script
run: |
cat > deploy.sh << 'SCRIPT'
#!/bin/bash
set -e

docker login $ACR_LOGIN_SERVER \
-u $ACR_USERNAME \
-p $ACR_PASSWORD

docker pull $IMAGE

docker run --rm \
-e DATABASE_URL="$DATABASE_URL" \
$IMAGE \
npm run migrate:up

docker stop rythmify-backend || true
docker rm rythmify-backend || true

docker run -d \
--name rythmify-backend \
--restart unless-stopped \
-p 8080:8080 \
-e NODE_ENV=production \
-e PORT=8080 \
-e DATABASE_URL="$DATABASE_URL" \
-e JWT_SECRET="$JWT_SECRET" \
-e AZURE_STORAGE_CONNECTION_STRING="$AZURE_STORAGE_CONNECTION_STRING" \
-e BLOB_CONTAINER_AUDIO=audio \
-e BLOB_CONTAINER_MEDIA=media \
-e JWT_ACCESS_EXPIRES_IN=15m \
-e JWT_REFRESH_EXPIRES_IN=7d \
-e GOOGLE_CLIENT_ID="$GOOGLE_CLIENT_ID" \
-e GOOGLE_CLIENT_SECRET="$GOOGLE_CLIENT_SECRET" \
-e GOOGLE_CALLBACK_URL="http://rythmify-back.duckdns.org/api/v1/auth/google/callback" \
-e GMAIL_USER="$GMAIL_USER" \
-e GMAIL_APP_PASSWORD="$GMAIL_APP_PASSWORD" \
-e RECAPTCHA_SECRET="$RECAPTCHA_SECRET" \
-e BASE_URL="http://rythmify-back.duckdns.org" \
-e CLIENT_URL="http://rythmify.duckdns.org" \
-e APP_URL="http://rythmify.duckdns.org" \
-e "EMAIL_FROM=Rythmify <rythmify.noreply@gmail.com>" \
-e GITHUB_CLIENT_ID="$OAUTH_GITHUB_CLIENT_ID" \
-e GITHUB_CLIENT_SECRET="$OAUTH_GITHUB_CLIENT_SECRET" \
-e GITHUB_REDIRECT_URI="http://rythmify-back.duckdns.org/api/v1/auth/oauth/github/callback" \
-e FCM_PROJECT_ID="$FCM_PROJECT_ID" \
-e FCM_CLIENT_EMAIL="$FCM_CLIENT_EMAIL" \
-e FCM_PRIVATE_KEY="$FCM_PRIVATE_KEY" \
-e REDIS_ENABLED=true \
-e REDIS_URL=redis://host.docker.internal:6379 \
$IMAGE

sleep 30

PASSED=false
for i in $(seq 1 10); do
STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/health)
if [ "$STATUS" = "200" ]; then
echo "Smoke check passed — HTTP $STATUS"
PASSED=true
break
fi
echo "Attempt $i — not ready yet (HTTP $STATUS), waiting 10s..."
sleep 10
done

if [ "$PASSED" = "false" ]; then
echo "Smoke check FAILED after 10 attempts"
docker logs rythmify-backend --tail 50
exit 1
fi
SCRIPT

- name: Substitute variables into deploy script
run: |
export IMAGE ACR_LOGIN_SERVER ACR_USERNAME ACR_PASSWORD \
DATABASE_URL JWT_SECRET AZURE_STORAGE_CONNECTION_STRING \
GOOGLE_CLIENT_ID GOOGLE_CLIENT_SECRET GMAIL_USER \
GMAIL_APP_PASSWORD RECAPTCHA_SECRET
envsubst < deploy.sh > deploy-final.sh
env:
IMAGE: ${{ secrets.ACR_LOGIN_SERVER }}/backend:main
ACR_LOGIN_SERVER: ${{ secrets.ACR_LOGIN_SERVER }}
ACR_USERNAME: ${{ secrets.ACR_USERNAME }}
ACR_PASSWORD: ${{ secrets.ACR_PASSWORD }}
DATABASE_URL: ${{ secrets.DATABASE_URL_PROD }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
AZURE_STORAGE_CONNECTION_STRING: ${{ secrets.AZURE_STORAGE_CONNECTION_STRING }}
GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
GMAIL_USER: ${{ secrets.GMAIL_USER }}
GMAIL_APP_PASSWORD: ${{ secrets.GMAIL_APP_PASSWORD }}
RECAPTCHA_SECRET: ${{ secrets.RECAPTCHA_SECRET }}

- name: Copy deploy script to VM1
run: |
scp -i vm_key.pem \
-o StrictHostKeyChecking=no \
deploy-final.sh \
${{ secrets.VM_USER }}@${{ secrets.VM_HOST }}:/home/rythmify/deploy.sh

- name: Execute deploy script on VM1
run: |
ssh -i vm_key.pem \
-o StrictHostKeyChecking=no \
${{ secrets.VM_USER }}@${{ secrets.VM_HOST }} \
"chmod +x /home/rythmify/deploy.sh && bash /home/rythmify/deploy.sh"

- name: Clean up SSH key and scripts
if: always()
run: rm -f vm_key.pem deploy.sh deploy-final.sh
Loading
Loading