xpeditis2.0/apps/frontend/lib/api/organizations.ts
2025-11-04 07:30:15 +01:00

110 lines
2.3 KiB
TypeScript

/**
* Organizations API
*
* Organization-related API calls
*/
import { apiClient } from './client';
export interface Organization {
id: string;
name: string;
type: 'freight_forwarder' | 'carrier' | 'shipper';
scac?: string;
address: {
street: string;
city: string;
postalCode: string;
country: string;
};
contactEmail: string;
contactPhone: string;
logoUrl?: string;
isActive: boolean;
createdAt: string;
updatedAt: string;
}
export interface CreateOrganizationRequest {
name: string;
type: 'freight_forwarder' | 'carrier' | 'shipper';
scac?: string;
address: {
street: string;
city: string;
postalCode: string;
country: string;
};
contactEmail: string;
contactPhone: string;
}
export interface UpdateOrganizationRequest {
name?: string;
scac?: string;
address?: {
street: string;
city: string;
postalCode: string;
country: string;
};
contactEmail?: string;
contactPhone?: string;
isActive?: boolean;
}
export const organizationsApi = {
/**
* Get current user's organization
*/
async getCurrent(): Promise<Organization> {
return apiClient.get<Organization>('/api/v1/organizations/current');
},
/**
* Get organization by ID
*/
async getById(id: string): Promise<Organization> {
return apiClient.get<Organization>(`/api/v1/organizations/${id}`);
},
/**
* Update organization
*/
async update(id: string, data: UpdateOrganizationRequest): Promise<Organization> {
return apiClient.patch<Organization>(`/api/v1/organizations/${id}`, data);
},
/**
* Upload organization logo
*/
async uploadLogo(id: string, file: File): Promise<{ logoUrl: string }> {
const formData = new FormData();
formData.append('logo', file);
const response = await fetch(
`${process.env.NEXT_PUBLIC_API_URL}/api/v1/organizations/${id}/logo`,
{
method: 'POST',
headers: {
Authorization: `Bearer ${localStorage.getItem('accessToken')}`,
},
body: formData,
}
);
if (!response.ok) {
throw new Error('Failed to upload logo');
}
return response.json();
},
/**
* List all organizations (admin only)
*/
async list(): Promise<Organization[]> {
return apiClient.get<Organization[]>('/api/v1/organizations');
},
};