import { db, shoppingLists, shoppingListMembers, eq, and } from "@epicure/db"; export type ShoppingListRole = "owner" | "editor" | "viewer"; export type ShoppingListAccess = { list: typeof shoppingLists.$inferSelect; role: ShoppingListRole; }; /** Resolves a user's access to a shopping list — owner, or member with their assigned role. Null if no access. */ export async function getShoppingListAccess( listId: string, userId: string ): Promise { const list = await db.query.shoppingLists.findFirst({ where: eq(shoppingLists.id, listId) }); if (!list) return null; if (list.userId === userId) return { list, role: "owner" }; const member = await db.query.shoppingListMembers.findFirst({ where: and(eq(shoppingListMembers.listId, listId), eq(shoppingListMembers.userId, userId)), }); if (!member) return null; return { list, role: member.role }; } export function canWriteShoppingList(role: ShoppingListRole): boolean { return role === "owner" || role === "editor"; }