From 0fca9f907ab71d07386f94729c3c8abb0ea4b09a Mon Sep 17 00:00:00 2001 From: Arpit-Mahajan09 Date: Sun, 29 Mar 2026 16:11:18 +0530 Subject: [PATCH 1/8] Update organization join code field constraints and rebased the code to main branch --- .../0019_codechefuser_calendar_data.py | 18 + .../0020_organization_organizationmember.py | 76 +++ ...lendar_data_usernames_ac_uname_and_more.py | 118 ++++ .../0022_alter_organization_join_code.py | 18 + app/src/App.css | 8 +- app/src/App.jsx | 27 +- app/src/components/Footer.jsx | 2 +- app/src/components/NavMenu.jsx | 2 +- app/src/components/Navbar.jsx | 14 +- app/src/icons/atcoder1.svg | 3 + app/src/icons/atcoderDarkTheme.svg | 1 + app/src/icons/atcoderLight.svg | 611 ++++++++++++++++++ app/src/icons/atcoderLightTheme.svg | 611 ++++++++++++++++++ app/src/index.css | 29 +- 14 files changed, 1502 insertions(+), 36 deletions(-) create mode 100644 api/leaderboard/migrations/0019_codechefuser_calendar_data.py create mode 100644 api/leaderboard/migrations/0020_organization_organizationmember.py create mode 100644 api/leaderboard/migrations/0021_leetcodeuser_calendar_data_usernames_ac_uname_and_more.py create mode 100644 api/leaderboard/migrations/0022_alter_organization_join_code.py create mode 100644 app/src/icons/atcoder1.svg create mode 100644 app/src/icons/atcoderDarkTheme.svg create mode 100644 app/src/icons/atcoderLight.svg create mode 100644 app/src/icons/atcoderLightTheme.svg diff --git a/api/leaderboard/migrations/0019_codechefuser_calendar_data.py b/api/leaderboard/migrations/0019_codechefuser_calendar_data.py new file mode 100644 index 0000000..01f33f6 --- /dev/null +++ b/api/leaderboard/migrations/0019_codechefuser_calendar_data.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.5 on 2026-03-21 09:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("leaderboard", "0006_atcoderuser_alter_codeforcesuser_last_activity"), + ] + + operations = [ + migrations.AddField( + model_name="codechefuser", + name="calendar_data", + field=models.TextField(blank=True, default="[]"), + ), + ] diff --git a/api/leaderboard/migrations/0020_organization_organizationmember.py b/api/leaderboard/migrations/0020_organization_organizationmember.py new file mode 100644 index 0000000..a9ca8a7 --- /dev/null +++ b/api/leaderboard/migrations/0020_organization_organizationmember.py @@ -0,0 +1,76 @@ +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + +class Migration(migrations.Migration): + + dependencies = [ + ("leaderboard", "0019_codechefuser_calendar_data"), + ] + + operations = [ + migrations.CreateModel( + name="Organization", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=128)), + ("description", models.TextField(blank=True, null=True)), + ("is_private", models.BooleanField(default=True)), + ( + "join_code", + models.CharField(blank=True, max_length=10, null=True, unique=True), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ( + "admin", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="administered_organizations", + to=settings.AUTH_USER_MODEL, + ), + ), + ], + ), + migrations.CreateModel( + name="OrganizationMember", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("joined_at", models.DateTimeField(auto_now_add=True)), + ( + "organization", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="memberships", + to="leaderboard.organization", + ), + ), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="organization_memberships", + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "unique_together": {("organization", "user")}, + }, + ), + ] diff --git a/api/leaderboard/migrations/0021_leetcodeuser_calendar_data_usernames_ac_uname_and_more.py b/api/leaderboard/migrations/0021_leetcodeuser_calendar_data_usernames_ac_uname_and_more.py new file mode 100644 index 0000000..6a82a1a --- /dev/null +++ b/api/leaderboard/migrations/0021_leetcodeuser_calendar_data_usernames_ac_uname_and_more.py @@ -0,0 +1,118 @@ +# Generated by Django 5.1.5 on 2026-03-24 08:58 + +import django.db.models.deletion +import leaderboard.models +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("leaderboard", "0020_organization_organizationmember"), + ] + + operations = [ + migrations.AddField( + model_name="leetcodeuser", + name="calendar_data", + field=models.TextField(blank=True, default="{}"), + ), + migrations.AddField( + model_name="usernames", + name="ac_uname", + field=models.CharField(default="", max_length=64), + ), + migrations.AddField( + model_name="usernames", + name="bio", + field=models.TextField(blank=True, default="", max_length=500), + ), + migrations.AddField( + model_name="usernames", + name="location", + field=models.CharField(blank=True, default="", max_length=128), + ), + migrations.AddField( + model_name="usernames", + name="occupation", + field=models.CharField(blank=True, default="", max_length=128), + ), + migrations.AddField( + model_name="usernames", + name="organization", + field=models.CharField(blank=True, default="", max_length=128), + ), + migrations.AlterField( + model_name="codeforcesuser", + name="last_activity", + field=models.BigIntegerField( + default=leaderboard.models.get_default_cf_last_activity + ), + ), + migrations.CreateModel( + name="Achievement", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("slug", models.CharField(max_length=64)), + ("tier", models.CharField(max_length=64)), + ("unlocked_at", models.DateTimeField(auto_now_add=True)), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "unique_together": {("user", "slug", "tier")}, + }, + ), + migrations.CreateModel( + name="PostVote", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "vote_type", + models.CharField( + choices=[("like", "Like"), ("dislike", "Dislike")], max_length=7 + ), + ), + ( + "post", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="votes", + to="leaderboard.discussionpost", + ), + ), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "unique_together": {("user", "post")}, + }, + ), + ] diff --git a/api/leaderboard/migrations/0022_alter_organization_join_code.py b/api/leaderboard/migrations/0022_alter_organization_join_code.py new file mode 100644 index 0000000..b8b193d --- /dev/null +++ b/api/leaderboard/migrations/0022_alter_organization_join_code.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.5 on 2026-03-28 11:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("leaderboard", "0021_leetcodeuser_calendar_data_usernames_ac_uname_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="organization", + name="join_code", + field=models.CharField(blank=True, max_length=10, null=True, unique=True), + ), + ] diff --git a/app/src/App.css b/app/src/App.css index ef65cf3..dc075dd 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -9,10 +9,10 @@ html, body { } .App { - overflow-x: hidden; - max-width: 100%; - height: 100vh; - overflow-y: auto; + display: flex; + flex-direction: column; + min-height: 100vh; + width: 100%; } @media (prefers-reduced-motion: no-preference) { diff --git a/app/src/App.jsx b/app/src/App.jsx index 6168eb7..41efffc 100644 --- a/app/src/App.jsx +++ b/app/src/App.jsx @@ -33,10 +33,6 @@ import OrganizationLeaderboard from "./components/OrganizationLeaderboard"; import { UnifiedLeaderboard } from "./components/UnifiedLeaderboard"; import { TrendAnalysis } from "@/components/TrendAnalysis"; -import PublicRoute from "./Context/PublicRoute"; -import ContestCalendar from "./components/ContestCalendar"; -import Blogs from "./components/Blogs.jsx"; -import Achievements from "./components/Achievements.jsx"; const BACKEND = import.meta.env.VITE_BACKEND; const fetchListSafely = async (endpoint, setData) => { @@ -82,9 +78,9 @@ function App() { - -
- + + +
} /> @@ -207,7 +203,6 @@ function App() { } /> - {/* ADD YOUR NEW ROUTE HERE */} } /> - {/* } /> */} - - - - } - /> } /> - -
-
+ + +