Adds aclRepo to @stc/db for canView. Co-Authored-By: Claude Opus 5.5 <[email protected]>
17 lines
745 B
TypeScript
17 lines
745 B
TypeScript
import type { Db } from "../connect";
|
|
|
|
export interface AclEntry { principal_type: "user" | "group"; principal_id: string }
|
|
|
|
export function aclRepo(db: Db) {
|
|
return {
|
|
async listForCourse(courseId: string): Promise<AclEntry[]> {
|
|
const rows = await db.sql`SELECT principal_type, principal_id FROM course_acl WHERE course_id = ${courseId} ORDER BY principal_type, principal_id`;
|
|
return rows.map((r: AclEntry) => ({ principal_type: r.principal_type, principal_id: r.principal_id }));
|
|
},
|
|
async isAuthor(courseId: string, userId: string): Promise<boolean> {
|
|
const rows = await db.sql`SELECT 1 AS x FROM course_authors WHERE course_id = ${courseId} AND user_id = ${userId}`;
|
|
return rows.length > 0;
|
|
},
|
|
};
|
|
}
|