Skip to content

yasinpkd/PCMS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PCMS Outlook Add-In – Backend (Clean Architecture, .NET 8)

This repository contains the backend API implementation for the PCMS Outlook Add-In, built using .NET 8 with Clean Architecture principles. The API acts as a Backend-for-Frontend (BFF) and communicates with downstream PCMS Core APIs.

This service does not own a database. Instead, it focuses on:

  • Authentication & Authorization (Advanced Identity / Keycloak JWT)
  • Calling PCMS Core APIs and Microsoft Graph API
  • Data mapping & transformation
  • Caching (Redis cache-aside pattern)
  • Document processing via Azure Service Bus
  • Logging (Serilog + Application Insights)
  • Resilience (Polly)
  • Global exception handling
  • DTO validation (FluentValidation)
  • API Versioning

Clean Architecture Overview

This project follows standard 4-layer Clean Architecture:

Presentation (API)
      ↓
Application (Services & Interfaces)
      ↓
Domain (Models, DTOs, Exceptions, Constants)
      ↓
Infrastructure (External Services, Caching, Auth, Repositories)

Key Rules:

  • Domain has zero dependencies.
  • Application depends only on Domain.
  • Infrastructure implements Application interfaces.
  • API references Application + Infrastructure.

Solution Structure

PCMS.OutlookAddIn.sln
│
├── src/
│   ├── PCMS.OutlookAddIn.Api          → Presentation Layer (Controllers, Middleware, DI, Auth config)
│   ├── PCMS.OutlookAddin.Application  → Application Layer (Services, Interfaces, Mappers, Validators)
│   ├── PCMS.OutlookAddin.Domain       → Domain Layer (Models, DTOs, Exceptions, Constants)
│   ├── PCMS.OutlookAddin.Infrastructure → Infrastructure Layer (HTTP clients, Redis, SQL repos, Graph API, auth)
│   └── PCMS.OutlookAddin.Functions    → Azure Functions (Service Bus document processing)
│
└── tests/
    ├── PCMS.OutlookAddIn.Api.Tests
    ├── PCMS.OutlookAddIn.Application.Tests
    ├── PCMS.OutlookAddin.Domain.Tests
    ├── PCMS.OutlookAddIn.Infrastructure.Tests
    └── PCMS.OutlookAddin.Functions.Tests

Layer Responsibilities

Layer Responsibility
API Controllers, middleware pipeline, DI registration, API versioning, Swagger
Application Business logic services, interface contracts, mappers, FluentValidation validators
Domain Models, DTOs, domain exceptions, constants — no external dependencies
Infrastructure PCMS Core API clients, Redis caching, SQL repositories (Dapper), Microsoft Graph API, Advanced Identity token validation, Service Bus publisher
Functions Azure Function triggered by Service Bus — fetches email via Graph, posts to PCMS

Technology Stack

Core Framework

  • .NET 8.0
  • ASP.NET Core Web API
  • C#

Azure Services

  • Azure Functions (Isolated Worker) — Service Bus triggered document processing
  • Azure Service Bus — Message queuing for async email saving
  • Azure Key Vault — Secrets management (connection strings, client secrets)
  • Application Insights — Monitoring and telemetry
  • Azure Redis Cache — Cache-aside pattern for external API responses

Libraries & Patterns

  • API Versioning (Asp.Versioning)
  • FluentValidation — Request validation
  • Serilog — Structured logging
  • Polly — HTTP client resilience (timeouts)
  • Dapper — Lightweight SQL data access
  • MSAL (Microsoft.Identity.Client) — Graph API token acquisition
  • StackExchange.Redis — Redis distributed cache

Testing

  • xUnit — Unit testing framework
  • Moq — Mocking framework
  • FluentAssertions — Assertion library

Running Locally

Restore dependencies

dotnet restore

Build the solution

dotnet build

Run the API project

dotnet run --project src/PCMS.OutlookAddIn.Api

Run unit tests

dotnet test

Swagger UI is available at https://localhost:{port}/swagger when running in Development or QA environments.


Test Coverage

Project Tests
Domain.Tests 159
Application.Tests 249
Api.Tests 407
Infrastructure.Tests 486
Functions.Tests 44
Total 1,345

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors