refactor: Rename EmailPorifler to MessagingService
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -370,4 +370,4 @@ FodyWeavers.xsd
|
|||||||
/EnvelopeGenerator.Server/EnvelopeGenerator.Server/publish-output
|
/EnvelopeGenerator.Server/EnvelopeGenerator.Server/publish-output
|
||||||
/EnvelopeGenerator.Server/EnvelopeGenerator.Server/tekh_softHSM_test.md
|
/EnvelopeGenerator.Server/EnvelopeGenerator.Server/tekh_softHSM_test.md
|
||||||
/legacy/App
|
/legacy/App
|
||||||
/src/DigitalData.EmailProfiler.API/appsettings.Secrets.json
|
/src/DigitalData.MessagingService.API/appsettings.Secrets.json
|
||||||
|
|||||||
14
AGENTS.md
14
AGENTS.md
@@ -1,7 +1,7 @@
|
|||||||
# EmailProfiler - Agent Notes and Future Enhancements
|
# MessagingService - Agent Notes and Future Enhancements
|
||||||
|
|
||||||
## Purpose
|
## Purpose
|
||||||
This document contains important notes, decisions, and future enhancement plans for the EmailProfiler application. This is intended for AI agents and developers who will continue development.
|
This document contains important notes, decisions, and future enhancement plans for the MessagingService application. This is intended for AI agents and developers who will continue development.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -302,7 +302,7 @@ return Accepted(); // HTTP 202 - command queued for processing
|
|||||||
|
|
||||||
2. **Create RabbitMqEmailQueue.cs**:
|
2. **Create RabbitMqEmailQueue.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
// src/DigitalData.EmailProfiler.Infrastructure/Queue/RabbitMqEmailQueue.cs
|
// src/DigitalData.MessagingService.Infrastructure/Queue/RabbitMqEmailQueue.cs
|
||||||
public class RabbitMqEmailQueue : IEmailQueue
|
public class RabbitMqEmailQueue : IEmailQueue
|
||||||
{
|
{
|
||||||
private readonly IConnection _connection;
|
private readonly IConnection _connection;
|
||||||
@@ -412,7 +412,7 @@ return Accepted(); // HTTP 202 - command queued for processing
|
|||||||
|
|
||||||
**Example Command**:
|
**Example Command**:
|
||||||
```csharp
|
```csharp
|
||||||
// src/DigitalData.EmailProfiler.Application/EmailProfiles/Commands/CreateEmailProfileCommand.cs
|
// src/DigitalData.MessagingService.Application/EmailProfiles/Commands/CreateEmailProfileCommand.cs
|
||||||
public record CreateEmailProfileCommand(string ProfileName, int EmailAccountId) : IRequest<int>;
|
public record CreateEmailProfileCommand(string ProfileName, int EmailAccountId) : IRequest<int>;
|
||||||
|
|
||||||
public class CreateEmailProfileCommandHandler : IRequestHandler<CreateEmailProfileCommand, int>
|
public class CreateEmailProfileCommandHandler : IRequestHandler<CreateEmailProfileCommand, int>
|
||||||
@@ -498,7 +498,7 @@ public class LimilabsEmailService : IEmailService
|
|||||||
**Status**: ✅ Complete - DbContext, Repository, Services, RabbitMQ, and DI implemented
|
**Status**: ✅ Complete - DbContext, Repository, Services, RabbitMQ, and DI implemented
|
||||||
|
|
||||||
**Completed**:
|
**Completed**:
|
||||||
- ✅ EmailProfilerDbContext with DbSet<T> for all entities (attribute-only config, no overrides)
|
- ✅ MessagingServiceDbContext with DbSet<T> for all entities (attribute-only config, no overrides)
|
||||||
- ✅ Generic Repository<T> implementing IRepository<T> with AutoMapper-based CRUD
|
- ✅ Generic Repository<T> implementing IRepository<T> with AutoMapper-based CRUD
|
||||||
- ✅ LimilabsEmailService (IMAP/SMTP with OAuth2 using Limilabs Mail.dll - TODO: Add Limilabs.Mail NuGet)
|
- ✅ LimilabsEmailService (IMAP/SMTP with OAuth2 using Limilabs Mail.dll - TODO: Add Limilabs.Mail NuGet)
|
||||||
- ✅ GdPicturePdfProcessingService (using GdPicture.NET 14 - TODO: Add GdPicture NuGet and license)
|
- ✅ GdPicturePdfProcessingService (using GdPicture.NET 14 - TODO: Add GdPicture NuGet and license)
|
||||||
@@ -517,7 +517,7 @@ public class LimilabsEmailService : IEmailService
|
|||||||
|
|
||||||
**DbContext Example**:
|
**DbContext Example**:
|
||||||
```csharp
|
```csharp
|
||||||
public class EmailProfilerDbContext : DbContext
|
public class MessagingServiceDbContext : DbContext
|
||||||
{
|
{
|
||||||
public DbSet<EmailAccount> EmailAccounts { get; set; }
|
public DbSet<EmailAccount> EmailAccounts { get; set; }
|
||||||
public DbSet<EmailProfile> EmailProfiles { get; set; }
|
public DbSet<EmailProfile> EmailProfiles { get; set; }
|
||||||
@@ -695,7 +695,7 @@ if (builder.Configuration["Hosting:Mode"] == "WindowsService")
|
|||||||
|
|
||||||
Install as Windows Service:
|
Install as Windows Service:
|
||||||
```bash
|
```bash
|
||||||
sc create EmailProfiler binPath="C:\Path\To\DigitalData.EmailProfiler.API.exe"
|
sc create MessagingService binPath="C:\Path\To\DigitalData.MessagingService.API.exe"
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -5,15 +5,15 @@ VisualStudioVersion = 17.14.36717.8
|
|||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.EmailProfiler.API", "src\DigitalData.EmailProfiler.API\DigitalData.EmailProfiler.API.csproj", "{456817AB-67A3-49DD-9EC5-1253A727B958}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.MessagingService.API", "src\DigitalData.MessagingService.API\DigitalData.MessagingService.API.csproj", "{456817AB-67A3-49DD-9EC5-1253A727B958}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.EmailProfiler.Infrastructure", "src\DigitalData.EmailProfiler.Infrastructure\DigitalData.EmailProfiler.Infrastructure.csproj", "{D2C32417-FE92-4063-97A9-3DA8D811E561}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.MessagingService.Infrastructure", "src\DigitalData.MessagingService.Infrastructure\DigitalData.MessagingService.Infrastructure.csproj", "{D2C32417-FE92-4063-97A9-3DA8D811E561}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.EmailProfiler.Domain", "src\DigitalData.EmailProfiler.Domain\DigitalData.EmailProfiler.Domain.csproj", "{76ADC1D0-4DFA-0B1E-57C9-2636434A0043}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.MessagingService.Domain", "src\DigitalData.MessagingService.Domain\DigitalData.MessagingService.Domain.csproj", "{76ADC1D0-4DFA-0B1E-57C9-2636434A0043}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.EmailProfiler.Application", "src\DigitalData.EmailProfiler.Application\DigitalData.EmailProfiler.Application.csproj", "{1874A827-C6A5-EB5E-0FE9-30A7200382B7}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.MessagingService.Application", "src\DigitalData.MessagingService.Application\DigitalData.MessagingService.Application.csproj", "{1874A827-C6A5-EB5E-0FE9-30A7200382B7}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.EmailProfiler.Tests", "tests\DigitalData.EmailProfiler.Tests\DigitalData.EmailProfiler.Tests.csproj", "{211FB65F-2406-474E-A426-DA246B250AB8}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.MessagingService.Tests", "tests\DigitalData.MessagingService.Tests\DigitalData.MessagingService.Tests.csproj", "{211FB65F-2406-474E-A426-DA246B250AB8}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{4F20FEFD-9289-42C6-ABA6-8DB236D74559}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{4F20FEFD-9289-42C6-ABA6-8DB236D74559}"
|
||||||
EndProject
|
EndProject
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
# EmailProfiler - Implementation Guide for AI Agents
|
# MessagingService - Implementation Guide for AI Agents
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
This guide provides step-by-step instructions for AI agents to continue the implementation of the EmailProfiler application. The project is a modern .NET 8.0 rewrite of a legacy VB.NET email automation system.
|
This guide provides step-by-step instructions for AI agents to continue the implementation of the MessagingService application. The project is a modern .NET 8.0 rewrite of a legacy VB.NET email automation system.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ This guide provides step-by-step instructions for AI agents to continue the impl
|
|||||||
## Architecture Overview
|
## Architecture Overview
|
||||||
|
|
||||||
```
|
```
|
||||||
DigitalData.EmailProfiler/
|
DigitalData.MessagingService/
|
||||||
├── src/
|
├── src/
|
||||||
│ ├── Domain/ ✅ COMPLETE
|
│ ├── Domain/ ✅ COMPLETE
|
||||||
│ ├── Application/ 🚧 IN PROGRESS (5%)
|
│ ├── Application/ 🚧 IN PROGRESS (5%)
|
||||||
@@ -56,15 +56,15 @@ DigitalData.EmailProfiler/
|
|||||||
|
|
||||||
#### 2.1. Create Repository Interfaces
|
#### 2.1. Create Repository Interfaces
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.Application/Interfaces/Repositories/`
|
**Location**: `src/DigitalData.MessagingService.Application/Interfaces/Repositories/`
|
||||||
|
|
||||||
Create these files:
|
Create these files:
|
||||||
|
|
||||||
**IEmailProfileRepository.cs**:
|
**IEmailProfileRepository.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
using DigitalData.EmailProfiler.Domain.Entities;
|
using DigitalData.MessagingService.Domain.Entities;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.Interfaces.Repositories;
|
namespace DigitalData.MessagingService.Application.Interfaces.Repositories;
|
||||||
|
|
||||||
public interface IEmailProfileRepository
|
public interface IEmailProfileRepository
|
||||||
{
|
{
|
||||||
@@ -80,9 +80,9 @@ public interface IEmailProfileRepository
|
|||||||
|
|
||||||
**IEmailAccountRepository.cs**:
|
**IEmailAccountRepository.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
using DigitalData.EmailProfiler.Domain.Entities;
|
using DigitalData.MessagingService.Domain.Entities;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.Interfaces.Repositories;
|
namespace DigitalData.MessagingService.Application.Interfaces.Repositories;
|
||||||
|
|
||||||
public interface IEmailAccountRepository
|
public interface IEmailAccountRepository
|
||||||
{
|
{
|
||||||
@@ -97,9 +97,9 @@ public interface IEmailAccountRepository
|
|||||||
|
|
||||||
**IEmailHistoryRepository.cs**:
|
**IEmailHistoryRepository.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
using DigitalData.EmailProfiler.Domain.Entities;
|
using DigitalData.MessagingService.Domain.Entities;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.Interfaces.Repositories;
|
namespace DigitalData.MessagingService.Application.Interfaces.Repositories;
|
||||||
|
|
||||||
public interface IEmailHistoryRepository
|
public interface IEmailHistoryRepository
|
||||||
{
|
{
|
||||||
@@ -116,11 +116,11 @@ public interface IEmailHistoryRepository
|
|||||||
|
|
||||||
#### 2.2. Create Service Interfaces
|
#### 2.2. Create Service Interfaces
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.Application/Interfaces/Services/`
|
**Location**: `src/DigitalData.MessagingService.Application/Interfaces/Services/`
|
||||||
|
|
||||||
**IEmailService.cs**:
|
**IEmailService.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
namespace DigitalData.EmailProfiler.Application.Interfaces.Services;
|
namespace DigitalData.MessagingService.Application.Interfaces.Services;
|
||||||
|
|
||||||
public interface IEmailService
|
public interface IEmailService
|
||||||
{
|
{
|
||||||
@@ -169,13 +169,13 @@ public class EmailAttachmentData
|
|||||||
|
|
||||||
#### 2.3. Create MediatR Commands
|
#### 2.3. Create MediatR Commands
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.Application/EmailProfiles/Commands/`
|
**Location**: `src/DigitalData.MessagingService.Application/EmailProfiles/Commands/`
|
||||||
|
|
||||||
**CreateEmailProfileCommand.cs**:
|
**CreateEmailProfileCommand.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.EmailProfiles.Commands;
|
namespace DigitalData.MessagingService.Application.EmailProfiles.Commands;
|
||||||
|
|
||||||
public record CreateEmailProfileCommand(
|
public record CreateEmailProfileCommand(
|
||||||
string ProfileName,
|
string ProfileName,
|
||||||
@@ -213,15 +213,15 @@ public class CreateEmailProfileCommandHandler : IRequestHandler<CreateEmailProfi
|
|||||||
|
|
||||||
#### 2.4. Create MediatR Queries
|
#### 2.4. Create MediatR Queries
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.Application/EmailProfiles/Queries/`
|
**Location**: `src/DigitalData.MessagingService.Application/EmailProfiles/Queries/`
|
||||||
|
|
||||||
**GetEmailProfilesQuery.cs**:
|
**GetEmailProfilesQuery.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
using MediatR;
|
using MediatR;
|
||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Dtos;
|
using DigitalData.MessagingService.Application.Common.Dtos;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.EmailProfiles.Queries;
|
namespace DigitalData.MessagingService.Application.EmailProfiles.Queries;
|
||||||
|
|
||||||
public record GetEmailProfilesQuery : IRequest<List<EmailProfileDto>>;
|
public record GetEmailProfilesQuery : IRequest<List<EmailProfileDto>>;
|
||||||
|
|
||||||
@@ -248,14 +248,14 @@ public class GetEmailProfilesQueryHandler : IRequestHandler<GetEmailProfilesQuer
|
|||||||
|
|
||||||
#### 2.5. Create Validators
|
#### 2.5. Create Validators
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.Application/EmailProfiles/Validators/`
|
**Location**: `src/DigitalData.MessagingService.Application/EmailProfiles/Validators/`
|
||||||
|
|
||||||
**CreateEmailProfileCommandValidator.cs**:
|
**CreateEmailProfileCommandValidator.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using DigitalData.EmailProfiler.Application.EmailProfiles.Commands;
|
using DigitalData.MessagingService.Application.EmailProfiles.Commands;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.EmailProfiles.Validators;
|
namespace DigitalData.MessagingService.Application.EmailProfiles.Validators;
|
||||||
|
|
||||||
public class CreateEmailProfileCommandValidator : AbstractValidator<CreateEmailProfileCommand>
|
public class CreateEmailProfileCommandValidator : AbstractValidator<CreateEmailProfileCommand>
|
||||||
{
|
{
|
||||||
@@ -277,15 +277,15 @@ public class CreateEmailProfileCommandValidator : AbstractValidator<CreateEmailP
|
|||||||
|
|
||||||
#### 2.6. Create AutoMapper Profiles
|
#### 2.6. Create AutoMapper Profiles
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.Application/Common/Mappings/`
|
**Location**: `src/DigitalData.MessagingService.Application/Common/Mappings/`
|
||||||
|
|
||||||
**MappingProfile.cs**:
|
**MappingProfile.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.EmailProfiler.Domain.Entities;
|
using DigitalData.MessagingService.Domain.Entities;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Dtos;
|
using DigitalData.MessagingService.Application.Common.Dtos;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.Common.Mappings;
|
namespace DigitalData.MessagingService.Application.Common.Mappings;
|
||||||
|
|
||||||
public class MappingProfile : Profile
|
public class MappingProfile : Profile
|
||||||
{
|
{
|
||||||
@@ -312,14 +312,14 @@ public class MappingProfile : Profile
|
|||||||
|
|
||||||
#### 2.7. Create DependencyInjection.cs
|
#### 2.7. Create DependencyInjection.cs
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.Application/DependencyInjection.cs`
|
**Location**: `src/DigitalData.MessagingService.Application/DependencyInjection.cs`
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application;
|
namespace DigitalData.MessagingService.Application;
|
||||||
|
|
||||||
public static class DependencyInjection
|
public static class DependencyInjection
|
||||||
{
|
{
|
||||||
@@ -348,7 +348,7 @@ public static class DependencyInjection
|
|||||||
#### 3.1. Add NuGet Packages
|
#### 3.1. Add NuGet Packages
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd src/DigitalData.EmailProfiler.Infrastructure
|
cd src/DigitalData.MessagingService.Infrastructure
|
||||||
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
|
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
|
||||||
dotnet add package Microsoft.EntityFrameworkCore.Tools
|
dotnet add package Microsoft.EntityFrameworkCore.Tools
|
||||||
dotnet add package MailKit
|
dotnet add package MailKit
|
||||||
@@ -360,18 +360,18 @@ dotnet add package Microsoft.AspNetCore.DataProtection
|
|||||||
|
|
||||||
#### 3.2. Create DbContext
|
#### 3.2. Create DbContext
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.Infrastructure/Persistence/EmailProfilerDbContext.cs`
|
**Location**: `src/DigitalData.MessagingService.Infrastructure/Persistence/MessagingServiceDbContext.cs`
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using DigitalData.EmailProfiler.Domain.Entities;
|
using DigitalData.MessagingService.Domain.Entities;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure.Persistence;
|
namespace DigitalData.MessagingService.Infrastructure.Persistence;
|
||||||
|
|
||||||
public class EmailProfilerDbContext : DbContext
|
public class MessagingServiceDbContext : DbContext
|
||||||
{
|
{
|
||||||
public EmailProfilerDbContext(DbContextOptions<EmailProfilerDbContext> options) : base(options) { }
|
public MessagingServiceDbContext(DbContextOptions<MessagingServiceDbContext> options) : base(options) { }
|
||||||
|
|
||||||
public DbSet<EmailAccount> EmailAccounts { get; set; }
|
public DbSet<EmailAccount> EmailAccounts { get; set; }
|
||||||
public DbSet<EmailProfile> EmailProfiles { get; set; }
|
public DbSet<EmailProfile> EmailProfiles { get; set; }
|
||||||
@@ -420,21 +420,21 @@ public class EmailProfilerDbContext : DbContext
|
|||||||
|
|
||||||
#### 3.3. Create Repositories
|
#### 3.3. Create Repositories
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.Infrastructure/Persistence/Repositories/`
|
**Location**: `src/DigitalData.MessagingService.Infrastructure/Persistence/Repositories/`
|
||||||
|
|
||||||
**EmailProfileRepository.cs**:
|
**EmailProfileRepository.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using DigitalData.EmailProfiler.Domain.Entities;
|
using DigitalData.MessagingService.Domain.Entities;
|
||||||
using DigitalData.EmailProfiler.Application.Interfaces.Repositories;
|
using DigitalData.MessagingService.Application.Interfaces.Repositories;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure.Persistence.Repositories;
|
namespace DigitalData.MessagingService.Infrastructure.Persistence.Repositories;
|
||||||
|
|
||||||
public class EmailProfileRepository : IEmailProfileRepository
|
public class EmailProfileRepository : IEmailProfileRepository
|
||||||
{
|
{
|
||||||
private readonly EmailProfilerDbContext _context;
|
private readonly MessagingServiceDbContext _context;
|
||||||
|
|
||||||
public EmailProfileRepository(EmailProfilerDbContext context)
|
public EmailProfileRepository(MessagingServiceDbContext context)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
}
|
}
|
||||||
@@ -516,17 +516,17 @@ Create similar repositories for **EmailAccountRepository**, **EmailHistoryReposi
|
|||||||
|
|
||||||
#### 3.5. Create DependencyInjection.cs
|
#### 3.5. Create DependencyInjection.cs
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.Infrastructure/DependencyInjection.cs`
|
**Location**: `src/DigitalData.MessagingService.Infrastructure/DependencyInjection.cs`
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using DigitalData.EmailProfiler.Infrastructure.Persistence;
|
using DigitalData.MessagingService.Infrastructure.Persistence;
|
||||||
using DigitalData.EmailProfiler.Application.Interfaces.Repositories;
|
using DigitalData.MessagingService.Application.Interfaces.Repositories;
|
||||||
using DigitalData.EmailProfiler.Infrastructure.Persistence.Repositories;
|
using DigitalData.MessagingService.Infrastructure.Persistence.Repositories;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure;
|
namespace DigitalData.MessagingService.Infrastructure;
|
||||||
|
|
||||||
public static class DependencyInjection
|
public static class DependencyInjection
|
||||||
{
|
{
|
||||||
@@ -535,7 +535,7 @@ public static class DependencyInjection
|
|||||||
IConfiguration configuration)
|
IConfiguration configuration)
|
||||||
{
|
{
|
||||||
// DbContext
|
// DbContext
|
||||||
services.AddDbContext<EmailProfilerDbContext>(options =>
|
services.AddDbContext<MessagingServiceDbContext>(options =>
|
||||||
options.UseSqlServer(
|
options.UseSqlServer(
|
||||||
configuration.GetConnectionString("DefaultConnection"),
|
configuration.GetConnectionString("DefaultConnection"),
|
||||||
sqlOptions =>
|
sqlOptions =>
|
||||||
@@ -572,7 +572,7 @@ public static class DependencyInjection
|
|||||||
#### 4.1. Add NuGet Packages
|
#### 4.1. Add NuGet Packages
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd src/DigitalData.EmailProfiler.API
|
cd src/DigitalData.MessagingService.API
|
||||||
dotnet add package Serilog.AspNetCore
|
dotnet add package Serilog.AspNetCore
|
||||||
dotnet add package Serilog.Sinks.File
|
dotnet add package Serilog.Sinks.File
|
||||||
dotnet add package Serilog.Sinks.MSSqlServer
|
dotnet add package Serilog.Sinks.MSSqlServer
|
||||||
@@ -581,12 +581,12 @@ dotnet add package Scalar.AspNetCore
|
|||||||
|
|
||||||
#### 4.2. Update Program.cs
|
#### 4.2. Update Program.cs
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.API/Program.cs`
|
**Location**: `src/DigitalData.MessagingService.API/Program.cs`
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
using DigitalData.EmailProfiler.API;
|
using DigitalData.MessagingService.API;
|
||||||
using DigitalData.EmailProfiler.Application;
|
using DigitalData.MessagingService.Application;
|
||||||
using DigitalData.EmailProfiler.Infrastructure;
|
using DigitalData.MessagingService.Infrastructure;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
using Scalar.AspNetCore;
|
using Scalar.AspNetCore;
|
||||||
|
|
||||||
@@ -639,7 +639,7 @@ app.MapControllers();
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Log.Information("Starting EmailProfiler API");
|
Log.Information("Starting MessagingService API");
|
||||||
app.Run();
|
app.Run();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -654,16 +654,16 @@ finally
|
|||||||
|
|
||||||
#### 4.3. Create Controllers
|
#### 4.3. Create Controllers
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.API/Controllers/`
|
**Location**: `src/DigitalData.MessagingService.API/Controllers/`
|
||||||
|
|
||||||
**EmailProfilesController.cs**:
|
**EmailProfilesController.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
using DigitalData.EmailProfiler.Application.EmailProfiles.Commands;
|
using DigitalData.MessagingService.Application.EmailProfiles.Commands;
|
||||||
using DigitalData.EmailProfiler.Application.EmailProfiles.Queries;
|
using DigitalData.MessagingService.Application.EmailProfiles.Queries;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.API.Controllers;
|
namespace DigitalData.MessagingService.API.Controllers;
|
||||||
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Route("api/[controller]")]
|
[Route("api/[controller]")]
|
||||||
@@ -713,13 +713,13 @@ Create similar controllers for **EmailAccountsController**, **EmailHistoryContro
|
|||||||
|
|
||||||
#### 4.4. Create Background Workers
|
#### 4.4. Create Background Workers
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.API/Workers/`
|
**Location**: `src/DigitalData.MessagingService.API/Workers/`
|
||||||
|
|
||||||
**EmailPollingWorker.cs** and **EmailSenderWorker.cs** (See agents.md for implementation examples)
|
**EmailPollingWorker.cs** and **EmailSenderWorker.cs** (See agents.md for implementation examples)
|
||||||
|
|
||||||
#### 4.5. Update appsettings.json
|
#### 4.5. Update appsettings.json
|
||||||
|
|
||||||
**Location**: `src/DigitalData.EmailProfiler.API/appsettings.json`
|
**Location**: `src/DigitalData.MessagingService.API/appsettings.json`
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -758,7 +758,7 @@ Create similar controllers for **EmailAccountsController**, **EmailHistoryContro
|
|||||||
#### 5.1. Add NuGet Packages
|
#### 5.1. Add NuGet Packages
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd tests/DigitalData.EmailProfiler.Tests
|
cd tests/DigitalData.MessagingService.Tests
|
||||||
dotnet add package FakeItEasy
|
dotnet add package FakeItEasy
|
||||||
dotnet add package Bogus
|
dotnet add package Bogus
|
||||||
dotnet add package FluentAssertions
|
dotnet add package FluentAssertions
|
||||||
@@ -768,15 +768,15 @@ dotnet add package Testcontainers.MsSql
|
|||||||
|
|
||||||
#### 5.2. Create Unit Tests
|
#### 5.2. Create Unit Tests
|
||||||
|
|
||||||
**Location**: `tests/DigitalData.EmailProfiler.Tests/Unit/Domain/`
|
**Location**: `tests/DigitalData.MessagingService.Tests/Unit/Domain/`
|
||||||
|
|
||||||
**MessageIdGeneratorTests.cs**:
|
**MessageIdGeneratorTests.cs**:
|
||||||
```csharp
|
```csharp
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
using DigitalData.EmailProfiler.Domain.Services;
|
using DigitalData.MessagingService.Domain.Services;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Tests.Unit.Domain;
|
namespace DigitalData.MessagingService.Tests.Unit.Domain;
|
||||||
|
|
||||||
public class MessageIdGeneratorTests
|
public class MessageIdGeneratorTests
|
||||||
{
|
{
|
||||||
@@ -844,7 +844,7 @@ The README should include (in German):
|
|||||||
|
|
||||||
**Template structure**:
|
**Template structure**:
|
||||||
```markdown
|
```markdown
|
||||||
# DigitalData EmailProfiler
|
# DigitalData MessagingService
|
||||||
|
|
||||||
## Übersicht
|
## Übersicht
|
||||||
[Application overview in German]
|
[Application overview in German]
|
||||||
@@ -912,15 +912,15 @@ dotnet build
|
|||||||
dotnet test
|
dotnet test
|
||||||
|
|
||||||
# Run API
|
# Run API
|
||||||
cd src/DigitalData.EmailProfiler.API
|
cd src/DigitalData.MessagingService.API
|
||||||
dotnet run
|
dotnet run
|
||||||
|
|
||||||
# Create migration
|
# Create migration
|
||||||
cd src/DigitalData.EmailProfiler.Infrastructure
|
cd src/DigitalData.MessagingService.Infrastructure
|
||||||
dotnet ef migrations add InitialCreate --startup-project ../DigitalData.EmailProfiler.API
|
dotnet ef migrations add InitialCreate --startup-project ../DigitalData.MessagingService.API
|
||||||
|
|
||||||
# Update database
|
# Update database
|
||||||
dotnet ef database update --startup-project ../DigitalData.EmailProfiler.API
|
dotnet ef database update --startup-project ../DigitalData.MessagingService.API
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
30
STATUS.md
30
STATUS.md
@@ -1,4 +1,4 @@
|
|||||||
# EmailProfiler - Implementation Status Report
|
# MessagingService - Implementation Status Report
|
||||||
|
|
||||||
**Last Updated**: 2026-07-20
|
**Last Updated**: 2026-07-20
|
||||||
**Overall Progress**: 75% Complete (3 of 4 phases done)
|
**Overall Progress**: 75% Complete (3 of 4 phases done)
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
## Executive Summary
|
## Executive Summary
|
||||||
|
|
||||||
The EmailProfiler migration from legacy VB.NET to modern C# .NET 8.0 Clean Architecture is **75% complete**. All core layers (Domain, Application, Infrastructure) are fully implemented with real service stubs ready for integration. Only API layer controllers and workers remain.
|
The MessagingService migration from legacy VB.NET to modern C# .NET 8.0 Clean Architecture is **75% complete**. All core layers (Domain, Application, Infrastructure) are fully implemented with real service stubs ready for integration. Only API layer controllers and workers remain.
|
||||||
|
|
||||||
### ✅ What's Working
|
### ✅ What's Working
|
||||||
- Complete Domain model with 8 entities mapped to legacy database
|
- Complete Domain model with 8 entities mapped to legacy database
|
||||||
@@ -68,7 +68,7 @@ The EmailProfiler migration from legacy VB.NET to modern C# .NET 8.0 Clean Archi
|
|||||||
|
|
||||||
**Files**:
|
**Files**:
|
||||||
```
|
```
|
||||||
src/DigitalData.EmailProfiler.Domain/
|
src/DigitalData.MessagingService.Domain/
|
||||||
├── Entities/ (8 files)
|
├── Entities/ (8 files)
|
||||||
├── ValueObjects/ (3 files)
|
├── ValueObjects/ (3 files)
|
||||||
├── Enums/ (5 files)
|
├── Enums/ (5 files)
|
||||||
@@ -135,7 +135,7 @@ src/DigitalData.EmailProfiler.Domain/
|
|||||||
|
|
||||||
**Files**:
|
**Files**:
|
||||||
```
|
```
|
||||||
src/DigitalData.EmailProfiler.Application/
|
src/DigitalData.MessagingService.Application/
|
||||||
├── EmailProfiles/Commands/ (3 files)
|
├── EmailProfiles/Commands/ (3 files)
|
||||||
├── EmailProfiles/Queries/ (2 files)
|
├── EmailProfiles/Queries/ (2 files)
|
||||||
├── EmailProfiles/Validators/ (2 files)
|
├── EmailProfiles/Validators/ (2 files)
|
||||||
@@ -158,7 +158,7 @@ src/DigitalData.EmailProfiler.Application/
|
|||||||
### Phase 3: Infrastructure Layer ✅ COMPLETE (100%)
|
### Phase 3: Infrastructure Layer ✅ COMPLETE (100%)
|
||||||
|
|
||||||
**Database**:
|
**Database**:
|
||||||
- ✅ `EmailProfilerDbContext` - EF Core DbContext with 8 DbSets
|
- ✅ `MessagingServiceDbContext` - EF Core DbContext with 8 DbSets
|
||||||
- NO `OnModelCreating` override (attribute-only configuration)
|
- NO `OnModelCreating` override (attribute-only configuration)
|
||||||
- NO `SaveChangesAsync` override (Repository handles this)
|
- NO `SaveChangesAsync` override (Repository handles this)
|
||||||
- Connection string: `DefaultConnection` from appsettings
|
- Connection string: `DefaultConnection` from appsettings
|
||||||
@@ -231,8 +231,8 @@ src/DigitalData.EmailProfiler.Application/
|
|||||||
|
|
||||||
**Files**:
|
**Files**:
|
||||||
```
|
```
|
||||||
src/DigitalData.EmailProfiler.Infrastructure/
|
src/DigitalData.MessagingService.Infrastructure/
|
||||||
├── Persistence/EmailProfilerDbContext.cs
|
├── Persistence/MessagingServiceDbContext.cs
|
||||||
├── Repositories/Repository.cs
|
├── Repositories/Repository.cs
|
||||||
├── Services/ (6 files)
|
├── Services/ (6 files)
|
||||||
├── Messaging/ (3 files)
|
├── Messaging/ (3 files)
|
||||||
@@ -290,7 +290,7 @@ src/DigitalData.EmailProfiler.Infrastructure/
|
|||||||
|
|
||||||
**Files**:
|
**Files**:
|
||||||
```
|
```
|
||||||
src/DigitalData.EmailProfiler.API/
|
src/DigitalData.MessagingService.API/
|
||||||
├── Controllers/ (3 files)
|
├── Controllers/ (3 files)
|
||||||
├── appsettings.json
|
├── appsettings.json
|
||||||
├── appsettings.Secrets.json
|
├── appsettings.Secrets.json
|
||||||
@@ -311,7 +311,7 @@ src/DigitalData.EmailProfiler.API/
|
|||||||
|
|
||||||
**Test Structure**:
|
**Test Structure**:
|
||||||
```
|
```
|
||||||
tests/DigitalData.EmailProfiler.Tests/
|
tests/DigitalData.MessagingService.Tests/
|
||||||
├── Domain/
|
├── Domain/
|
||||||
│ ├── Services/MessageIdGeneratorTests.cs
|
│ ├── Services/MessageIdGeneratorTests.cs
|
||||||
│ ├── ValueObjects/EmailAddressTests.cs
|
│ ├── ValueObjects/EmailAddressTests.cs
|
||||||
@@ -362,7 +362,7 @@ tests/DigitalData.EmailProfiler.Tests/
|
|||||||
### 5. SQL Server Database ✅ AVAILABLE
|
### 5. SQL Server Database ✅ AVAILABLE
|
||||||
**Status**: Legacy database exists
|
**Status**: Legacy database exists
|
||||||
**Action**: Update connection string in `appsettings.Secrets.json`
|
**Action**: Update connection string in `appsettings.Secrets.json`
|
||||||
**Files Affected**: `EmailProfilerDbContext.cs`
|
**Files Affected**: `MessagingServiceDbContext.cs`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -380,7 +380,7 @@ tests/DigitalData.EmailProfiler.Tests/
|
|||||||
|
|
||||||
**Build Command**:
|
**Build Command**:
|
||||||
```bash
|
```bash
|
||||||
dotnet build src/DigitalData.EmailProfiler.Infrastructure/DigitalData.EmailProfiler.Infrastructure.csproj
|
dotnet build src/DigitalData.MessagingService.Infrastructure/DigitalData.MessagingService.Infrastructure.csproj
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -472,10 +472,10 @@ dotnet build src/DigitalData.EmailProfiler.Infrastructure/DigitalData.EmailProfi
|
|||||||
|
|
||||||
**What You Can Do Right Now**:
|
**What You Can Do Right Now**:
|
||||||
1. Build the solution: `dotnet build`
|
1. Build the solution: `dotnet build`
|
||||||
2. Review the Domain layer: `src/DigitalData.EmailProfiler.Domain/`
|
2. Review the Domain layer: `src/DigitalData.MessagingService.Domain/`
|
||||||
3. Review the Application layer: `src/DigitalData.EmailProfiler.Application/`
|
3. Review the Application layer: `src/DigitalData.MessagingService.Application/`
|
||||||
4. Review the Infrastructure layer: `src/DigitalData.EmailProfiler.Infrastructure/`
|
4. Review the Infrastructure layer: `src/DigitalData.MessagingService.Infrastructure/`
|
||||||
5. Review the API layer: `src/DigitalData.EmailProfiler.API/`
|
5. Review the API layer: `src/DigitalData.MessagingService.API/`
|
||||||
|
|
||||||
**What You Need to Complete**:
|
**What You Need to Complete**:
|
||||||
1. Add Limilabs.Mail NuGet package: `dotnet add package Limilabs.Mail`
|
1. Add Limilabs.Mail NuGet package: `dotnet add package Limilabs.Mail`
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure.Persistence;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Entity Framework Core DbContext for EmailProfiler.
|
|
||||||
/// IMPORTANT: This context maps to a LEGACY database - NO schema modifications allowed!
|
|
||||||
/// </summary>
|
|
||||||
public class EmailProfilerDbContext(DbContextOptions<EmailProfilerDbContext> options) : DbContext(options)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
using DigitalData.EmailProfiler.Application.EmailSending.Commands;
|
using DigitalData.MessagingService.Application.EmailSending.Commands;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.API.Controllers;
|
namespace DigitalData.MessagingService.API.Controllers;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Email sending API controller
|
/// Email sending API controller
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<UserSecretsId>dotnet-DigitalData.EmailProfiler.Service-e7ef6a9a-436f-48a1-b4f6-ec9381c8cb47</UserSecretsId>
|
<UserSecretsId>dotnet-DigitalData.MessagingService.Service-e7ef6a9a-436f-48a1-b4f6-ec9381c8cb47</UserSecretsId>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -21,9 +21,9 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\DigitalData.EmailProfiler.Application\DigitalData.EmailProfiler.Application.csproj" />
|
<ProjectReference Include="..\DigitalData.MessagingService.Application\DigitalData.MessagingService.Application.csproj" />
|
||||||
<ProjectReference Include="..\DigitalData.EmailProfiler.Domain\DigitalData.EmailProfiler.Domain.csproj" />
|
<ProjectReference Include="..\DigitalData.MessagingService.Domain\DigitalData.MessagingService.Domain.csproj" />
|
||||||
<ProjectReference Include="..\DigitalData.EmailProfiler.Infrastructure\DigitalData.EmailProfiler.Infrastructure.csproj" />
|
<ProjectReference Include="..\DigitalData.MessagingService.Infrastructure\DigitalData.MessagingService.Infrastructure.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DigitalData.EmailProfiler.Domain.Exceptions;
|
using DigitalData.MessagingService.Domain.Exceptions;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.API.Middleware;
|
namespace DigitalData.MessagingService.API.Middleware;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Global exception handling middleware
|
/// Global exception handling middleware
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using DigitalData.EmailProfiler.API.Middleware;
|
using DigitalData.MessagingService.API.Middleware;
|
||||||
using DigitalData.EmailProfiler.Application;
|
using DigitalData.MessagingService.Application;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Dtos;
|
using DigitalData.MessagingService.Application.Common.Dtos;
|
||||||
using DigitalData.EmailProfiler.Infrastructure;
|
using DigitalData.MessagingService.Infrastructure;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
|
|
||||||
// Configure Serilog early
|
// Configure Serilog early
|
||||||
@@ -16,7 +16,7 @@ Log.Logger = new LoggerConfiguration()
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Log.Information("Starting EmailProfiler API");
|
Log.Information("Starting MessagingService API");
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
@@ -71,13 +71,13 @@ try
|
|||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
|
||||||
Log.Information("EmailProfiler API started successfully");
|
Log.Information("MessagingService API started successfully");
|
||||||
|
|
||||||
app.Run();
|
app.Run();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log.Fatal(ex, "EmailProfiler API failed to start");
|
Log.Fatal(ex, "MessagingService API failed to start");
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Application.Common.Dtos;
|
namespace DigitalData.MessagingService.Application.Common.Dtos;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// DTO for EmailAccount query results.
|
/// DTO for EmailAccount query results.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Application.Common.Events;
|
namespace DigitalData.MessagingService.Application.Common.Events;
|
||||||
|
|
||||||
public class OutgoingEmailEvent
|
public class OutgoingEmailEvent
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using MediatR;
|
using MediatR;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.Common.Interfaces;
|
namespace DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interface for publishing commands to a message broker (e.g., RabbitMQ)
|
/// Interface for publishing commands to a message broker (e.g., RabbitMQ)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Application.Common.Interfaces;
|
namespace DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Email service interface for SMTP operations.
|
/// Email service interface for SMTP operations.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Application.Common.Interfaces;
|
namespace DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Encryption service interface for password encryption.
|
/// Encryption service interface for password encryption.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using DigitalData.EmailProfiler.Application.Common.Events;
|
using DigitalData.MessagingService.Application.Common.Events;
|
||||||
using DigitalData.EmailProfiler.Application.EmailSending.Commands;
|
using DigitalData.MessagingService.Application.EmailSending.Commands;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.Common.Interfaces;
|
namespace DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Email queue interface for outgoing emails.
|
/// Email queue interface for outgoing emails.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Application.Common.Interfaces;
|
namespace DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// PDF processing service interface.
|
/// PDF processing service interface.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.Common.Interfaces;
|
namespace DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generic repository interface for CRUD operations.
|
/// Generic repository interface for CRUD operations.
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Events;
|
using DigitalData.MessagingService.Application.Common.Events;
|
||||||
using DigitalData.EmailProfiler.Application.EmailSending.Commands;
|
using DigitalData.MessagingService.Application.EmailSending.Commands;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.Common.Mappings;
|
namespace DigitalData.MessagingService.Application.Common.Mappings;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// AutoMapper profile for Emails
|
/// AutoMapper profile for Emails
|
||||||
@@ -3,7 +3,7 @@ using FluentValidation;
|
|||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application;
|
namespace DigitalData.MessagingService.Application;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Dependency injection configuration for Application layer.
|
/// Dependency injection configuration for Application layer.
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\DigitalData.EmailProfiler.Domain\DigitalData.EmailProfiler.Domain.csproj" />
|
<ProjectReference Include="..\DigitalData.MessagingService.Domain\DigitalData.MessagingService.Domain.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Events;
|
using DigitalData.MessagingService.Application.Common.Events;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Interfaces;
|
using DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.EmailSending.Commands;
|
namespace DigitalData.MessagingService.Application.EmailSending.Commands;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Command to send an email (enqueue to RabbitMQ)
|
/// Command to send an email (enqueue to RabbitMQ)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using DigitalData.EmailProfiler.Application.EmailSending.Commands;
|
using DigitalData.MessagingService.Application.EmailSending.Commands;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Application.EmailSending.Validators;
|
namespace DigitalData.MessagingService.Application.EmailSending.Validators;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Validator for SendEmailCommand
|
/// Validator for SendEmailCommand
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Common;
|
namespace DigitalData.MessagingService.Domain.Common;
|
||||||
|
|
||||||
public abstract class BaseEntity
|
public abstract class BaseEntity
|
||||||
{
|
{
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Common;
|
namespace DigitalData.MessagingService.Domain.Common;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Domain-wide constants
|
/// Domain-wide constants
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Common;
|
namespace DigitalData.MessagingService.Domain.Common;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Marker interface for aggregate roots in DDD
|
/// Marker interface for aggregate roots in DDD
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Common;
|
namespace DigitalData.MessagingService.Domain.Common;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Base class for value objects that implement equality by value
|
/// Base class for value objects that implement equality by value
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Enums;
|
namespace DigitalData.MessagingService.Domain.Enums;
|
||||||
|
|
||||||
public enum AttachmentStatus
|
public enum AttachmentStatus
|
||||||
{
|
{
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Enums;
|
namespace DigitalData.MessagingService.Domain.Enums;
|
||||||
|
|
||||||
public enum AuthenticationType
|
public enum AuthenticationType
|
||||||
{
|
{
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Enums;
|
namespace DigitalData.MessagingService.Domain.Enums;
|
||||||
|
|
||||||
public enum EmailStatus
|
public enum EmailStatus
|
||||||
{
|
{
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Enums;
|
namespace DigitalData.MessagingService.Domain.Enums;
|
||||||
|
|
||||||
public enum ErrorCode
|
public enum ErrorCode
|
||||||
{
|
{
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Enums;
|
namespace DigitalData.MessagingService.Domain.Enums;
|
||||||
|
|
||||||
public enum ProcessType
|
public enum ProcessType
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using DigitalData.EmailProfiler.Domain.Enums;
|
using DigitalData.MessagingService.Domain.Enums;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Domain.Exceptions;
|
namespace DigitalData.MessagingService.Domain.Exceptions;
|
||||||
|
|
||||||
public class AttachmentProcessingException : DomainException
|
public class AttachmentProcessingException : DomainException
|
||||||
{
|
{
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Exceptions;
|
namespace DigitalData.MessagingService.Domain.Exceptions;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Exception thrown when OAuth2 authentication fails.
|
/// Exception thrown when OAuth2 authentication fails.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Exceptions;
|
namespace DigitalData.MessagingService.Domain.Exceptions;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Exception thrown when DMS (windream) is not available or not configured properly.
|
/// Exception thrown when DMS (windream) is not available or not configured properly.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using DigitalData.EmailProfiler.Domain.Enums;
|
using DigitalData.MessagingService.Domain.Enums;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Domain.Exceptions;
|
namespace DigitalData.MessagingService.Domain.Exceptions;
|
||||||
|
|
||||||
public class DomainException : Exception
|
public class DomainException : Exception
|
||||||
{
|
{
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Exceptions;
|
namespace DigitalData.MessagingService.Domain.Exceptions;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Exception thrown when a PDF file is invalid or corrupted.
|
/// Exception thrown when a PDF file is invalid or corrupted.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Domain.Exceptions;
|
namespace DigitalData.MessagingService.Domain.Exceptions;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Exception thrown when a requested entity is not found.
|
/// Exception thrown when a requested entity is not found.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using DigitalData.EmailProfiler.Domain.Enums;
|
using DigitalData.MessagingService.Domain.Enums;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Domain.Exceptions;
|
namespace DigitalData.MessagingService.Domain.Exceptions;
|
||||||
|
|
||||||
public class ValidationException : DomainException
|
public class ValidationException : DomainException
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using DigitalData.EmailProfiler.Domain.ValueObjects;
|
using DigitalData.MessagingService.Domain.ValueObjects;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Domain.Services;
|
namespace DigitalData.MessagingService.Domain.Services;
|
||||||
|
|
||||||
public interface IMessageIdGenerator
|
public interface IMessageIdGenerator
|
||||||
{
|
{
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using DigitalData.EmailProfiler.Domain.Common;
|
using DigitalData.MessagingService.Domain.Common;
|
||||||
using DigitalData.EmailProfiler.Domain.Exceptions;
|
using DigitalData.MessagingService.Domain.Exceptions;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Domain.ValueObjects;
|
namespace DigitalData.MessagingService.Domain.ValueObjects;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Value object representing an email address with validation
|
/// Value object representing an email address with validation
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using DigitalData.EmailProfiler.Domain.Common;
|
using DigitalData.MessagingService.Domain.Common;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Domain.ValueObjects;
|
namespace DigitalData.MessagingService.Domain.ValueObjects;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Value object representing a unique message identifier with hash generation
|
/// Value object representing a unique message identifier with hash generation
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
using DigitalData.EmailProfiler.Application.Common.Interfaces;
|
using DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
using DigitalData.EmailProfiler.Infrastructure.Messaging;
|
using DigitalData.MessagingService.Infrastructure.Messaging;
|
||||||
using DigitalData.EmailProfiler.Infrastructure.Queue;
|
using DigitalData.MessagingService.Infrastructure.Queue;
|
||||||
using DigitalData.EmailProfiler.Infrastructure.Services;
|
using DigitalData.MessagingService.Infrastructure.Services;
|
||||||
using DigitalData.EmailProfiler.Infrastructure.Services.Background;
|
using DigitalData.MessagingService.Infrastructure.Services.Background;
|
||||||
using Microsoft.AspNetCore.DataProtection;
|
using Microsoft.AspNetCore.DataProtection;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure;
|
namespace DigitalData.MessagingService.Infrastructure;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Dependency injection configuration for Infrastructure layer
|
/// Dependency injection configuration for Infrastructure layer
|
||||||
@@ -41,7 +41,7 @@ public static class DependencyInjection
|
|||||||
// --- Data Protection (for encryption) ---
|
// --- Data Protection (for encryption) ---
|
||||||
services.AddDataProtection()
|
services.AddDataProtection()
|
||||||
.PersistKeysToFileSystem(new DirectoryInfo(@"C:\ProgramData\EmailService\Keys"))
|
.PersistKeysToFileSystem(new DirectoryInfo(@"C:\ProgramData\EmailService\Keys"))
|
||||||
.SetApplicationName("EmailProfiler");
|
.SetApplicationName("MessagingService");
|
||||||
|
|
||||||
// Register Background Workers
|
// Register Background Workers
|
||||||
services.AddHostedService<AsyncInitWorker>();
|
services.AddHostedService<AsyncInitWorker>();
|
||||||
@@ -7,8 +7,8 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\DigitalData.EmailProfiler.Domain\DigitalData.EmailProfiler.Domain.csproj" />
|
<ProjectReference Include="..\DigitalData.MessagingService.Domain\DigitalData.MessagingService.Domain.csproj" />
|
||||||
<ProjectReference Include="..\DigitalData.EmailProfiler.Application\DigitalData.EmailProfiler.Application.csproj" />
|
<ProjectReference Include="..\DigitalData.MessagingService.Application\DigitalData.MessagingService.Application.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace DigitalData.EmailProfiler.Infrastructure.Messaging;
|
namespace DigitalData.MessagingService.Infrastructure.Messaging;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Configuration for RabbitMQ connection
|
/// Configuration for RabbitMQ connection
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace DigitalData.MessagingService.Infrastructure.Persistence;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Entity Framework Core DbContext for MessagingService.
|
||||||
|
/// IMPORTANT: This context maps to a LEGACY database - NO schema modifications allowed!
|
||||||
|
/// </summary>
|
||||||
|
public class MessagingServiceDbContext(DbContextOptions<MessagingServiceDbContext> options) : DbContext(options)
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Interfaces;
|
using DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
using DigitalData.EmailProfiler.Infrastructure.Messaging;
|
using DigitalData.MessagingService.Infrastructure.Messaging;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using RabbitMQ.Client;
|
using RabbitMQ.Client;
|
||||||
using RabbitMQ.Client.Events;
|
using RabbitMQ.Client.Events;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Events;
|
using DigitalData.MessagingService.Application.Common.Events;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure.Queue;
|
namespace DigitalData.MessagingService.Infrastructure.Queue;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// RabbitMQ-based email queue implementation for outgoing emails.
|
/// RabbitMQ-based email queue implementation for outgoing emails.
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Interfaces;
|
using DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
using DigitalData.EmailProfiler.Domain.Exceptions;
|
using DigitalData.MessagingService.Domain.Exceptions;
|
||||||
using DigitalData.EmailProfiler.Infrastructure.Persistence;
|
using DigitalData.MessagingService.Infrastructure.Persistence;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure.Repositories;
|
namespace DigitalData.MessagingService.Infrastructure.Repositories;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generic repository implementation with AutoMapper-based CRUD operations.
|
/// Generic repository implementation with AutoMapper-based CRUD operations.
|
||||||
/// IMPORTANT: Each operation auto-saves changes - NO explicit SaveChangesAsync needed!
|
/// IMPORTANT: Each operation auto-saves changes - NO explicit SaveChangesAsync needed!
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Repository<TEntity>(EmailProfilerDbContext Context, IMapper Mapper) : IRepository<TEntity> where TEntity : class
|
public class Repository<TEntity>(MessagingServiceDbContext Context, IMapper Mapper) : IRepository<TEntity> where TEntity : class
|
||||||
{
|
{
|
||||||
private readonly DbSet<TEntity> _dbSet = Context.Set<TEntity>();
|
private readonly DbSet<TEntity> _dbSet = Context.Set<TEntity>();
|
||||||
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
using DigitalData.EmailProfiler.Application.Common.Interfaces;
|
using DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
using DigitalData.EmailProfiler.Infrastructure.Queue;
|
using DigitalData.MessagingService.Infrastructure.Queue;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure.Services.Background;
|
namespace DigitalData.MessagingService.Infrastructure.Services.Background;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A hosted background service responsible for initializing the outgoing email queue consumer.
|
/// A hosted background service responsible for initializing the outgoing email queue consumer.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using DigitalData.EmailProfiler.Application.Common.Interfaces;
|
using DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
using Microsoft.AspNetCore.DataProtection;
|
using Microsoft.AspNetCore.DataProtection;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure.Services;
|
namespace DigitalData.MessagingService.Infrastructure.Services;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Encryption service using ASP.NET Core Data Protection API.
|
/// Encryption service using ASP.NET Core Data Protection API.
|
||||||
@@ -9,7 +9,7 @@ namespace DigitalData.EmailProfiler.Infrastructure.Services;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class DataProtectionEncryptionService(IDataProtectionProvider Provider) : IEncryptionService
|
public class DataProtectionEncryptionService(IDataProtectionProvider Provider) : IEncryptionService
|
||||||
{
|
{
|
||||||
private readonly IDataProtector Protector = Provider.CreateProtector("EmailProfiler.Passwords");
|
private readonly IDataProtector Protector = Provider.CreateProtector("MessagingService.Passwords");
|
||||||
|
|
||||||
public string Encrypt(string plainText)
|
public string Encrypt(string plainText)
|
||||||
{
|
{
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
using DevExpress.Pdf;
|
using DevExpress.Pdf;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Interfaces;
|
using DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
using DigitalData.EmailProfiler.Domain.Exceptions;
|
using DigitalData.MessagingService.Domain.Exceptions;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure.Services;
|
namespace DigitalData.MessagingService.Infrastructure.Services;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// PDF processing service using DevExpress.Pdf.
|
/// PDF processing service using DevExpress.Pdf.
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Dtos;
|
using DigitalData.MessagingService.Application.Common.Dtos;
|
||||||
using DigitalData.EmailProfiler.Application.Common.Interfaces;
|
using DigitalData.MessagingService.Application.Common.Interfaces;
|
||||||
using DigitalData.EmailProfiler.Domain.Exceptions;
|
using DigitalData.MessagingService.Domain.Exceptions;
|
||||||
using Limilabs.Client.SMTP;
|
using Limilabs.Client.SMTP;
|
||||||
using Limilabs.Mail;
|
using Limilabs.Mail;
|
||||||
using Limilabs.Mail.Headers;
|
using Limilabs.Mail.Headers;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
namespace DigitalData.EmailProfiler.Infrastructure.Services;
|
namespace DigitalData.MessagingService.Infrastructure.Services;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Email service using Limilabs Mail.dll for SMTP operations (send-only).
|
/// Email service using Limilabs Mail.dll for SMTP operations (send-only).
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\src\DigitalData.EmailProfiler.API\DigitalData.EmailProfiler.API.csproj" />
|
<ProjectReference Include="..\..\src\DigitalData.MessagingService.API\DigitalData.MessagingService.API.csproj" />
|
||||||
<ProjectReference Include="..\..\src\DigitalData.EmailProfiler.Application\DigitalData.EmailProfiler.Application.csproj" />
|
<ProjectReference Include="..\..\src\DigitalData.MessagingService.Application\DigitalData.MessagingService.Application.csproj" />
|
||||||
<ProjectReference Include="..\..\src\DigitalData.EmailProfiler.Domain\DigitalData.EmailProfiler.Domain.csproj" />
|
<ProjectReference Include="..\..\src\DigitalData.MessagingService.Domain\DigitalData.MessagingService.Domain.csproj" />
|
||||||
<ProjectReference Include="..\..\src\DigitalData.EmailProfiler.Infrastructure\DigitalData.EmailProfiler.Infrastructure.csproj" />
|
<ProjectReference Include="..\..\src\DigitalData.MessagingService.Infrastructure\DigitalData.MessagingService.Infrastructure.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
Reference in New Issue
Block a user