// Follow this setup guide to integrate the Deno language server with your editor: // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. // Setup type definitions for built-in Supabase Runtime APIs import "jsr:@supabase/functions-js/edge-runtime.d.ts" import { createClient } from 'jsr:@supabase/supabase-js@2' import { ErrorResponse, SuccessResponse } from 'Responses' import { FilterType, PeriodType, InsertValueModel_v1 } from "QueryTypes" import { RecentQuery } from "RecentQuery" import { MostQuery } from "./QueryMethods/MostQuery.ts" const defaultClient = (authorization: string) => createClient( Deno.env.get('SUPABASE_URL') ?? '', Deno.env.get('SUPABASE_ANON_KEY') ?? '', { global: { headers: { Authorization: authorization! } } } ) Deno.serve(async (req: Request) => { // if(req.method !== "GET") return ErrorResponse("Method error", 405); if(Deno.env.get('SUPABASE_ANON_KEY') !== req.headers.get('Authorization')) return ErrorResponse("Authorization error", 401); const ActionByRequestMethods: { [key: string]: () => Promise } = { "GET": async ()=>{ try { const supabase = defaultClient(req.headers.get('Authorization')!); const params: URLSearchParams = new URLSearchParams(new URL(req.url).search); const filterType : FilterType = params.get("filter") as FilterType ?? ""; const limitCount: number = Number(params.get("limitcount")) ?? 0; switch(filterType){ case FilterType.RECENT: { const { data, error } = await RecentQuery.PlaylistHeadAccessDateVersion(supabase, limitCount); return error ? ErrorResponse(error.message, 500) : SuccessResponse(data?.map((x: { id: string }) => x.id) ?? []); } case FilterType.MOST: { const periodType: PeriodType = params.get("period") as PeriodType ?? ""; const date:Date = new Date(params.get("date") as string); const {data, error} = await MostQuery.v1(supabase, periodType, date, limitCount); return error ? ErrorResponse(error.message, 500) : SuccessResponse(data); } default: return ErrorResponse("FilterTypeError", 401); } } catch (err) { return new Response(String(err?.message ?? err), { status: 500 }) } }, "POST": async ()=>{ try { const supabase = defaultClient(req.headers.get('Authorization')!); const json: InsertValueModel_v1 = await req.json(); const res = await supabase.rpc('insert_sqooped_log', { playlist_id: json.id, now_date: json.date, country_code: json.locale }); return res.error ? ErrorResponse(res.error.message, 500) : SuccessResponse(json); }catch(err){ return new Response(String(err?.message ?? err), { status: 500 }) } } }; return ActionByRequestMethods[req.method] ? await ActionByRequestMethods[req.method]() : ErrorResponse("Method error", 405); }) /* To invoke locally: 1. Run `supabase start` (see: https://supabase.com/docs/reference/cli/supabase-start) 2. Make an HTTP request: curl -i --location --request POST 'http://127.0.0.1:54321/functions/v1/PlaylistIDs' \ --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0' \ --header 'Content-Type: application/json' \ --data '{"name":"Functions"}' */