mirror of
https://github.com/acedanger/finance.git
synced 2025-12-05 14:40:13 -08:00
Add account creation endpoint and dynamic REST client environment config
This commit is contained in:
17
.vscode/settings.json
vendored
17
.vscode/settings.json
vendored
@@ -3,5 +3,20 @@
|
|||||||
"terminal.integrated.enablePersistentSessions": true,
|
"terminal.integrated.enablePersistentSessions": true,
|
||||||
"terminal.integrated.persistentSessionReviveProcess": "onExitAndWindowClose",
|
"terminal.integrated.persistentSessionReviveProcess": "onExitAndWindowClose",
|
||||||
"terminal.integrated.enableMultiLinePasteWarning": "auto",
|
"terminal.integrated.enableMultiLinePasteWarning": "auto",
|
||||||
"terminal.integrated.splitCwd": "workspaceRoot"
|
"terminal.integrated.splitCwd": "workspaceRoot",
|
||||||
|
"rest-client.environmentVariables": {
|
||||||
|
"$shared": {
|
||||||
|
"version": "v1"
|
||||||
|
},
|
||||||
|
"development": {
|
||||||
|
"host": "localhost",
|
||||||
|
"port": "4321",
|
||||||
|
"baseUrl": "http://localhost:4321/api"
|
||||||
|
},
|
||||||
|
"production": {
|
||||||
|
"host": "finance-app-production.example.com",
|
||||||
|
"port": "443",
|
||||||
|
"baseUrl": "https://finance-app-production.example.com/api"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,57 @@
|
|||||||
POST /api/bank-account/update/2 HTTP/1.1
|
@baseUrl = {{baseUrl}}
|
||||||
|
@host = {{host}}
|
||||||
|
@port = {{port}}
|
||||||
|
|
||||||
|
# Bank Account API Testing
|
||||||
|
|
||||||
|
### Get all accounts
|
||||||
|
GET {{baseUrl}}/accounts
|
||||||
|
Accept: application/json
|
||||||
|
|
||||||
|
### Get a specific account
|
||||||
|
GET {{baseUrl}}/accounts/1
|
||||||
|
Accept: application/json
|
||||||
|
|
||||||
|
### Get transactions for an account
|
||||||
|
GET {{baseUrl}}/accounts/1/transactions
|
||||||
|
Accept: application/json
|
||||||
|
|
||||||
|
### Create a new account
|
||||||
|
POST {{baseUrl}}/accounts
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
Host: europa:3050
|
|
||||||
Content-Length: 85
|
|
||||||
|
|
||||||
{"name": "BofA Joint Checking","bankName": "Bank of America","accountNumber": "4581"}
|
{
|
||||||
|
"name": "BofA Joint Checking",
|
||||||
|
"bankName": "Bank of America",
|
||||||
|
"accountNumber": "4581",
|
||||||
|
"balance": 1500,
|
||||||
|
"type": "CHECKING",
|
||||||
|
"status": "ACTIVE"
|
||||||
|
}
|
||||||
|
|
||||||
###
|
### Create a new transaction
|
||||||
|
POST {{baseUrl}}/transactions
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"accountId": "1",
|
||||||
|
"date": "2025-05-06",
|
||||||
|
"description": "Coffee Shop",
|
||||||
|
"amount": -12.50,
|
||||||
|
"category": "Food & Dining",
|
||||||
|
"type": "WITHDRAWAL"
|
||||||
|
}
|
||||||
|
|
||||||
|
### Update a transaction
|
||||||
|
PUT {{baseUrl}}/transactions/1
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Updated Coffee Purchase",
|
||||||
|
"amount": -15.75,
|
||||||
|
"category": "Food & Dining"
|
||||||
|
}
|
||||||
|
|
||||||
|
### Delete a transaction
|
||||||
|
DELETE {{baseUrl}}/transactions/1
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import type { APIRoute } from 'astro';
|
import type { APIRoute } from 'astro';
|
||||||
import { accountService } from '../../../data/db.service';
|
import { AccountStatus, AccountType, accountService } from '../../../data/db.service';
|
||||||
|
import type { Account } from '../../../types';
|
||||||
|
|
||||||
export const GET: APIRoute = async () => {
|
export const GET: APIRoute = async () => {
|
||||||
try {
|
try {
|
||||||
@@ -21,3 +22,44 @@ export const GET: APIRoute = async () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const POST: APIRoute = async ({ request }) => {
|
||||||
|
try {
|
||||||
|
const accountData = (await request.json()) as Omit<Account, 'id' | 'createdAt' | 'updatedAt'>;
|
||||||
|
|
||||||
|
// Validate required fields
|
||||||
|
if (!accountData.name || !accountData.bankName || !accountData.accountNumber) {
|
||||||
|
return new Response(
|
||||||
|
JSON.stringify({
|
||||||
|
error: 'Missing required fields: name, bankName, and accountNumber are required',
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
status: 400,
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set default values if not provided
|
||||||
|
const data = {
|
||||||
|
...accountData,
|
||||||
|
balance: accountData.balance || 0,
|
||||||
|
type: accountData.type || AccountType.CHECKING,
|
||||||
|
status: accountData.status || AccountStatus.ACTIVE,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create the account
|
||||||
|
const newAccount = await accountService.create(data);
|
||||||
|
|
||||||
|
return new Response(JSON.stringify(newAccount), {
|
||||||
|
status: 201,
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error creating account:', error);
|
||||||
|
return new Response(JSON.stringify({ error: 'Failed to create account' }), {
|
||||||
|
status: 500,
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user