dsg
Copy This
import {
    getSessionUser
} from "./auth.js";
import {
    API_URL
} from "./consts.js";

/**
 * Fetches the discover data
 * 
 * @param {string} search
 * @param {\'users\' | \'events\' | \'venues\' | \'all\'} type 
 * @param {number} page default 1
 * 
 */
export const getDiscoverData = async (search, type, page = 1, signal) => {
    const user = await getSessionUser();

    const response = await fetch(`${API_URL}/wp-json/app/v1/discover-search`, {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            search,
            user_id: user?.id,
            page,
            type,
            per_page: 10
        }),
        signal
    });

    const data = await response.json();
    return data;
};

export const fetchEvent = async (eventId) => {
    let user;
    try {
        user = await getSessionUser();
    } catch (e) {
        console.error("Error fetching user no session");
    }

    const response = await fetch(`${API_URL}/wp-json/app/v1/get-event`, {
        cache: "no-cache",
        method: "POST",
        headers: {
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            event_id: eventId,
            user_id: user?.id
        }),
    });

    const data = await response.json();
    if (response.status !== 200) {
        throw new Error(data.message);
    }

    return data;
};

export const fetchTrendingEvents = async (page, paginate = false, filters = null) => {
    const controller = new AbortController()
    const signal = controller.signal

    try {
        const user = await getSessionUser();

        if (!user) {
            throw new Error(\'Session user not found\');
        }

        const response = await fetch(`${API_URL}/wp-json/app/v1/get-events-trending`, {
            method: "POST",
            headers: {
                "Content-Type": "application/json",
            },
            body: JSON.stringify({
                user_id: user.id,
                page,
                per_page: 10,
                paginate,
                filters
            }),
            signal
        });

        const data = await response.json();

        if (!data) {
            throw new Error(\'Failed to fetch trending events\');
        }

        return data;
    } catch (error) {
        console.error(error);
        return null;
    }
};

export const fetchTrendingVenues = async (page, paginate = false, filters = \'{}\') => {
    try {
        const user = await getSessionUser();

        if (!user) {
            throw new Error(\'Session user not found\');
        }

        const response = await fetch(`${API_URL}/wp-json/app/v1/get-venues-trending`, {
            method: "POST",
            cache: "force-cache",
            headers: {
                "Content-Type": "application/json",
            },
            body: JSON.stringify({
                user_id: user.id,
                page,
                per_page: 10,
                paginate,
                filters
            }),
        });

        const data = await response.json();
        return data;
    } catch (error) {
        console.error(error);
        return null;
    }
};

export const fetchEventCats = async () => {
    const response = await fetch(`${API_URL}/wp-json/app/v1/get-event-categories`, {
        method: "GET",
        cache: "force-cache",
    });

    const data = await response.json();
    return data;
};

export const maybeFavoriteEvent = async (eventId) => {
    const user = await getSessionUser();

    if (!user || !user.id) {
        return null;
    }

    const response = await fetch(`${API_URL}/wp-json/app/v1/favourite-event`, {
        cache: "no-cache",
        method: "POST",
        headers: {
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            event_id: eventId,
            user_id: user.id
        }),
    });

    const data = await response.json();
    return data;
};

export const maybeFollowVenue = async (venueId) => {
    const user = await getSessionUser();

    if (!user || !user.id) {
        return null;
    }

    const response = await fetch(`${API_URL}/wp-json/app/v1/follow-venue`, {
        cache: "no-cache",
        method: "POST",
        headers: {
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            venue_id: venueId,
            user_id: user.id
        }),
    });

    const data = await response.json();
    return data;
}

export const fetchVenue = async (venueId) => {
    const user = await getSessionUser();

    const response = await fetch(`${API_URL}/wp-json/app/v1/get-venue`, {
        cache: "no-cache",
        method: "POST",
        headers: {
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            venue_id: venueId,
            user_id: user?.id
        }),
    });

    const data = await response.json();
    if (response.status !== 200) {
        throw new Error(data.message);
    }

    return data;
}

export const fetchTrendingUsers = async (page) => {
    try {
        const user = await getSessionUser();

        if (!user) {
            throw new Error(\'Session user not found\');
        }

        const response = await fetch(`${API_URL}/wp-json/app/v1/popular-users-cars`, {
            method: "POST",
            cache: "force-cache",
            headers: {
                "Content-Type": "application/json",
            },
            body: JSON.stringify({
                user_id: user.id,
                page,
                per_page: 10,
            }),
        });

        const data = await response.json();
        return data;
    } catch (error) {
        console.error(error);
        return null;
    }
};
Add JS Function Name