Next #05 CRUD 기능 구현(Server Action)

개미새·2024년 8월 12일

Next 가보자고

목록 보기
7/14

Server Action

서버에서 실행되는 비동기 함수.

actions/todo-actions.ts

"use server";

import { Database } from "types_db";
import { createServerSupabaseClient } from "utils/supabase/server";

export type TodoRow = Database["public"]["Tables"]["todo"]["Row"];
export type TodoRowInsert = Database["public"]["Tables"]["todo"]["Insert"];
export type TodoRowUpdate = Database["public"]["Tables"]["todo"]["Update"];

// Error
function handleError(error){
    console.log(error);
    throw new Error(error.message);
}

// Get
export async function getTodos({ searchInput = "" }): Promise<TodoRow[]> {
    const supabase = await createServerSupabaseClient();
    const { data, error } = await supabase
    .from('todo')
    .select('*')
    .like('title', `%${searchInput}%`)
    .order('created_at', { ascending: true});

    if(error){
        handleError(error)
    }

    return data;
}

// Create
export async function createTodo(todo: TodoRowInsert){
    const supabase = await createServerSupabaseClient();

    const { data, error } = await supabase.from('todo').insert({
        ...todo,
        created_at: new Date().toISOString(),
    });

    if(error){
        handleError(error);
    }

    return data;
}

// Update
export async function updateTodo(todo: TodoRowUpdate){
    const supabase = await createServerSupabaseClient();

    const { data, error } = await supabase.from('todo').update({
        ...todo,
        updated_at: new Date().toISOString(),
    })
    .eq('id', todo.id);

    if(error){
        handleError(error);
    }

    return data;
}

// Delete
export async function deleteTodo(id: number){
    const supabase = await createServerSupabaseClient();

    const { data, error } = await supabase
    .from('todo').delete().eq('id', id);

    if(error){
        handleError(error);
    }

    return data;
}

Next Server Actions: https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations

profile
개미는 뚠뚠🐜🐜 개발에 미친 새미의 개발 이야기

0개의 댓글