- Add comprehensive naming convention (provider-region-resource-env-purpose) - Implement Terraform locals for centralized naming - Update all Terraform resources to use new naming convention - Create deployment automation framework (18 phase scripts) - Add Azure setup scripts (provider registration, quota checks) - Update deployment scripts config with naming functions - Create complete deployment documentation (guide, steps, quick reference) - Add frontend portal implementations (public and internal) - Add UI component library (18 components) - Enhance Entra VerifiedID integration with file utilities - Add API client package for all services - Create comprehensive documentation (naming, deployment, next steps) Infrastructure: - Resource groups, storage accounts with new naming - Terraform configuration updates - Outputs with naming convention examples Deployment: - Automated deployment scripts for all 15 phases - State management and logging - Error handling and validation Documentation: - Naming convention guide and implementation summary - Complete deployment guide (296 steps) - Next steps and quick start guides - Azure prerequisites and setup completion docs Note: ESLint warnings present - will be addressed in follow-up commit
112 lines
2.7 KiB
TypeScript
112 lines
2.7 KiB
TypeScript
import axios, { AxiosInstance } from 'axios';
|
|
|
|
export interface Payment {
|
|
id: string;
|
|
amount: number;
|
|
currency: string;
|
|
status: 'pending' | 'completed' | 'failed' | 'refunded';
|
|
paymentMethod: string;
|
|
createdAt: string;
|
|
description?: string;
|
|
}
|
|
|
|
export interface LedgerEntry {
|
|
id: string;
|
|
accountId: string;
|
|
amount: number;
|
|
currency: string;
|
|
type: 'debit' | 'credit';
|
|
description: string;
|
|
timestamp: string;
|
|
reference?: string;
|
|
}
|
|
|
|
export class FinanceClient {
|
|
protected client: AxiosInstance;
|
|
|
|
constructor(baseURL?: string) {
|
|
const apiBaseURL =
|
|
baseURL ||
|
|
(typeof window !== 'undefined'
|
|
? process.env.NEXT_PUBLIC_FINANCE_SERVICE_URL || 'http://localhost:4005'
|
|
: 'http://localhost:4005');
|
|
|
|
this.client = axios.create({
|
|
baseURL: apiBaseURL,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
|
|
// Set up request interceptor for authentication
|
|
this.client.interceptors.request.use(
|
|
(config) => {
|
|
const token = this.getAuthToken();
|
|
if (token) {
|
|
config.headers.Authorization = `Bearer ${token}`;
|
|
}
|
|
return config;
|
|
},
|
|
(error) => Promise.reject(error)
|
|
);
|
|
}
|
|
|
|
private getAuthToken(): string | null {
|
|
if (typeof window === 'undefined') return null;
|
|
return localStorage.getItem('auth_token');
|
|
}
|
|
|
|
setAuthToken(token: string): void {
|
|
if (typeof window !== 'undefined') {
|
|
localStorage.setItem('auth_token', token);
|
|
}
|
|
}
|
|
|
|
clearAuthToken(): void {
|
|
if (typeof window !== 'undefined') {
|
|
localStorage.removeItem('auth_token');
|
|
}
|
|
}
|
|
|
|
async createPayment(data: {
|
|
amount: number;
|
|
currency: string;
|
|
paymentMethod: string;
|
|
description?: string;
|
|
}): Promise<Payment> {
|
|
const response = await this.client.post<Payment>('/api/v1/payments', data);
|
|
return response.data;
|
|
}
|
|
|
|
async getPayment(paymentId: string): Promise<Payment> {
|
|
const response = await this.client.get<Payment>(`/api/v1/payments/${paymentId}`);
|
|
return response.data;
|
|
}
|
|
|
|
async listPayments(filters?: {
|
|
status?: string;
|
|
page?: number;
|
|
pageSize?: number;
|
|
}): Promise<{ payments: Payment[]; total: number }> {
|
|
const response = await this.client.get<{ payments: Payment[]; total: number }>('/api/v1/payments', {
|
|
params: filters,
|
|
});
|
|
return response.data;
|
|
}
|
|
|
|
async getLedgerEntries(filters?: {
|
|
accountId?: string;
|
|
type?: 'debit' | 'credit';
|
|
startDate?: string;
|
|
endDate?: string;
|
|
page?: number;
|
|
pageSize?: number;
|
|
}): Promise<{ entries: LedgerEntry[]; total: number }> {
|
|
const response = await this.client.get<{ entries: LedgerEntry[]; total: number }>(
|
|
'/api/v1/ledger',
|
|
{ params: filters }
|
|
);
|
|
return response.data;
|
|
}
|
|
}
|