This commit is contained in:
Iliyan Angelov
2025-11-18 23:35:19 +02:00
parent ab832f851b
commit 2043ac897c
27 changed files with 2947 additions and 323 deletions

View File

@@ -36,6 +36,91 @@ export interface UpdateStripeSettingsRequest {
stripe_webhook_secret?: string;
}
export interface SmtpSettingsResponse {
status: string;
data: {
smtp_host: string;
smtp_port: string;
smtp_user: string;
smtp_password: string;
smtp_password_masked: string;
smtp_from_email: string;
smtp_from_name: string;
smtp_use_tls: boolean;
has_host: boolean;
has_user: boolean;
has_password: boolean;
updated_at?: string | null;
updated_by?: string | null;
};
message?: string;
}
export interface UpdateSmtpSettingsRequest {
smtp_host?: string;
smtp_port?: string;
smtp_user?: string;
smtp_password?: string;
smtp_from_email?: string;
smtp_from_name?: string;
smtp_use_tls?: boolean;
}
export interface TestSmtpEmailRequest {
email: string;
}
export interface TestSmtpEmailResponse {
status: string;
message: string;
data: {
recipient: string;
sent_at: string;
};
}
export interface CompanySettingsResponse {
status: string;
data: {
company_name: string;
company_tagline: string;
company_logo_url: string;
company_favicon_url: string;
company_phone: string;
company_email: string;
company_address: string;
updated_at?: string | null;
updated_by?: string | null;
};
message?: string;
}
export interface UpdateCompanySettingsRequest {
company_name?: string;
company_tagline?: string;
company_phone?: string;
company_email?: string;
company_address?: string;
}
export interface UploadLogoResponse {
status: string;
message: string;
data: {
logo_url: string;
full_url: string;
};
}
export interface UploadFaviconResponse {
status: string;
message: string;
data: {
favicon_url: string;
full_url: string;
};
}
const systemSettingsService = {
/**
* Get platform currency (public endpoint)
@@ -82,7 +167,123 @@ const systemSettingsService = {
);
return response.data;
},
/**
* Get SMTP settings (Admin only)
*/
getSmtpSettings: async (): Promise<SmtpSettingsResponse> => {
const response = await apiClient.get<SmtpSettingsResponse>(
'/api/admin/system-settings/smtp'
);
return response.data;
},
/**
* Update SMTP settings (Admin only)
*/
updateSmtpSettings: async (
settings: UpdateSmtpSettingsRequest
): Promise<SmtpSettingsResponse> => {
const response = await apiClient.put<SmtpSettingsResponse>(
'/api/admin/system-settings/smtp',
settings
);
return response.data;
},
/**
* Test SMTP email (Admin only)
*/
testSmtpEmail: async (
email: string
): Promise<TestSmtpEmailResponse> => {
const response = await apiClient.post<TestSmtpEmailResponse>(
'/api/admin/system-settings/smtp/test',
{ email }
);
return response.data;
},
/**
* Get company settings (public endpoint)
*/
getCompanySettings: async (): Promise<CompanySettingsResponse> => {
const response = await apiClient.get<CompanySettingsResponse>(
'/api/admin/system-settings/company'
);
return response.data;
},
/**
* Update company settings (Admin only)
*/
updateCompanySettings: async (
settings: UpdateCompanySettingsRequest
): Promise<CompanySettingsResponse> => {
const response = await apiClient.put<CompanySettingsResponse>(
'/api/admin/system-settings/company',
settings
);
return response.data;
},
/**
* Upload company logo (Admin only)
*/
uploadCompanyLogo: async (
file: File
): Promise<UploadLogoResponse> => {
const formData = new FormData();
formData.append('image', file);
const response = await apiClient.post<UploadLogoResponse>(
'/api/admin/system-settings/company/logo',
formData,
{
headers: {
'Content-Type': 'multipart/form-data',
},
}
);
return response.data;
},
/**
* Upload company favicon (Admin only)
*/
uploadCompanyFavicon: async (
file: File
): Promise<UploadFaviconResponse> => {
const formData = new FormData();
formData.append('image', file);
const response = await apiClient.post<UploadFaviconResponse>(
'/api/admin/system-settings/company/favicon',
formData,
{
headers: {
'Content-Type': 'multipart/form-data',
},
}
);
return response.data;
},
};
export default systemSettingsService;
export type {
PlatformCurrencyResponse,
UpdateCurrencyRequest,
StripeSettingsResponse,
UpdateStripeSettingsRequest,
SmtpSettingsResponse,
UpdateSmtpSettingsRequest,
TestSmtpEmailRequest,
TestSmtpEmailResponse,
CompanySettingsResponse,
UpdateCompanySettingsRequest,
UploadLogoResponse,
UploadFaviconResponse,
};