54 lines
1.2 KiB
TypeScript
54 lines
1.2 KiB
TypeScript
'use server'
|
|
|
|
import 'server-only';
|
|
import {
|
|
createServerClient,
|
|
type Profile,
|
|
type Result,
|
|
type Status,
|
|
} from '@/utils/supabase';
|
|
|
|
type UserWithStatus = {
|
|
user: Profile;
|
|
status: string;
|
|
created_at: string;
|
|
updated_by: Profile;
|
|
};
|
|
|
|
type PaginatedHistory = UserWithStatus[] & {
|
|
meta: {
|
|
current_page: number;
|
|
per_page: number;
|
|
total_pages: number;
|
|
total_count: number;
|
|
};
|
|
};
|
|
|
|
export const getUsersWithStatuses = async () => {
|
|
try {
|
|
const supabase = await createServerClient();
|
|
|
|
// Get only users with recent statuses (Past 7 days)
|
|
const oneWeekAgo = new Date();
|
|
oneWeekAgo.setDate(oneWeekAgo.getDate() - 7);
|
|
|
|
const { data: recentStatuses, error } = await supabase
|
|
.from('statuses')
|
|
.select(`
|
|
user:profiles!user_id(*),
|
|
status,
|
|
created_at,
|
|
updated_by:profiles!updated_by_id(*)
|
|
`)
|
|
.gte('created_at', oneWeekAgo.toISOString())
|
|
.order('created_at', { ascending: false });
|
|
|
|
if (error) throw error;
|
|
if (!recentStatuses.length) return { success: true, data: []};
|
|
|
|
return { success: true, data: recentStatuses };
|
|
} catch (error) {
|
|
return { success: false, error: `Error: ${error as string}` };
|
|
}
|
|
};
|