diff --git a/backend/src/routes/calendar.ts b/backend/src/routes/calendar.ts index 608ba707..674e1c7f 100644 --- a/backend/src/routes/calendar.ts +++ b/backend/src/routes/calendar.ts @@ -6,7 +6,7 @@ import DeadlineController from '../controllers/DeadlineController'; const router = Router(); // Get all events for a particular user -router.get('/events/by-user/:user', EventController.getUserEvents); +router.get('/events/by-user/:user_id', EventController.getUserEvents); // Add an event router.post('/events', EventController.postEvent); @@ -21,7 +21,7 @@ router.put('/events/id/:id', EventController.putEvent); router.delete('/events/id/:id', EventController.deleteEvent); // Get all deadlines for a particular user -router.get('/deadlines/by-user/:user', DeadlineController.getUserDeadlines); +router.get('/deadlines/by-user/:user_id', DeadlineController.getUserDeadlines); // Add a deadline router.post('/deadlines', DeadlineController.postDeadline); diff --git a/frontend/src/app/dashboard/calendar/page.tsx b/frontend/src/app/dashboard/calendar/page.tsx index f2b3480d..279cabda 100644 --- a/frontend/src/app/dashboard/calendar/page.tsx +++ b/frontend/src/app/dashboard/calendar/page.tsx @@ -30,37 +30,58 @@ import axios from 'axios'; import { backendBaseUrl } from '@/lib/utils'; import { UserEvent } from '@/lib/types'; +interface Event { + id: number | string; + user_id: string; + title: string; + start_time: Date | string; + end_time?: Date | string | null; + description?: string | null; + location_place?: string | null; + is_recurring: boolean; + recurrence_pattern?: string | null; + recurrence_start_date?: string | null; + recurrence_end_date?: string | null; + is_generated: boolean; + break_time?: string | null; + created_at: string | Date; + deadline_id?: string | null; + allDay?: boolean | null; +} + export default function Home() { //imported from the backend user preferences const { user } = useAuth(); const [events] = useState([ + //commented out setEvents(unused var) + { title: 'event 1', id: '1' }, { title: 'event 2', id: '2' }, { title: 'event 3', id: '3' }, { title: 'event 4', id: '4' }, { title: 'event 5', id: '5' }, ]); - const [allEvents, setAllEvents] = useState([]); + const [allEvents, setAllEvents] = useState([]); const [showModal, setShowModal] = useState(false); const [showDeleteModal, setShowDeleteModal] = useState(false); const [idToDelete, setIdToDelete] = useState(null); - const example: UserEvent = { + const example: Event = { title: '', - end_time: null, - id: '', // UUIDs are strings + end_time: undefined, + start_time: new Date(), + id: 0, break_time: null, - start_time: new Date().toISOString(), - created_at: new Date().toISOString(), + created_at: new Date(), description: null, is_generated: false, is_recurring: false, user_id: '', // you'll want to fill this later when the user is logged in - location_place: null, - recurrence_end_date: null, - recurrence_pattern: null, - recurrence_start_date: null, + location_place: undefined, + recurrence_end_date: undefined, + recurrence_pattern: undefined, + recurrence_start_date: undefined, }; - const [newEvent, setNewEvent] = useState({ + const [newEvent, setNewEvent] = useState({ ...example, }); @@ -82,6 +103,8 @@ export default function Home() { title: event.title, start: event.start_time ? new Date(event.start_time) : undefined, end: event.end_time ? new Date(event.end_time) : undefined, + allDay: false, // default to false if undefined + description: event.description, // Optional: You could add more fields here if FullCalendar needs })); @@ -106,7 +129,7 @@ export default function Home() { eventData: (eventEl) => ({ title: eventEl.getAttribute('title') || '', id: eventEl.getAttribute('data') || '', - start: eventEl.getAttribute('start') || '', + start_time: eventEl.getAttribute('start') || '', }), }); } @@ -120,8 +143,12 @@ export default function Home() { setNewEvent({ ...newEvent, //takes everything in newEvent - start_time: arg.date.toISOString(), - id: new Date().getTime().toString(), + start_time: arg.date, + //allDay: arg.allDay, + id: new Date().getTime(), + end_time: arg.date ?? null, + created_at: new Date(arg.date), + allDay: arg.allDay, }); setShowModal(true); } @@ -153,13 +180,32 @@ export default function Home() { return; } - const event: UserEvent & { start: Date; end?: Date } = { + // const event = { + // ...newEvent, + // user_id: user.uid, + // start_time: data.date.toISOString(), + // start: data.date.toISOString(), + // title: data.draggedEl.innerText, + // allDay: data.allDay, + // id: new Date().getTime(), + // }; + + const event: Event = { ...newEvent, user_id: user.uid, - start_time: data.date.toISOString(), + start_time: data.date, title: data.draggedEl.innerText, - id: new Date().getTime().toString(), - start: data.date, // <-- necessary for FullCalendar + allDay: data.allDay, + id: new Date().getTime(), + end_time: data.date, + created_at: new Date(), + description: null, + is_generated: false, + is_recurring: false, + location_place: undefined, + recurrence_end_date: undefined, + recurrence_pattern: undefined, + recurrence_start_date: undefined, }; setAllEvents([...allEvents, event]); @@ -201,6 +247,15 @@ export default function Home() { setNewEvent({ ...newEvent, title: e.target.value, + description: e.target.value, + location_place: e.target.value, + start_time: e.target.value ? new Date(e.target.value) : new Date(), + end_time: e.target.value ? new Date(e.target.value) : undefined, + is_recurring: e.target.checked, + recurrence_start_date: e.target.value, + recurrence_end_date: e.target.value, + recurrence_pattern: e.target.value, + is_generated: e.target.checked, }); }; @@ -210,11 +265,9 @@ export default function Home() { console.log('no user found'); return; } - const eventWithUser: UserEvent & { start: Date; end?: Date } = { + const eventWithUser = { ...newEvent, user_id: user.uid, - start: new Date(newEvent.start_time), // <-- ensure start is there - end: newEvent.end_time ? new Date(newEvent.end_time) : undefined, }; setAllEvents([...allEvents, eventWithUser]); @@ -233,6 +286,13 @@ export default function Home() { }); } + function generatePerfectSchedule() { + console.log('Generate perfect schedule clicked'); + // Add your logic to generate the perfect schedule here + // For example, you can call an API endpoint or perform some calculations + // and then update the state accordingly. + } + return ( <>