fix: ordering issues

This commit is contained in:
swve 2025-03-22 13:10:26 +01:00
parent 4ab8f52b09
commit 4e7a06b74e
3 changed files with 10 additions and 21 deletions

View file

@ -152,10 +152,10 @@ async def get_course_meta(
async def get_authors():
authors_statement = (
select(ResourceAuthor, User)
.join(User, ResourceAuthor.user_id == User.id)
.join(User, ResourceAuthor.user_id == User.id) # type: ignore
.where(ResourceAuthor.resource_uuid == course.course_uuid)
.order_by(
ResourceAuthor.id.asc()
ResourceAuthor.id.asc() # type: ignore
)
)
return db_session.exec(authors_statement).all()

View file

@ -1,6 +1,6 @@
from fastapi import HTTPException, Request
from sqlmodel import Session, select
from typing import Any, List
from typing import Any
from src.db.courses.courses import Course, CourseRead, AuthorWithRole
from src.db.payments.payments_courses import PaymentsCourse
from src.db.payments.payments_users import PaymentsUser, PaymentStatusEnum, ProviderSpecificData

View file

@ -123,7 +123,7 @@ function EditCourseContributors(props: EditCourseContributorsProps) {
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-[200px]">
{['CREATOR', 'CONTRIBUTOR', 'MAINTAINER', 'REPORTER'].map((role) => (
{['CONTRIBUTOR', 'MAINTAINER', 'REPORTER'].map((role) => (
<DropdownMenuItem
key={role}
onClick={() => updateContributor(contributor.user_id, { authorship: role as ContributorRole })}
@ -180,23 +180,12 @@ function EditCourseContributors(props: EditCourseContributorsProps) {
const sortContributors = (contributors: Contributor[] | undefined) => {
if (!contributors) return [];
return [...contributors].sort((a, b) => {
// First sort by role priority
const rolePriority: Record<ContributorRole, number> = {
'CREATOR': 0,
'MAINTAINER': 1,
'CONTRIBUTOR': 2,
'REPORTER': 3
};
// Find the creator and other contributors
const creator = contributors.find(c => c.authorship === 'CREATOR');
const otherContributors = contributors.filter(c => c.authorship !== 'CREATOR');
const roleDiff = rolePriority[a.authorship] - rolePriority[b.authorship];
if (roleDiff !== 0) return roleDiff;
// Then sort by name
const nameA = `${a.user.first_name} ${a.user.last_name}`.toLowerCase();
const nameB = `${b.user.first_name} ${b.user.last_name}`.toLowerCase();
return nameA.localeCompare(nameB);
});
// Return array with creator at the top, followed by other contributors in their original order
return creator ? [creator, ...otherContributors] : otherContributors;
};
return (