17 const response: ApiResponse<ChatMessage[]> = {
18 success: false,
19 error: "Failed to fetch messages"
20 };
21 return c.json(response, 500);
17 const response: ApiResponse<Job[]> = {
18 success: false,
19 error: "Failed to fetch jobs"
20 };
21 return c.json(response, 500);
17 const response: ApiResponse<null> = {
18 success: false,
19 error: "Failed to fetch buses"
20 };
21 return c.json(response, 500);
30app.get("/health", c => c.json({ status: "ok", timestamp: new Date().toISOString() }));
31
32export default app.fetch;
76
77 try {
78 const response = await fetch('/api/reviews', {
79 method: 'POST',
80 headers: {
32app.get("/health", c => c.json({ status: "ok", timestamp: new Date().toISOString() }));
33
34export default app.fetch;
15 return c.json(response);
16 } catch (error) {
17 console.error('Error fetching messages:', error);
18 const response: MessagesResponse = {
19 success: false,
20 error: 'Failed to fetch messages'
21 };
22 return c.json(response, 500);
12 const [filters, setFilters] = useState<ReviewFilters>({});
13
14 const fetchReviews = async (newFilters: ReviewFilters = {}) => {
15 try {
16 const params = new URLSearchParams();
20 if (newFilters.sortBy) params.append('sortBy', newFilters.sortBy);
21
22 const response = await fetch(`/api/reviews?${params}`);
23 if (!response.ok) throw new Error('Failed to fetch reviews');
24 const data = await response.json();
25 setReviews(data);
26 } catch (error) {
27 console.error('Error fetching reviews:', error);
28 }
29 };
30
31 const fetchCompanies = async () => {
32 try {
33 const response = await fetch('/api/reviews/companies');
34 if (!response.ok) throw new Error('Failed to fetch companies');
35 const data = await response.json();
36 setCompanies(data);
37 } catch (error) {
38 console.error('Error fetching companies:', error);
39 }
40 };
43 const loadData = async () => {
44 setLoading(true);
45 await Promise.all([fetchReviews(), fetchCompanies()]);
46 setLoading(false);
47 };
51 const handleFilterChange = (newFilters: ReviewFilters) => {
52 setFilters(newFilters);
53 fetchReviews(newFilters);
54 };
55
56 const handleReviewSubmitted = () => {
57 // Refresh data after new review
58 fetchReviews(filters);
59 fetchCompanies();
60 // Switch to browse tab to see the new review
61 setActiveTab('browse');
26 return c.json(reviewsList);
27 } catch (error) {
28 console.error("Error fetching reviews:", error);
29 return c.json({ error: "Failed to fetch reviews" }, 500);
30 }
31});
89 return c.json(companies);
90 } catch (error) {
91 console.error("Error fetching companies:", error);
92 return c.json({ error: "Failed to fetch companies" }, 500);
93 }
94});
102 return c.json(companyReviews);
103 } catch (error) {
104 console.error("Error fetching company reviews:", error);
105 return c.json({ error: "Failed to fetch company reviews" }, 500);
106 }
107});
8 const [error, setError] = useState(null);
9
10 const fetchData = async () => {
11 try {
12 const userEndpoint = new URL(USER_ENDPOINT, window.location.origin);
13
14 const res = await fetch(userEndpoint);
15 const data = await res.json();
16 if (!res.ok) {
33
34 useEffect(() => {
35 fetchData();
36 }, []);
37
38 return { data, loading, error, refetch: fetchData };
39}
40