30app.get("/health", c => c.json({ status: "ok", timestamp: new Date().toISOString() }));
31
32export default app.fetch;
28 const loadPresets = async () => {
29 try {
30 const response = await fetch('/api/timers');
31 if (response.ok) {
32 const data = await response.json();
77 const handlePresetSave = async (preset: Omit<TimerPreset, 'id' | 'createdAt'>) => {
78 try {
79 const response = await fetch('/api/timers', {
80 method: 'POST',
81 headers: { 'Content-Type': 'application/json' },
99 const handlePresetDelete = async (id: number) => {
100 try {
101 const response = await fetch(`/api/timers/${id}`, {
102 method: 'DELETE'
103 });
17 return c.json(presets);
18 } catch (error) {
19 console.error("Error fetching timer presets:", error);
20 return c.json({ error: "Failed to fetch timer presets" }, 500);
21 }
22});
37 return c.json(preset);
38 } catch (error) {
39 console.error("Error fetching timer preset:", error);
40 return c.json({ error: "Failed to fetch timer preset" }, 500);
41 }
42});
34});
35
36export default app.fetch;
27 }, [username]);
28
29 // Fetch messages on component mount and set up polling
30 useEffect(() => {
31 fetchMessages();
32 const interval = setInterval(fetchMessages, 3000); // Poll every 3 seconds
33 return () => clearInterval(interval);
34 }, []);
39 }, [messages]);
40
41 const fetchMessages = async () => {
42 try {
43 const response = await fetch('/api/chat/messages');
44 if (!response.ok) {
45 throw new Error('Failed to fetch messages');
46 }
47 const messagesData = await response.json();
73 };
74
75 const response = await fetch('/api/chat/messages', {
76 method: 'POST',
77 headers: {
87
88 setNewMessage('');
89 // Fetch messages immediately to show the new message
90 await fetchMessages();
91 } catch (err) {
92 setError(err instanceof Error ? err.message : 'An error occurred');
28
29 try {
30 const response = await fetch('/api/jobs', {
31 method: 'POST',
32 headers: {
9
10 useEffect(() => {
11 fetchJobs();
12 }, []);
13
14 const fetchJobs = async () => {
15 try {
16 setLoading(true);
17 const response = await fetch('/api/jobs');
18 if (!response.ok) {
19 throw new Error('Failed to fetch jobs');
20 }
21 const jobsData = await response.json();
65 <div className="mt-4">
66 <button
67 onClick={fetchJobs}
68 className="bg-red-100 px-3 py-2 rounded-md text-sm font-medium text-red-800 hover:bg-red-200"
69 >
84 </h2>
85 <button
86 onClick={fetchJobs}
87 className="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 transition-colors"
88 >
12 return c.json(messages);
13 } catch (error) {
14 console.error('Error fetching chat messages:', error);
15 return c.json({ error: 'Failed to fetch chat messages' }, 500);
16 }
17});
39});
40
41export default app.fetch;
11 return c.json(jobPostings);
12 } catch (error) {
13 console.error('Error fetching jobs:', error);
14 return c.json({ error: 'Failed to fetch job postings' }, 500);
15 }
16});
31 return c.json(job);
32 } catch (error) {
33 console.error('Error fetching job:', error);
34 return c.json({ error: 'Failed to fetch job posting' }, 500);
35 }
36});