Update various configuration files, components, and assets; enhance notification system and API endpoints; improve documentation and styles across the application.
This commit is contained in:
411
composables/useNotificationDelivery.js
Normal file
411
composables/useNotificationDelivery.js
Normal file
@@ -0,0 +1,411 @@
|
||||
import { ref } from "vue";
|
||||
|
||||
export const useNotificationDelivery = () => {
|
||||
const isLoading = ref(false);
|
||||
const error = ref(null);
|
||||
const deliveryStats = ref(null);
|
||||
const emailConfig = ref(null);
|
||||
const pushConfig = ref(null);
|
||||
const smsConfig = ref(null);
|
||||
const deliverySettings = ref(null);
|
||||
const deliveryProviders = ref([]);
|
||||
const deliveryMetrics = ref({
|
||||
sent: 0,
|
||||
delivered: 0,
|
||||
failed: 0,
|
||||
pending: 0
|
||||
});
|
||||
|
||||
// Reset error state
|
||||
const resetError = () => {
|
||||
error.value = null;
|
||||
};
|
||||
|
||||
// Fetch delivery statistics
|
||||
const fetchDeliveryStats = async () => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/stats");
|
||||
|
||||
if (response.success) {
|
||||
deliveryStats.value = response.data;
|
||||
|
||||
// Update metrics from stats
|
||||
deliveryMetrics.value = {
|
||||
sent: response.data.totalSent || 0,
|
||||
delivered: response.data.totalDelivered || 0,
|
||||
failed: response.data.totalFailed || 0,
|
||||
pending: response.data.totalPending || 0
|
||||
};
|
||||
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to fetch delivery stats");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to fetch delivery stats";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Fetch email configuration
|
||||
const fetchEmailConfig = async () => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/email-config");
|
||||
|
||||
if (response.success) {
|
||||
emailConfig.value = response.data;
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to fetch email configuration");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to fetch email configuration";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Fetch push notification configuration
|
||||
const fetchPushConfig = async () => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/push-config");
|
||||
|
||||
if (response.success) {
|
||||
pushConfig.value = response.data;
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to fetch push configuration");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to fetch push configuration";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Fetch SMS configuration
|
||||
const fetchSmsConfig = async () => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/sms-config");
|
||||
|
||||
if (response.success) {
|
||||
smsConfig.value = response.data;
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to fetch SMS configuration");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to fetch SMS configuration";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Fetch delivery settings
|
||||
const fetchDeliverySettings = async () => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/settings");
|
||||
|
||||
if (response.success) {
|
||||
deliverySettings.value = response.data;
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to fetch delivery settings");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to fetch delivery settings";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Fetch all delivery providers
|
||||
const fetchDeliveryProviders = async () => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/providers");
|
||||
|
||||
if (response.success) {
|
||||
deliveryProviders.value = response.data;
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to fetch delivery providers");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to fetch delivery providers";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Fetch delivery performance metrics
|
||||
const fetchDeliveryPerformance = async (period = 'last_30_days') => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch(`/api/notifications/delivery/performance?period=${period}`);
|
||||
|
||||
if (response.success) {
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to fetch delivery performance");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to fetch delivery performance";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Test delivery configuration
|
||||
const testDeliveryConfig = async (channel, config) => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/test", {
|
||||
method: "POST",
|
||||
body: {
|
||||
channel,
|
||||
config
|
||||
}
|
||||
});
|
||||
|
||||
if (response.success) {
|
||||
return {
|
||||
success: true,
|
||||
message: response.message || "Test successful"
|
||||
};
|
||||
} else {
|
||||
throw new Error(response.message || `Failed to test ${channel} configuration`);
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || `Failed to test ${channel} configuration`;
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Update email configuration
|
||||
const updateEmailConfig = async (config) => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/email-config", {
|
||||
method: "PUT",
|
||||
body: config,
|
||||
});
|
||||
|
||||
if (response.success) {
|
||||
// Update local state
|
||||
emailConfig.value = response.data;
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to update email configuration");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to update email configuration";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Update push notification configuration
|
||||
const updatePushConfig = async (config) => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/push-config", {
|
||||
method: "PUT",
|
||||
body: config,
|
||||
});
|
||||
|
||||
if (response.success) {
|
||||
// Update local state
|
||||
pushConfig.value = response.data;
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to update push configuration");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to update push configuration";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Update SMS configuration
|
||||
const updateSmsConfig = async (config) => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/sms-config", {
|
||||
method: "PUT",
|
||||
body: config,
|
||||
});
|
||||
|
||||
if (response.success) {
|
||||
// Update local state
|
||||
smsConfig.value = response.data;
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to update SMS configuration");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to update SMS configuration";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Update delivery settings
|
||||
const updateDeliverySettings = async (settings) => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await $fetch("/api/notifications/delivery/settings", {
|
||||
method: "PUT",
|
||||
body: settings,
|
||||
});
|
||||
|
||||
if (response.success) {
|
||||
// Update local state
|
||||
deliverySettings.value = response.data;
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to update delivery settings");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to update delivery settings";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Retry failed deliveries
|
||||
const retryFailedDeliveries = async (notificationId = null) => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const endpoint = notificationId
|
||||
? `/api/notifications/delivery/retry/${notificationId}`
|
||||
: "/api/notifications/delivery/retry";
|
||||
|
||||
const response = await $fetch(endpoint, {
|
||||
method: "POST"
|
||||
});
|
||||
|
||||
if (response.success) {
|
||||
return {
|
||||
success: true,
|
||||
message: response.message || "Retry initiated successfully",
|
||||
data: response.data
|
||||
};
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to retry deliveries");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to retry deliveries";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Fetch delivery logs
|
||||
const fetchDeliveryLogs = async (params = {}) => {
|
||||
isLoading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const queryString = new URLSearchParams();
|
||||
|
||||
if (params.page) queryString.append("page", params.page);
|
||||
if (params.limit) queryString.append("limit", params.limit);
|
||||
if (params.status) queryString.append("status", params.status);
|
||||
if (params.channel) queryString.append("channel", params.channel);
|
||||
if (params.notificationId) queryString.append("notificationId", params.notificationId);
|
||||
if (params.startDate) queryString.append("startDate", params.startDate);
|
||||
if (params.endDate) queryString.append("endDate", params.endDate);
|
||||
|
||||
const response = await $fetch(`/api/notifications/delivery/logs?${queryString.toString()}`);
|
||||
|
||||
if (response.success) {
|
||||
return response.data;
|
||||
} else {
|
||||
throw new Error(response.message || "Failed to fetch delivery logs");
|
||||
}
|
||||
} catch (err) {
|
||||
error.value = err.data?.message || err.message || "Failed to fetch delivery logs";
|
||||
throw error.value;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
// State
|
||||
isLoading,
|
||||
error,
|
||||
deliveryStats,
|
||||
emailConfig,
|
||||
pushConfig,
|
||||
smsConfig,
|
||||
deliverySettings,
|
||||
deliveryProviders,
|
||||
deliveryMetrics,
|
||||
|
||||
// Methods
|
||||
resetError,
|
||||
fetchDeliveryStats,
|
||||
fetchEmailConfig,
|
||||
fetchPushConfig,
|
||||
fetchSmsConfig,
|
||||
fetchDeliverySettings,
|
||||
fetchDeliveryProviders,
|
||||
fetchDeliveryPerformance,
|
||||
fetchDeliveryLogs,
|
||||
testDeliveryConfig,
|
||||
updateEmailConfig,
|
||||
updatePushConfig,
|
||||
updateSmsConfig,
|
||||
updateDeliverySettings,
|
||||
retryFailedDeliveries
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user