Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
938 commits
Select commit Hold shift + click to select a range
f07d7e7
Merge pull request #2911 from DevWithPranav/dev
DevWithPranav Jun 21, 2026
bc6115b
refactor: optimize profile serializer queries and add task type debug…
DevWithPranav Jun 21, 2026
d06c795
Merge pull request #2912 from DevWithPranav/dev
DevWithPranav Jun 21, 2026
e977f94
Merge pull request #2913 from gtech-mulearn/dev
DevWithPranav Jun 21, 2026
3221b55
Merge pull request #2914 from afifshowfeer/dev
DevWithPranav Jun 21, 2026
66f143b
Merge pull request #2915 from gtech-mulearn/dev
DevWithPranav Jun 21, 2026
b62add5
feat: implement intern task management views including listing, detai…
DevWithPranav Jun 21, 2026
158997b
feat: implement new company job status to draft in post
afifshowfeer Jun 21, 2026
7adf5cf
Merge pull request #2916 from afifshowfeer/dev
DevWithPranav Jun 21, 2026
13d37ac
feat: add admin isverified to false patch and revoke karma while unve…
afifshowfeer Jun 21, 2026
9ef6aca
feat: test commit
afifshowfeer Jun 21, 2026
d1c2f63
Merge remote-tracking branch 'origin/dev' into dev
afifshowfeer Jun 21, 2026
3885220
Merge pull request #2917 from afifshowfeer/dev
DevWithPranav Jun 21, 2026
bf00358
Merge pull request #2918 from gtech-mulearn/dev
DevWithPranav Jun 21, 2026
50bccf3
feat: implement event/meta/event-type-scope endpoint
afifshowfeer Jun 21, 2026
cd70af1
feat: add utility to fetch formatted event types and scopes
afifshowfeer Jun 21, 2026
f765869
feat: add meta API views for event event-type-scope
afifshowfeer Jun 21, 2026
b657721
feat: add event metadata for event-type-scope
afifshowfeer Jun 21, 2026
17f4c79
Merge pull request #2920 from afifshowfeer/dev
DevWithPranav Jun 21, 2026
ed7f32e
chore: add greptile PR review rules
awindsr Jun 21, 2026
75c4141
Merge branch 'dev' of github.com:gtech-mulearn/mulearnbackend into dev
awindsr Jun 21, 2026
0afa08b
Merge pull request #2921 from gtech-mulearn/dev
DevWithPranav Jun 21, 2026
da0c589
fix: prevent status change once application is Selected
febin-d Jun 22, 2026
8199e41
Update api/dashboard/company/job_serializers.py
febin-d Jun 22, 2026
2b94704
Merge pull request #2922 from febin-d/fix/lock-selected-application-s…
DevWithPranav Jun 22, 2026
5ef644f
Merge branch 'gtech-mulearn:dev' into dev
DevWithPranav Jun 22, 2026
8a6789b
feat: implement mentorship session management module and add requeste…
DevWithPranav Jun 22, 2026
6fab497
feat: implement student-initiated mentorship session requests and add…
DevWithPranav Jun 22, 2026
1038f34
feat: implement mentorship session request workflow for students and …
DevWithPranav Jun 22, 2026
89d0716
Merge pull request #2924 from DevWithPranav/dev
DevWithPranav Jun 22, 2026
2d3e12e
Merge pull request #2925 from gtech-mulearn/dev
DevWithPranav Jun 22, 2026
3387f91
feat: implement intern leaderboard API endpoints and review managemen…
DevWithPranav Jun 23, 2026
1a4c0c7
feat: implement streak recalculation logic and idempotent milestone k…
DevWithPranav Jun 23, 2026
2835082
Merge pull request #2926 from DevWithPranav/dev
DevWithPranav Jun 23, 2026
4aee0f4
Merge pull request #2927 from gtech-mulearn/dev
DevWithPranav Jun 23, 2026
28027b1
feat: implement intern timesheet submission and management serializer…
DevWithPranav Jun 24, 2026
bc8b044
feat: add serializers for intern daily timesheet creation, retrieval,…
DevWithPranav Jun 24, 2026
bd2b64c
Merge pull request #2929 from DevWithPranav/dev
DevWithPranav Jun 24, 2026
f426468
Merge pull request #2930 from gtech-mulearn/dev
DevWithPranav Jun 24, 2026
edcc55e
feat: add MuLearn external task verification API endpoint for mufifa …
DevWithPranav Jun 25, 2026
b666a08
Update api/integrations/mulearn_api/views.py
DevWithPranav Jun 25, 2026
e4b0a7e
feat: add ExternalTaskVerificationAPI to verify task completion statu…
DevWithPranav Jun 25, 2026
534c97d
Merge branch 'dev' of https://github.com/DevWithPranav/mulearnbackend…
DevWithPranav Jun 25, 2026
8e7682b
Merge pull request #2931 from DevWithPranav/dev
DevWithPranav Jun 25, 2026
ee0a356
feat: add media content management module and external task verificat…
DevWithPranav Jun 27, 2026
c49ada6
Merge pull request #2933 from DevWithPranav/dev
DevWithPranav Jun 27, 2026
dac7cf8
feat: implement CRUD API views for Office Hours, Salt Mango Tree, and…
DevWithPranav Jun 27, 2026
da83d1b
Merge pull request #2935 from DevWithPranav/dev
DevWithPranav Jun 27, 2026
55b1548
Merge pull request #2934 from gtech-mulearn/dev
DevWithPranav Jun 27, 2026
c5bba5b
feat: implement campus dashboard API infrastructure with routing, ser…
DevWithPranav Jun 27, 2026
60e043c
feat: implement campus dashboard views for student and organizational…
DevWithPranav Jun 27, 2026
3b842d1
feat: implement modular serializers for event management, collaborati…
DevWithPranav Jun 27, 2026
dec35f1
Merge pull request #2936 from DevWithPranav/dev
DevWithPranav Jun 27, 2026
0f32343
Merge pull request #2937 from gtech-mulearn/dev
DevWithPranav Jun 27, 2026
f16fff8
feat(mentor): self-service Interest Group editing for approved IG men…
awindsr Jun 28, 2026
ff8417c
Merge pull request #2939 from gtech-mulearn/dev
awindsr Jun 28, 2026
8ee1e8b
added more role support to endpoints in media_content
DevWithPranav Jun 28, 2026
64a7f5c
Merge pull request #2940 from DevWithPranav/dev
DevWithPranav Jun 28, 2026
cc0aff8
feat(mentor): IG-only sessions, auto-approval, and admin cancel
awindsr Jun 28, 2026
0263522
Merge branch 'dev' of github.com:gtech-mulearn/mulearnbackend into dev
awindsr Jun 28, 2026
35bcb9e
feat(campus): fixed bugs in campus dashbaord
DevWithPranav Jun 28, 2026
9cd95af
feat: add serializers and view helpers for campus dashboard metrics a…
DevWithPranav Jun 28, 2026
635144c
Merge pull request #2942 from DevWithPranav/dev
DevWithPranav Jun 28, 2026
8cc01df
Merge pull request #2941 from gtech-mulearn/dev
DevWithPranav Jun 28, 2026
75259da
feat: implement campus events, distribution, and execom management en…
DevWithPranav Jun 28, 2026
069346d
Merge pull request #2943 from DevWithPranav/dev
DevWithPranav Jun 28, 2026
e7dbd26
Merge pull request #2944 from gtech-mulearn/dev
DevWithPranav Jun 28, 2026
7d7292e
fix(mentor): IG-only student requests, tier-agnostic IG request scopi…
awindsr Jun 30, 2026
dc6a083
Merge branch 'dev' of github.com:gtech-mulearn/mulearnbackend into dev
awindsr Jun 30, 2026
04d1da6
perf(mentor): resolve participant-history IG names in one query, not …
awindsr Jun 30, 2026
82bc7f9
Merge pull request #2945 from gtech-mulearn/dev
awindsr Jun 30, 2026
1f4c007
feat(API):created comic module
GokulShaji2005 Jul 1, 2026
c5a7dcc
feat: add company management serializers and event metadata views to …
DevWithPranav Jul 1, 2026
67a2b5a
feat: add serializers for company registration, listing, and verifica…
DevWithPranav Jul 1, 2026
42cb455
Merge pull request #2947 from DevWithPranav/dev
DevWithPranav Jul 1, 2026
e02e6fc
Merge pull request #2948 from gtech-mulearn/dev
DevWithPranav Jul 1, 2026
fee9cc8
fix(mentor): expose meeting_link, venue & description in session list…
awindsr Jul 1, 2026
707ff10
Merge pull request #2949 from gtech-mulearn/dev
awindsr Jul 1, 2026
8210617
fix(mentor): allow switching session mode without clearing links manu…
awindsr Jul 1, 2026
70f4489
Merge pull request #2950 from gtech-mulearn/dev
awindsr Jul 1, 2026
43f2232
feat: add Django models for user, mentor, referral, role, and social …
DevWithPranav Jul 1, 2026
1b6dd32
Merge pull request #2951 from DevWithPranav/dev
DevWithPranav Jul 1, 2026
1689606
Merge pull request #2952 from gtech-mulearn/dev
DevWithPranav Jul 1, 2026
86f62e0
fix:url problem
GokulShaji2005 Jul 1, 2026
ddb33b2
fix:slug collission problem
GokulShaji2005 Jul 1, 2026
da29f15
fixed bug in profile api
DevWithPranav Jul 1, 2026
2d8c971
feat: implement API endpoints for user profile management, cover phot…
DevWithPranav Jul 1, 2026
74b75e0
Merge pull request #2953 from DevWithPranav/dev
DevWithPranav Jul 1, 2026
202575a
Merge pull request #2955 from gtech-mulearn/dev
DevWithPranav Jul 1, 2026
4800c98
fix:slug patch probelm solved
GokulShaji2005 Jul 2, 2026
c8e3040
feat: implement campus details API and supporting serializers to expo…
DevWithPranav Jul 2, 2026
2be71f9
feat: add CollegeDetailsAPI endpoint to retrieve campus metrics, top …
DevWithPranav Jul 2, 2026
110706f
Merge pull request #2956 from DevWithPranav/dev
DevWithPranav Jul 2, 2026
fd082d7
Merge pull request #2957 from gtech-mulearn/dev
DevWithPranav Jul 2, 2026
92fd02f
feat: add CollegeDetailsAPI endpoint to retrieve campus stats, rankin…
DevWithPranav Jul 2, 2026
6aa3955
Merge pull request #2959 from DevWithPranav/dev
DevWithPranav Jul 2, 2026
f76d3ec
Merge pull request #2960 from gtech-mulearn/dev
DevWithPranav Jul 2, 2026
9e12de5
feat: add CollegeDetailsAPI endpoint to retrieve campus stats, rankin…
DevWithPranav Jul 2, 2026
b7dc8cd
Merge pull request #2961 from DevWithPranav/dev
DevWithPranav Jul 2, 2026
d66fd47
Merge pull request #2962 from gtech-mulearn/dev
DevWithPranav Jul 2, 2026
393f7c4
feat: add CollegeDetailsAPI endpoint to retrieve campus metrics, top …
DevWithPranav Jul 2, 2026
ca5d6dd
Merge pull request #2965 from DevWithPranav/dev
DevWithPranav Jul 2, 2026
ff68212
Merge pull request #2966 from gtech-mulearn/dev
DevWithPranav Jul 2, 2026
5b491a9
feat: add public API endpoint to retrieve college details including l…
DevWithPranav Jul 2, 2026
d5d220a
feat: implement serializers for campus dashboard details, student inf…
DevWithPranav Jul 2, 2026
75fe723
Merge pull request #2968 from DevWithPranav/dev
DevWithPranav Jul 2, 2026
f43046d
Merge pull request #2969 from gtech-mulearn/dev
DevWithPranav Jul 2, 2026
ad20722
feat: implement CRUD API endpoints for MediaContent modules including…
DevWithPranav Jul 3, 2026
90bbe0c
feat: implement CRUD API endpoints for MediaContent modules including…
DevWithPranav Jul 3, 2026
a262cb2
feat: add CRUD API views for Office Hours and Salt Mango Tree media c…
DevWithPranav Jul 3, 2026
14dae3c
Merge pull request #2972 from DevWithPranav/dev
DevWithPranav Jul 3, 2026
431f1d4
Merge pull request #2973 from gtech-mulearn/dev
DevWithPranav Jul 3, 2026
6d703cf
fix:stale-field overwrite issue in publish
GokulShaji2005 Jul 3, 2026
a4f2c36
fix:issue in update serializer
GokulShaji2005 Jul 3, 2026
d293bfc
fix(profile): handle missing user in rank index and deduplicate rank …
DevWithPranav Jul 4, 2026
55296af
Merge pull request #2946 from GokulShaji2005/dev
DevWithPranav Jul 4, 2026
45162a1
Merge pull request #2977 from DevWithPranav/dev
DevWithPranav Jul 4, 2026
5d62fa5
fix(profile): scope IG deletion to LEARNER type and set assignment at…
DevWithPranav Jul 4, 2026
b07a975
fix: fixes pr issues in ig listing api
DevWithPranav Jul 4, 2026
9f125a5
Merge pull request #2979 from DevWithPranav/dev
DevWithPranav Jul 4, 2026
17c9b9e
fix(intern): update intern status logic to transition to AT_RISK afte…
DevWithPranav Jul 4, 2026
1586e04
Merge pull request #2980 from DevWithPranav/dev
DevWithPranav Jul 4, 2026
a11dbd5
Merge pull request #2978 from gtech-mulearn/dev
DevWithPranav Jul 4, 2026
8157d2d
feat(media-content): support image file upload for office hours poster
DevWithPranav Jul 4, 2026
e8a121d
fix(media_content): offload remote image fetch to Celery & sanitize e…
DevWithPranav Jul 4, 2026
221947b
fix(media_content): prevent DNS rebinding in SSRF check and defer sta…
DevWithPranav Jul 4, 2026
e987f53
feat:contributor module added
GokulShaji2005 Jul 5, 2026
485006c
feat(muComics): Implement threaded comments and moderation API
febin-d Jul 6, 2026
796ac7e
fix(muComics): Add DDL and alter script for comic_comment table
febin-d Jul 6, 2026
175dda5
Update db/comic_comment.py
febin-d Jul 6, 2026
739ec1d
refactor(muComics): Split comment views into List and Create endpoints
febin-d Jul 6, 2026
c7b2480
Merge branch 'mucomics-comments' of https://github.com/febin-d/mulear…
febin-d Jul 6, 2026
f749c9e
perf(muComics): Optimize comment list queries to avoid N+1
febin-d Jul 6, 2026
b549d84
perf(muComics): Add prefetch_related for comment replies
febin-d Jul 6, 2026
afe2bc7
perf(muComics): Optimize admin comment list to eliminate N+1 queries
febin-d Jul 6, 2026
c92a969
docs(muComics): Add extend_schema tags to comment API views
febin-d Jul 6, 2026
1af45ee
fix(muComics): Wrap comment counts in atomic transactions
febin-d Jul 6, 2026
473fda4
fix(muComics): Update updated_by audit field during soft deletion
febin-d Jul 6, 2026
8fe555a
fix(muComics): Handle suspended users gracefully after comment creation
febin-d Jul 6, 2026
f7740bb
fix(muComics): Prevent cross-posting replies between comic and chapte…
febin-d Jul 6, 2026
d788a03
fix(muComics): Add DB foreign key constraints and fix admin reply counts
febin-d Jul 6, 2026
4959398
feat: add unified dashboard calendar API
febin-d Jul 6, 2026
c0a200c
fix(calendar): resolve authentication and unbounded queryset issues
febin-d Jul 6, 2026
cf86d95
Merge pull request #2954 from febin-d/feat/unified-dashboard-calendar
DevWithPranav Jul 7, 2026
2fc68e8
Merge pull request #2982 from febin-d/mucomics-comments
DevWithPranav Jul 7, 2026
160f55a
Merge branch 'gtech-mulearn:dev' into dev
DevWithPranav Jul 7, 2026
f0d1cd5
fix(media_content): resolve HTTPS/TLS SNI and cert verification failu…
DevWithPranav Jul 7, 2026
e45cd0d
Merge pull request #2981 from DevWithPranav/dev
DevWithPranav Jul 7, 2026
bf175a2
Merge pull request #2983 from gtech-mulearn/dev
DevWithPranav Jul 7, 2026
5368ff6
fix(calendar): fix Campus, IG, Global, Company Events
febin-d Jul 7, 2026
4c9ea07
Merge pull request #2984 from febin-d/feat/unified-dashboard-calendar
DevWithPranav Jul 7, 2026
3513dca
Merge pull request #2985 from gtech-mulearn/dev
DevWithPranav Jul 7, 2026
deb5ff4
feat: implement Event database schema and public dashboard API endpoi…
DevWithPranav Jul 8, 2026
cb0ae7f
Merge pull request #2986 from DevWithPranav/dev
DevWithPranav Jul 8, 2026
220abcc
Merge pull request #2987 from gtech-mulearn/dev
DevWithPranav Jul 8, 2026
e76bfce
feat: add achievement CRUD API views with file upload support for icons
DevWithPranav Jul 8, 2026
244ebd8
Merge pull request #2988 from DevWithPranav/dev
DevWithPranav Jul 8, 2026
eca16e1
Merge pull request #2989 from gtech-mulearn/dev
DevWithPranav Jul 8, 2026
34aa109
feat: implement achievement management APIs for list, creation, and u…
DevWithPranav Jul 8, 2026
620569b
Merge pull request #2990 from DevWithPranav/dev
DevWithPranav Jul 8, 2026
522628c
Merge pull request #2991 from gtech-mulearn/dev
DevWithPranav Jul 8, 2026
938ff15
feat: add achievement management endpoints and serializers for listin…
DevWithPranav Jul 8, 2026
abb34b1
Merge pull request #2992 from DevWithPranav/dev
DevWithPranav Jul 8, 2026
4be7dc9
Merge pull request #2993 from gtech-mulearn/dev
DevWithPranav Jul 8, 2026
c5ab558
feat: implement CRUD achievement views with file upload support for d…
DevWithPranav Jul 8, 2026
413df77
Merge pull request #2994 from DevWithPranav/dev
DevWithPranav Jul 8, 2026
87f3be4
Merge pull request #2995 from gtech-mulearn/dev
DevWithPranav Jul 8, 2026
2bfa9f1
feat: implement user dashboard serializers and views for managing use…
DevWithPranav Jul 9, 2026
277fe63
Merge pull request #2996 from DevWithPranav/dev
DevWithPranav Jul 9, 2026
8a1c843
Merge pull request #2997 from gtech-mulearn/dev
DevWithPranav Jul 9, 2026
d901b32
Fix duplicate user org link records
ABHISHEK2k6 Jul 9, 2026
906fc7a
Merge branch 'dev' of https://github.com/ABHISHEK2k6/mulearnbackend i…
ABHISHEK2k6 Jul 9, 2026
39028e0
Fix duplicate org link review issues
ABHISHEK2k6 Jul 9, 2026
9c0af24
Merge branch 'dev' of https://github.com/GokulShaji2005/mulearnbacken…
GokulShaji2005 Jul 13, 2026
3b16a32
feat:Genre is added before testing
GokulShaji2005 Jul 13, 2026
25cae59
feat:Filtering and search support
GokulShaji2005 Jul 14, 2026
6570177
fix:small error response problem
GokulShaji2005 Jul 14, 2026
c70a024
fix:proper pagination query set and search cache for get genres
GokulShaji2005 Jul 15, 2026
2839013
fix:contributer patch only for updated fields and added intergrity er…
GokulShaji2005 Jul 15, 2026
15d008b
Merge pull request #2999 from GokulShaji2005/dev
DevWithPranav Jul 15, 2026
26e4bbe
fix(achievements): Correct achievement claim status and add rule upda…
DevWithPranav Jul 15, 2026
15ef1ee
feat: implement CRUD API endpoints for achievement management with fi…
DevWithPranav Jul 15, 2026
e8393dc
Merge pull request #3000 from DevWithPranav/dev
DevWithPranav Jul 15, 2026
4a73802
Merge pull request #3001 from gtech-mulearn/dev
DevWithPranav Jul 15, 2026
6c90380
feat(dashboard): expand user details in verification endpoint
DevWithPranav Jul 16, 2026
9a07714
fix(dashboard): resolve N+1 queries and remove admin flag in user ver…
DevWithPranav Jul 16, 2026
8ecf80e
Merge pull request #3002 from DevWithPranav/dev
DevWithPranav Jul 16, 2026
fd5495d
Merge pull request #3003 from gtech-mulearn/dev
DevWithPranav Jul 16, 2026
7d2dcd4
Merge pull request #2998 from ABHISHEK2k6/dev
DevWithPranav Jul 16, 2026
42a75f5
feat(register): Google sign-up path with temp-token verification
DevWithPranav Jul 16, 2026
52cb100
feat: implement register helper with MUID generation and auth service…
DevWithPranav Jul 16, 2026
b9128e4
feat(muComics): implement chapter and page management CRUD API
joshnajojo12 Jul 16, 2026
a5721aa
fix(muComics): address PR review comments for chapter and page manage…
joshnajojo12 Jul 17, 2026
f2eff0f
feat: add registration and profile setup API endpoints for discord, d…
DevWithPranav Jul 17, 2026
a293e12
feat: implement registration helpers and onboarding views for Discord…
DevWithPranav Jul 17, 2026
55b1862
feat: implement user registration and profile management APIs in regi…
DevWithPranav Jul 17, 2026
35699bc
feat: implement registration-related API endpoints for user onboardin…
DevWithPranav Jul 17, 2026
3b963da
Merge pull request #3004 from DevWithPranav/dev
DevWithPranav Jul 17, 2026
120f5a1
Merge pull request #3006 from gtech-mulearn/dev
DevWithPranav Jul 17, 2026
2618d20
feat: add register helper to manage MUID generation and external auth…
DevWithPranav Jul 17, 2026
ed7fe08
Merge pull request #3007 from DevWithPranav/dev
DevWithPranav Jul 17, 2026
bb83adb
Merge pull request #3008 from gtech-mulearn/dev
DevWithPranav Jul 17, 2026
3dda76d
feat: add register helper module for MUID generation and auth service…
DevWithPranav Jul 17, 2026
59bacf1
Merge pull request #3009 from DevWithPranav/dev
DevWithPranav Jul 17, 2026
9c9e593
Merge pull request #3010 from gtech-mulearn/dev
DevWithPranav Jul 17, 2026
2d638cb
Merge branch 'dev' into feat/chapter-management
joshnajojo12 Jul 17, 2026
d0ef521
feat: implement user registration and profile configuration API endpo…
DevWithPranav Jul 17, 2026
f0e6ce1
Merge pull request #3011 from DevWithPranav/dev
DevWithPranav Jul 17, 2026
07eac76
Merge pull request #3012 from gtech-mulearn/dev
DevWithPranav Jul 17, 2026
c538695
fix(muComics): restrict page mutations on archived chapters
joshnajojo12 Jul 17, 2026
3897ba8
feat(leaderboard): add user muid and campus uuid to leaderboard respo…
DevWithPranav Jul 17, 2026
b743b43
feat(alumni): auto-update is_alumni flag via cron based on graduation…
DevWithPranav Jul 17, 2026
d69f829
fix(alumni-cron): prevent lexicographic bug in graduation year compar…
DevWithPranav Jul 17, 2026
1f793b1
fix(alumni-cron): include NULL is_alumni rows in cron update
DevWithPranav Jul 17, 2026
fdf1454
feat(learning-circle): add future date validation for meet_time
DevWithPranav Jul 17, 2026
6559631
Merge pull request #3013 from DevWithPranav/dev
DevWithPranav Jul 17, 2026
bffd10f
Merge pull request #3014 from gtech-mulearn/dev
DevWithPranav Jul 17, 2026
0904613
fix(celery): correct alumni cron regex and query for db compatibility
DevWithPranav Jul 17, 2026
08bb487
Merge pull request #3015 from DevWithPranav/dev
DevWithPranav Jul 17, 2026
9d7dde0
Merge pull request #3016 from gtech-mulearn/dev
DevWithPranav Jul 17, 2026
e40d647
feat: migrate alumni status computation from cron to serializers
DevWithPranav Jul 18, 2026
58410a7
refactor(user): centralize alumni status logic and restore cron job
DevWithPranav Jul 18, 2026
5f39f65
Merge pull request #3017 from DevWithPranav/dev
DevWithPranav Jul 18, 2026
30f2512
Merge pull request #3018 from gtech-mulearn/dev
DevWithPranav Jul 18, 2026
6ddb30b
feat(events): enhance event approval logic for campus events and upda…
awindsr Jul 18, 2026
eee8106
feat(mentor): add scope-grant authority model and wire it into mentor…
DevWithPranav Jul 18, 2026
10a2831
feat: add meta API views for event categories, organizer options, and…
DevWithPranav Jul 18, 2026
15cc093
feat: implement mentor system with database models, serializing logic…
DevWithPranav Jul 18, 2026
e98aa48
Merge branch 'dev' into dev
DevWithPranav Jul 18, 2026
c1fd797
Merge pull request #3020 from DevWithPranav/dev
DevWithPranav Jul 18, 2026
6d70a69
Merge pull request #3005 from joshnajojo12/feat/chapter-management
DevWithPranav Jul 18, 2026
4201bde
feat: add meta API views for event categories, organizer options, and…
DevWithPranav Jul 18, 2026
5220509
Merge pull request #3021 from DevWithPranav/dev
DevWithPranav Jul 18, 2026
4dff240
Merge pull request #3019 from gtech-mulearn/dev
DevWithPranav Jul 18, 2026
cec80fe
feat(muComics): Implement reader interaction module and update openap…
frizzycodes Jul 18, 2026
1ad63b0
fix(muComics): address PR feedback on reader interaction module
frizzycodes Jul 18, 2026
ecffbbe
fix(muComics): handle zero-deletion branches and clean up unused imports
frizzycodes Jul 18, 2026
0ea2733
fix(muComics): ensure proper HTTP status codes on get_failure_response
frizzycodes Jul 18, 2026
dddcd2c
fix(muComics): address concurrency and underflow issues, regenerate o…
frizzycodes Jul 19, 2026
788d702
Merge pull request #3023 from frizzycodes/feat/reader-interaction-module
DevWithPranav Jul 19, 2026
2d46327
Merge pull request #3024 from gtech-mulearn/dev
DevWithPranav Jul 19, 2026
d351e0f
Added Report Export feature also added is_creator flag for creator
ABHISHEK2k6 Jul 19, 2026
71cd2ea
Fixed the greptile review
ABHISHEK2k6 Jul 19, 2026
2e4e203
Merge pull request #3025 from ABHISHEK2k6/dev
DevWithPranav Jul 19, 2026
ce126a2
Merge pull request #3026 from gtech-mulearn/dev
DevWithPranav Jul 19, 2026
ae12ff5
Added flags to LC list api
ABHISHEK2k6 Jul 19, 2026
2d00c64
Merge branch 'gtech-mulearn:dev' into dev
ABHISHEK2k6 Jul 19, 2026
8d7e1e0
Fixed the greptile issues
ABHISHEK2k6 Jul 19, 2026
1d5cea4
Merge pull request #3027 from ABHISHEK2k6/dev
DevWithPranav Jul 19, 2026
e19621c
Merge pull request #3028 from gtech-mulearn/dev
DevWithPranav Jul 19, 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
  •  
  •  
  •  
