David Headrick 5a6c57bade Add unsubscribe list management functionality
This commit introduces comprehensive functionality for managing unsubscribe lists within the application. Key changes include:

- Creation of new DTOs, services, repositories, and controllers for unsubscribe list operations.
- Updates to `MailingsController.cs` and `TestEmailListsController.cs` to include necessary using directives.
- Registration of `IUnsubscribeListService` and `IUnsubscribeListRepository` in `Program.cs`.
- Implementation of the `UnsubscribeListsController` with API endpoints for CRUD operations.
- Introduction of the `UnsubscribeList` entity and its mapping to database columns.
- Modifications to existing classes, including `Mailing` and `Target`, to reference unsubscribe lists.
- Frontend updates to TypeScript interfaces and components for displaying and selecting unsubscribe lists.

These enhancements provide a more robust email management system.
2025-08-24 08:04:53 -05:00

63 lines
1.8 KiB
TypeScript

import { fileURLToPath, URL } from 'node:url';
import { defineConfig } from 'vite';
import plugin from '@vitejs/plugin-react';
import fs from 'fs';
import path from 'path';
import child_process from 'child_process';
import { env } from 'process';
const baseFolder =
env.APPDATA !== undefined && env.APPDATA !== ''
? `${env.APPDATA}/ASP.NET/https`
: `${env.HOME}/.aspnet/https`;
const certificateName = "Surge365.MassEmailReact.Web";
const certFilePath = path.join(baseFolder, `${certificateName}.pem`);
const keyFilePath = path.join(baseFolder, `${certificateName}.key`);
if (!fs.existsSync(baseFolder)) {
fs.mkdirSync(baseFolder, { recursive: true });
}
if (!fs.existsSync(certFilePath) || !fs.existsSync(keyFilePath)) {
if (0 !== child_process.spawnSync('dotnet', [
'dev-certs',
'https',
'--export-path',
certFilePath,
'--format',
'Pem',
'--no-password',
], { stdio: 'inherit', }).status) {
throw new Error("Could not create certificate.");
}
}
const target = env.ASPNETCORE_HTTPS_PORT ? `https://localhost:${env.ASPNETCORE_HTTPS_PORT}` :
env.ASPNETCORE_URLS ? env.ASPNETCORE_URLS.split(';')[0] : 'https://localhost:7105';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [plugin()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
server: {
proxy: {
'^/api': {
target,
secure: false
}
},
port: parseInt(env.DEV_SERVER_PORT || '52871'),
https: {
key: fs.readFileSync(keyFilePath),
cert: fs.readFileSync(certFilePath),
},
open: 'chrome' // This will try to open Chrome specifically
}
})