All files / pages/api/transactions index.ts

100% Statements 56/56
100% Branches 8/8
100% Functions 1/1
100% Lines 56/56

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 571x 1x 1x 1x 1x 4x 4x 3x 3x 3x 3x 3x 2x 2x 4x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 4x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x  
import type { APIRoute } from "astro";
import { transactions, accounts } from "../../../data/store";
import type { Transaction } from "../../../types";
 
export const POST: APIRoute = async ({ request }) => {
  try {
    const transaction = (await request.json()) as Omit<Transaction, "id">;
 
    // Validate required fields
    if (
      !transaction.accountId ||
      !transaction.date ||
      !transaction.description ||
      transaction.amount === undefined
    ) {
      return new Response(
        JSON.stringify({ error: "Missing required fields" }),
        {
          status: 400,
          headers: { "Content-Type": "application/json" },
        }
      );
    }
 
    // Validate account exists
    const account = accounts.find((a) => a.id === transaction.accountId);
    if (!account) {
      return new Response(JSON.stringify({ error: "Account not found" }), {
        status: 404,
        headers: { "Content-Type": "application/json" },
      });
    }
 
    // Create new transaction with generated ID
    const newTransaction: Transaction = {
      ...transaction,
      id: (transactions.length + 1).toString(), // Simple ID generation for demo
    };
 
    // Update account balance
    account.balance += transaction.amount;
 
    // Add to transactions array
    transactions.push(newTransaction);
 
    return new Response(JSON.stringify(newTransaction), {
      status: 201,
      headers: { "Content-Type": "application/json" },
    });
  } catch (error) {
    return new Response(JSON.stringify({ error: "Invalid request body" }), {
      status: 400,
      headers: { "Content-Type": "application/json" },
    });
  }
};