Skip to content
1 change: 1 addition & 0 deletions backend/projects/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class Project(models.Model):
blank=True
)

# todo: see if we can remove this without hurting anything
owner = models.ForeignKey(
'userauth.User',
on_delete=models.CASCADE,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Generated by Django 5.1.7 on 2025-04-16 06:34

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('userauth', '0008_alter_user_email_alter_user_username'),
]

operations = [
migrations.RemoveField(
model_name='user',
name='colleges',
),
migrations.AddField(
model_name='user',
name='about_me',
field=models.TextField(blank=True, max_length=500, null=True),
),
migrations.AddField(
model_name='user',
name='college',
field=models.CharField(default='', max_length=255),
),
migrations.AddField(
model_name='user',
name='grad_date',
field=models.CharField(default='', max_length=255),
),
migrations.AddField(
model_name='user',
name='major',
field=models.CharField(default='', max_length=255),
),
]
5 changes: 4 additions & 1 deletion backend/userauth/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ class User(models.Model):
email = models.EmailField(unique=True, blank=True, null=True)
first_name = models.CharField(max_length=255, default="")
last_name = models.CharField(max_length=255, default="")
colleges = ArrayField(models.CharField(max_length=225), blank=True, null=True)
college = models.CharField(max_length=255, default="")
major = models.CharField(max_length=255, default="")
grad_date = models.CharField(max_length=255, default="")
about_me = models.TextField(max_length=500, blank=True, null=True)
followers = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
roles = models.JSONField(default=list)
Expand Down
2 changes: 1 addition & 1 deletion backend/userauth/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
urlpatterns = [
path('onboard/', UsersCRUDView.as_view(), name='onboard-user'), # Create user
path('onboard/check/<str:clerk_id>', check_if_onboarded, name="onboard-check"), # Check if user onboarded
path('<str:pk>/', UsersCRUDView.as_view(), name='user'), # Read, Update, Delete user by ID
path('<str:clerk_id>/', UsersCRUDView.as_view(), name='user'), # Read, Update, Delete user by ID
]
25 changes: 20 additions & 5 deletions backend/userauth/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,27 @@ def post(self, request):
return Response(error_details, status=status.HTTP_400_BAD_REQUEST)

# Get a single user by ID (GET)
def get(self, request, pk):
user = get_object_or_404(User, pk=pk)
def get(self, request, clerk_id):
user = get_object_or_404(User, auth_id=clerk_id)
serializer = UserSerializer(user)
return Response(serializer.data)

# Update an existing user by ID (PUT)
def put(self, request, pk):
user = get_object_or_404(User, pk=pk)
def put(self, request, clerk_id):
user = get_object_or_404(User, auth_id=clerk_id)

current_projects = list(user.projects.all())

new_projects = request.data.get('projects', [])

current_project_ids = [project.id for project in current_projects]

for project in new_projects:
if project not in current_project_ids:
current_project_ids.append(project)

request.data['projects'] = current_project_ids

serializer = UserSerializer(user, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
Expand All @@ -57,4 +70,6 @@ def put(self, request, pk):
"message": "Invalid user data provided.",
"errors": serializer.errors,
}
return Response(error_details, status=status.HTTP_400_BAD_REQUEST)
return Response(error_details, status=status.HTTP_400_BAD_REQUEST)


56 changes: 49 additions & 7 deletions frontend/bitmatch/src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ function AppRoutes() {
}
/>
<Route
path="/my-profile"
path="/profile/:id"
element={
<SignedIn>
<ProfilePage />
Expand All @@ -96,12 +96,54 @@ function AppRoutes() {
/>

{/* Onboarding */}
<Route path="/onboard" element={<OnboardPage />}>
<Route path="interests" element={<InterestPage />} />
<Route path="location" element={<LocationPage />} />
<Route path="positions" element={<PositionPage />} />
<Route path="skills" element={<SkillsPage />} />
<Route path="user" element={<UserPage />} />
<Route
path="/onboard"
element={
<SignedIn>
<OnboardPage />
</SignedIn>
}
>
<Route
path="interests"
element={
<SignedIn>
<InterestPage />
</SignedIn>
}
/>
<Route
path="location"
element={
<SignedIn>
<LocationPage />
</SignedIn>
}
/>
<Route
path="positions"
element={
<SignedIn>
<PositionPage />
</SignedIn>
}
/>
<Route
path="skills"
element={
<SignedIn>
<SkillsPage />
</SignedIn>
}
/>
<Route
path="user"
element={
<SignedIn>
<UserPage />
</SignedIn>
}
/>
</Route>
</Routes>
</main>
Expand Down
Binary file added frontend/bitmatch/src/assets/j-garden2.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/bitmatch/src/assets/profilepic.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 7 additions & 3 deletions frontend/bitmatch/src/components/navbar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,18 @@ import { Button } from "@/components/ui/button";
import logo from "@/assets/logo.png";

export default function Navbar({ links = [] }) {
const { user } = useUser();
const defaultLinks = [
{ href: "/about", label: "About" },
{ href: "/browse", label: "Browse" },
{ href: "/contact", label: "Contact" },
{ href: "/my-profile", label: "My Profile" },
...(user?.id
? [
{ href: "/project-list", label: "Browse" },
{ href: `/profile/${user.id}`, label: "My Profile" },
]
: []),
];

const { user } = useUser();
const [showModal, setShowModal] = useState(false);
const [menuOpen, setMenuOpen] = useState(false);

Expand Down
Loading
Loading