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(): async def get_authors():
authors_statement = ( authors_statement = (
select(ResourceAuthor, User) 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) .where(ResourceAuthor.resource_uuid == course.course_uuid)
.order_by( .order_by(
ResourceAuthor.id.asc() ResourceAuthor.id.asc() # type: ignore
) )
) )
return db_session.exec(authors_statement).all() return db_session.exec(authors_statement).all()

View file

@ -1,6 +1,6 @@
from fastapi import HTTPException, Request from fastapi import HTTPException, Request
from sqlmodel import Session, select 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.courses.courses import Course, CourseRead, AuthorWithRole
from src.db.payments.payments_courses import PaymentsCourse from src.db.payments.payments_courses import PaymentsCourse
from src.db.payments.payments_users import PaymentsUser, PaymentStatusEnum, ProviderSpecificData from src.db.payments.payments_users import PaymentsUser, PaymentStatusEnum, ProviderSpecificData

View file

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