diff --git a/src/pages/api/users.ts b/src/pages/api/users.ts index ce14867..70d19f0 100644 --- a/src/pages/api/users.ts +++ b/src/pages/api/users.ts @@ -11,7 +11,13 @@ export default async function handler( try { const users = await prisma.user.findMany({ include: { - mailingLists: getMailingLists, + mailingLists: getMailingLists + ? { + include: { + mailingList: true, + }, + } + : false, }, }); diff --git a/src/pages/manage.tsx b/src/pages/manage.tsx index f5e39e6..971e2a0 100644 --- a/src/pages/manage.tsx +++ b/src/pages/manage.tsx @@ -1,13 +1,5 @@ import { useEffect, useState } from 'react'; -interface User { - id: number; - firstName: string; - lastName: string; - email: string; - role: string; - status: string; - numOfAbsences: string; -} +import { User } from '../types/types'; export default function Manage() { const [users, setUsers] = useState([]); @@ -15,15 +7,15 @@ export default function Manage() { useEffect(() => { const fetchUsers = async () => { - const apiUrl = `/api/users/`; + const apiUrl = `/api/users?getMailingLists=true`; try { const response = await fetch(apiUrl); if (!response.ok) { throw new Error(response.statusText); } - const data: User[] = await response.json(); - setUsers(data); + const users: User[] = await response.json(); + setUsers(users); } catch (error: unknown) { if (error instanceof Error) { console.error('Error fetching users:', error.message); @@ -81,6 +73,7 @@ export default function Manage() { Name Email Role + Email Subscriptions @@ -99,6 +92,11 @@ export default function Manage() { + + {user.mailingLists + ?.map((mailingList) => mailingList.mailingList.name) + .join(', ')} + ))} diff --git a/src/pages/profile.tsx b/src/pages/profile.tsx index a7cdfe7..9a1b70b 100644 --- a/src/pages/profile.tsx +++ b/src/pages/profile.tsx @@ -2,11 +2,7 @@ import { useSession } from 'next-auth/react'; import { useEffect, useState } from 'react'; import { SignOutButton } from '../components/SignOutButton'; import { Image } from '@chakra-ui/react'; - -interface UserData { - numOfAbsences: number; - absences: Array; -} +import { User } from '../types/types'; export default function Profile() { const { data: session, status } = useSession(); @@ -24,9 +20,9 @@ export default function Profile() { if (!response.ok) { throw new Error(response.statusText); } - const data: UserData = await response.json(); + const data: User = await response.json(); setNumAbsences(data.numOfAbsences); - setUsedAbsences(data.absences.length); + setUsedAbsences(data.absences?.length || null); } catch (error) { console.error('Error fetching data:', error); } diff --git a/src/types/types.ts b/src/types/types.ts new file mode 100644 index 0000000..83bfd8c --- /dev/null +++ b/src/types/types.ts @@ -0,0 +1,38 @@ +interface Absence { + id: number; + lessonDate: Date; + lessonPlan?: string; + reasonOfAbsence: string; + notes?: string; + absentTeacherId: number; + substituteTeacherId?: number; + locationId: number; + subjectId: number; +} + +export interface User { + id: number; + email: string; + firstName: string; + lastName: string; + role: string; + status: string; + numOfAbsences: number; + absences?: Absence[]; + substitutes?: Absence[]; + mailingLists?: UsersOnMailingLists[]; +} + +interface MailingList { + id: number; + name: string; + emails: string[]; + users?: UsersOnMailingLists[]; +} + +export interface UsersOnMailingLists { + user: User; + userId: number; + mailingList: MailingList; + mailingListId: number; +}