6 changes: 5 additions & 1 deletion .env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,8 @@ DISCORD_GUILD_ID=xxx
DISCORD_BOT_TOKEN=xxx

QSEVERSE_BASE_URL=
QSEVERSE_API_KEY=
QSEVERSE_API_KEY=

BACKEND_API_KEY=

ENABLE_SWAGGER=
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,6 @@ env/
venv/
.vscode
.idea
dump.rdb
dump.rdb

static/
323 changes: 323 additions & 0 deletions .greptile/rules.md

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ pip install -r requirements.txt
### Set environment variables
Create a .env file in the project root directory by copying .env.sample and replace with your values.

> [!NOTE]
> Apply [this migration script](https://gist.github.com/e3ob/9e1116996e1daec8df8701548eeaa528) before running the project

### Run the Project
```commandline
python manage.py runserver
Expand Down
47 changes: 47 additions & 0 deletions alter-scripts/alter-1.61.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import os
import sys
from pathlib import Path
from decouple import config
import django

from connection import execute

BASE_DIR = Path(__file__).resolve().parent.parent
os.chdir(BASE_DIR)
sys.path.append(str(BASE_DIR))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mulearnbackend.settings')
django.setup()

DB_NAME = config('DATABASE_NAME')


def column_exists(column_name: str) -> bool:
# Guard against double-running the script on environments that already have the column
query = f"""
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = '{DB_NAME}'
AND TABLE_NAME = 'company_jobs'
AND COLUMN_NAME = '{column_name}';
"""
result = execute(query)
return result and result[0][0] > 0


def add_total_views_column():
if not column_exists('total_views'):
execute(
"""
ALTER TABLE company_jobs
ADD COLUMN total_views INT NOT NULL DEFAULT 0;
"""
)
print("[alter-1.61] Added column 'total_views' to 'company_jobs' table.")
else:
print("[alter-1.61] Column 'total_views' already exists in 'company_jobs' table.")


if __name__ == '__main__':
add_total_views_column()
execute("UPDATE system_setting SET value = '1.61', updated_at = now() WHERE `key` = 'db.version';")
print("[alter-1.61] Updated database version to 1.61.")
68 changes: 68 additions & 0 deletions alter-scripts/alter-1.62.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import os
import sys
from pathlib import Path
from decouple import config
import django

from connection import execute

BASE_DIR = Path(__file__).resolve().parent.parent
os.chdir(BASE_DIR)
sys.path.append(str(BASE_DIR))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mulearnbackend.settings')
django.setup()

DB_NAME = config('DATABASE_NAME')


def table_exists(table_name: str) -> bool:
query = f"""
SELECT COUNT(*)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = '{DB_NAME}'
AND TABLE_NAME = '{table_name}';
"""
result = execute(query)
return result and result[0][0] > 0


def create_comic_comment_table():
if not table_exists('comic_comment'):
execute(
"""
CREATE TABLE `comic_comment` (
`id` varchar(36) NOT NULL,
`comic_id` varchar(36) NOT NULL,
`chapter_id` varchar(36) DEFAULT NULL,
`parent_id` varchar(36) DEFAULT NULL,
`user_id` varchar(36) NOT NULL,
`message` text NOT NULL,
`deleted_at` datetime DEFAULT NULL,
`deleted_by` varchar(36) DEFAULT NULL,
`updated_by` varchar(36) NOT NULL,
`updated_at` datetime NOT NULL,
`created_by` varchar(36) NOT NULL,
`created_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_comic_comment_comic` (`comic_id`,`created_at`),
KEY `idx_comic_comment_chapter` (`chapter_id`,`created_at`),
KEY `idx_comic_comment_parent` (`parent_id`),
KEY `idx_comic_comment_user` (`user_id`),
CONSTRAINT `fk_comic_comment_ref_comic_id` FOREIGN KEY (`comic_id`) REFERENCES `comic` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_comic_comment_ref_parent_id` FOREIGN KEY (`parent_id`) REFERENCES `comic_comment` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_comic_comment_ref_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_comic_comment_ref_del_by` FOREIGN KEY (`deleted_by`) REFERENCES `user` (`id`) ON DELETE SET NULL,
CONSTRAINT `fk_comic_comment_ref_upd_by` FOREIGN KEY (`updated_by`) REFERENCES `user` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_comic_comment_ref_cre_by` FOREIGN KEY (`created_by`) REFERENCES `user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
"""
)
print("[alter-1.62] Created table 'comic_comment'.")
else:
print("[alter-1.62] Table 'comic_comment' already exists.")


if __name__ == '__main__':
create_comic_comment_table()
execute("UPDATE system_setting SET value = '1.62', updated_at = now() WHERE `key` = 'db.version';")
print("[alter-1.62] Updated database version to 1.62.")
1 change: 1 addition & 0 deletions api/auth/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Auth proxy module - forwards requests to auth server
231 changes: 231 additions & 0 deletions api/auth/auth_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
import decouple
import requests
from rest_framework.views import APIView

from utils.response import CustomResponse
from drf_spectacular.utils import extend_schema, inline_serializer, OpenApiResponse
from rest_framework import serializers as s


AUTH_DOMAIN = decouple.config("AUTH_DOMAIN")


class GoogleMobileAuthProxyAPI(APIView):
"""
Proxy endpoint for Google mobile authentication.
Forwards requests to the auth server and returns the response.
"""

@extend_schema(tags=['Auth'], description="Create Google Mobile Auth Proxy.",
responses={200: inline_serializer("AuthTokenResponse", fields={
"hasError": s.BooleanField(default=False),
"statusCode": s.IntegerField(default=200),
"message": s.DictField(default={}),
"response": s.DictField(
help_text="Upstream auth payload (access_token, refresh_token, user info, etc.)"
),
})},
)
def post(self, request):
id_token = request.data.get("id_token") or request.data.get("idToken")

if not id_token:
return CustomResponse(
general_message="ID token is required"
).get_failure_response()

try:
response = requests.post(
f"{AUTH_DOMAIN}/api/v1/auth/google-mobile/",
json={"id_token": id_token},
headers={"Content-Type": "application/json"},
timeout=30,
)

data = response.json()

if data.get("hasError"):
return CustomResponse(
general_message=data.get("message", {}).get("general", ["Authentication failed"])[0]
).get_failure_response()

return CustomResponse(
general_message="Access Granted",
response=data.get("response"),
).get_success_response()

except requests.exceptions.Timeout:
return CustomResponse(
general_message="Authentication server timeout"
).get_failure_response()
except requests.exceptions.RequestException as e:
return CustomResponse(
general_message=f"Authentication server error: {str(e)}"
).get_failure_response()


class AppleMobileAuthProxyAPI(APIView):
"""
Proxy endpoint for Apple mobile authentication.
Forwards requests to the auth server and returns the response.
"""

@extend_schema(tags=['Auth'], description="Create Apple Mobile Auth Proxy.",
responses={200: inline_serializer("AuthAppleTokenResponse", fields={
"hasError": s.BooleanField(default=False),
"statusCode": s.IntegerField(default=200),
"message": s.DictField(default={}),
"response": s.DictField(
help_text="Upstream auth payload (access_token, refresh_token, user info, etc.)"
),
})},
)
def post(self, request):
identity_token = request.data.get("identity_token") or request.data.get("identityToken")
email = request.data.get("email")

if not identity_token:
return CustomResponse(
general_message="Identity token is required"
).get_failure_response()

try:
payload = {"identity_token": identity_token}
if email:
payload["email"] = email

response = requests.post(
f"{AUTH_DOMAIN}/api/v1/auth/apple-mobile/",
json=payload,
headers={"Content-Type": "application/json"},
timeout=30,
)

data = response.json()

if data.get("hasError"):
return CustomResponse(
general_message=data.get("message", {}).get("general", ["Authentication failed"])[0]
).get_failure_response()

return CustomResponse(
general_message="Access Granted",
response=data.get("response"),
).get_success_response()

except requests.exceptions.Timeout:
return CustomResponse(
general_message="Authentication server timeout"
).get_failure_response()
except requests.exceptions.RequestException as e:
return CustomResponse(
general_message=f"Authentication server error: {str(e)}"
).get_failure_response()


class UserAuthenticationProxyAPI(APIView):
"""
Proxy endpoint for email/password user authentication.
Forwards requests to the auth server and returns the response.
"""

@extend_schema(tags=['Auth'], description="Create User Authentication Proxy.",
responses={200: inline_serializer("AuthUserAuthResponse", fields={
"hasError": s.BooleanField(default=False),
"statusCode": s.IntegerField(default=200),
"message": s.DictField(default={}),
"response": s.DictField(
help_text="Upstream auth payload (access_token, refresh_token, user info, etc.)"
),
})},
)
def post(self, request):
email = request.data.get("emailOrMuid")
password = request.data.get("password")

if not email or not password:
return CustomResponse(
general_message="Email and password are required"
).get_failure_response()

try:
response = requests.post(
f"{AUTH_DOMAIN}/api/v1/auth/user-authentication/",
json={"emailOrMuid": email, "password": password},
headers={"Content-Type": "application/json"},
timeout=30,
)

data = response.json()

if data.get("hasError"):
return CustomResponse(
general_message=data.get("message", {}).get("general", ["Authentication failed"])[0]
).get_failure_response()

return CustomResponse(
general_message="Access Granted",
response=data.get("response"),
).get_success_response()

except requests.exceptions.Timeout:
return CustomResponse(
general_message="Authentication server timeout"
).get_failure_response()
except requests.exceptions.RequestException as e:
return CustomResponse(
general_message=f"Authentication server error: {str(e)}"
).get_failure_response()


class RefreshTokenProxyAPI(APIView):
"""
Proxy endpoint for token refresh.
Forwards requests to the auth server and returns fresh tokens.
"""

@extend_schema(tags=['Auth'], description="Create Refresh Token Proxy.",
responses={200: inline_serializer("AuthRefreshTokenResponse", fields={
"hasError": s.BooleanField(default=False),
"statusCode": s.IntegerField(default=200),
"message": s.DictField(default={}),
"response": s.DictField(
help_text="Upstream token payload (new access_token, refresh_token, expiry, etc.)"
),
})},
)
def post(self, request):
refresh_token = request.data.get("refreshToken") or request.data.get("refresh_token")

if not refresh_token:
return CustomResponse(
general_message="Refresh token is required"
).get_failure_response()

try:
response = requests.post(
f"{AUTH_DOMAIN}/api/v1/auth/get-access-token/",
json={"refreshToken": refresh_token},
headers={"Content-Type": "application/json"},
timeout=30,
)

data = response.json()

if data.get("hasError"):
return CustomResponse(
general_message=data.get("message", {}).get("general", ["Token refresh failed"])[0]
).get_failure_response()

return CustomResponse(
response=data.get("response"),
).get_success_response()

except requests.exceptions.Timeout:
return CustomResponse(
general_message="Authentication server timeout"
).get_failure_response()
except requests.exceptions.RequestException as e:
return CustomResponse(
general_message=f"Authentication server error: {str(e)}"
).get_failure_response()
10 changes: 10 additions & 0 deletions api/auth/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.urls import path

from . import auth_views

urlpatterns = [
path('user-authentication/', auth_views.UserAuthenticationProxyAPI.as_view(), name='user_auth_proxy'),
path('google-mobile/', auth_views.GoogleMobileAuthProxyAPI.as_view(), name='google_mobile_proxy'),
path('apple-mobile/', auth_views.AppleMobileAuthProxyAPI.as_view(), name='apple_mobile_proxy'),
path('refresh-token/', auth_views.RefreshTokenProxyAPI.as_view(), name='refresh_token_proxy'),
]
1 change: 1 addition & 0 deletions api/calendar/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Calendar API module
Loading
Loading