Solution Explorer
📁 th3chris.API
📄 Program.cs
📄 UsersController.cs
📄 Startup.cs
📁 Controllers
📄 AuthController.cs
📄 ProjectsController.cs
📄 OrdersController.cs
📁 Models
📄 User.cs
📄 Project.cs
📄 Order.cs
📄 BaseEntity.cs
📁 Services
📄 UserService.cs
📄 IUserService.cs
📄 AuthService.cs
📄 EmailService.cs
📁 Data
📄 AppDbContext.cs
📄 DbInitializer.cs
📁 DTOs
📄 UserDto.cs
📄 CreateUserRequest.cs
📄 UpdateUserRequest.cs
📁 Middleware
📄 ErrorHandlingMiddleware.cs
📄 LoggingMiddleware.cs
📁 Extensions
📄 ServiceExtensions.cs
📄 ControllerExtensions.cs
UsersController.cs
// File: UsersController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;
using th3chris.API.Models;
using th3chris.API.Services;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using System.Security.Claims;
using AutoMapper;
using FluentValidation;
namespace th3chris.API.Controllers
{
[ApiController]
[Route("api/[controller]")]
[Authorize]
public class UsersController : ControllerBase
{
private readonly IUserService _userService;
private readonly ILogger<UsersController> _logger;
private readonly IMapper _mapper;
private readonly IValidator<CreateUserRequest> _createValidator;
private readonly IValidator<UpdateUserRequest> _updateValidator;
public UsersController(
IUserService userService,
ILogger<UsersController> logger,
IMapper mapper,
IValidator<CreateUserRequest> createValidator,
IValidator<UpdateUserRequest> updateValidator)
{
_userService = userService ?? throw new ArgumentNullException(nameof(userService));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
_createValidator = createValidator;
_updateValidator = updateValidator;
}
/// <summary>
/// Retrieves all users with pagination support
/// </summary>
/// <param name="pageNumber">Page number (default: 1)</param>
/// <param name="pageSize">Page size (default: 10, max: 100)</param>
/// <returns>Paginated list of users</returns>
[HttpGet]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
public async Task<ActionResult<PagedResult<UserDto>>> GetUsers(
[FromQuery] int pageNumber = 1,
[FromQuery] int pageSize = 10,
[FromQuery] string? search = null,
[FromQuery] string? sortBy = null,
[FromQuery] bool sortDescending = false)
{
try
{
if (pageNumber < 1)
return BadRequest("Page number must be greater than 0");
if (pageSize < 1 || pageSize > 100)
return BadRequest("Page size must be between 1 and 100");
_logger.LogInformation("Getting users - Page: {PageNumber}, Size: {PageSize}, Search: {Search}",
pageNumber, pageSize, search);
var currentUserId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
var filter = new UserFilter
{
PageNumber = pageNumber,
PageSize = pageSize,
Search = search,
SortBy = sortBy,
SortDescending = sortDescending,
RequestingUserId = currentUserId
};
var users = await _userService.GetUsersAsync(filter);
var userDtos = _mapper.Map<IEnumerable<UserDto>>(users.Items);
var result = new PagedResult<UserDto>
{
Items = userDtos,
TotalCount = users.TotalCount,
PageNumber = pageNumber,
PageSize = pageSize,
TotalPages = (int)Math.Ceiling((double)users.TotalCount / pageSize)
};
return Ok(result);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error occurred while getting users");
return StatusCode(StatusCodes.Status500InternalServerError,
"An error occurred while processing your request");
}
}
/// <summary>
/// Retrieves a specific user by ID
/// </summary>
/// <param name="id">User ID</param>
/// <returns>User details</returns>
[HttpGet("{id:int}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
public async Task<ActionResult<UserDetailDto>> GetUser(int id)
{
try
{
if (id <= 0)
return BadRequest("Invalid user ID");
var currentUserId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
_logger.LogInformation("Getting user {UserId} requested by {CurrentUserId}", id, currentUserId);
var user = await _userService.GetUserByIdAsync(id, currentUserId);
if (user == null)
{
_logger.LogWarning("User {UserId} not found or access denied for {CurrentUserId}", id, currentUserId);
return NotFound($"User with ID {id} not found");
}
var userDto = _mapper.Map<UserDetailDto>(user);
return Ok(userDto);
}
catch (UnauthorizedAccessException ex)
{
_logger.LogWarning(ex, "Unauthorized access attempt for user {UserId}", id);
return Forbid();
}
catch (Exception ex)
{
_logger.LogError(ex, "Error occurred while getting user {UserId}", id);
return StatusCode(StatusCodes.Status500InternalServerError,
"An error occurred while processing your request");
}
}
/// <summary>
/// Creates a new user
/// </summary>
/// <param name="request">User creation request</param>
/// <returns>Created user</returns>
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status409Conflict)]
public async Task<ActionResult<UserDto>> CreateUser([FromBody] CreateUserRequest request)
{
try
{
if (request == null)
return BadRequest("Request body is required");
var validationResult = await _createValidator.ValidateAsync(request);
if (!validationResult.IsValid)
{
var errors = validationResult.Errors.Select(e => e.ErrorMessage);
return BadRequest(new { Errors = errors });
}
var currentUserId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
_logger.LogInformation("Creating new user {Email} by {CurrentUserId}", request.Email, currentUserId);
var user = _mapper.Map<User>(request);
user.CreatedBy = currentUserId;
user.CreatedAt = DateTime.UtcNow;
var createdUser = await _userService.CreateUserAsync(user);
var userDto = _mapper.Map<UserDto>(createdUser);
return CreatedAtAction(nameof(GetUser), new { id = createdUser.Id }, userDto);
}
catch (DuplicateUserException ex)
{
_logger.LogWarning(ex, "Attempt to create duplicate user {Email}", request?.Email);
return Conflict(new { Message = "User with this email already exists" });
}
catch (Exception ex)
{
_logger.LogError(ex, "Error occurred while creating user");
return StatusCode(StatusCodes.Status500InternalServerError,
"An error occurred while processing your request");
}
}
/// <summary>
/// Updates an existing user
/// </summary>
/// <param name="id">User ID</param>
/// <param name="request">User update request</param>
/// <returns>Updated user</returns>
[HttpPut("{id:int}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
public async Task<ActionResult<UserDto>> UpdateUser(int id, [FromBody] UpdateUserRequest request)
{
try
{
if (id <= 0)
return BadRequest("Invalid user ID");
if (request == null)
return BadRequest("Request body is required");
var validationResult = await _updateValidator.ValidateAsync(request);
if (!validationResult.IsValid)
{
var errors = validationResult.Errors.Select(e => e.ErrorMessage);
return BadRequest(new { Errors = errors });
}
var currentUserId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
_logger.LogInformation("Updating user {UserId} by {CurrentUserId}", id, currentUserId);
var existingUser = await _userService.GetUserByIdAsync(id, currentUserId);
if (existingUser == null)
{
_logger.LogWarning("User {UserId} not found for update by {CurrentUserId}", id, currentUserId);
return NotFound($"User with ID {id} not found");
}
_mapper.Map(request, existingUser);
existingUser.UpdatedBy = currentUserId;
existingUser.UpdatedAt = DateTime.UtcNow;
var updatedUser = await _userService.UpdateUserAsync(existingUser);
var userDto = _mapper.Map<UserDto>(updatedUser);
return Ok(userDto);
}
catch (UnauthorizedAccessException ex)
{
_logger.LogWarning(ex, "Unauthorized update attempt for user {UserId}", id);
return Forbid();
}
catch (Exception ex)
{
_logger.LogError(ex, "Error occurred while updating user {UserId}", id);
return StatusCode(StatusCodes.Status500InternalServerError,
"An error occurred while processing your request");
}
}
/// <summary>
/// Deletes a user by ID
/// </summary>
/// <param name="id">User ID</param>
/// <returns>No content on success</returns>
[HttpDelete("{id:int}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
public async Task<IActionResult> DeleteUser(int id)
{
try
{
if (id <= 0)
return BadRequest("Invalid user ID");
var currentUserId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
_logger.LogInformation("Deleting user {UserId} by {CurrentUserId}", id, currentUserId);
var success = await _userService.DeleteUserAsync(id, currentUserId);
if (!success)
{
_logger.LogWarning("User {UserId} not found for deletion by {CurrentUserId}", id, currentUserId);
return NotFound($"User with ID {id} not found");
}
_logger.LogInformation("User {UserId} successfully deleted by {CurrentUserId}", id, currentUserId);
return NoContent();
}
catch (UnauthorizedAccessException ex)
{
_logger.LogWarning(ex, "Unauthorized deletion attempt for user {UserId}", id);
return Forbid();
}
catch (Exception ex)
{
_logger.LogError(ex, "Error occurred while deleting user {UserId}", id);
return StatusCode(StatusCodes.Status500InternalServerError,
"An error occurred while processing your request");
}
}
}
}
// File: UserService.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using th3chris.API.Models;
using th3chris.API.Data;
using th3chris.API.Exceptions;
namespace th3chris.API.Services
{
public class UserService : IUserService
{
private readonly AppDbContext _context;
private readonly ILogger<UserService> _logger;
public UserService(AppDbContext context, ILogger<UserService> logger)
{
_context = context ?? throw new ArgumentNullException(nameof(context));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public async Task<PagedResult<User>> GetUsersAsync(UserFilter filter)
{
var query = _context.Users.AsQueryable();
if (!string.IsNullOrWhiteSpace(filter.Search))
{
var searchTerm = filter.Search.ToLower();
query = query.Where(u => u.Email.ToLower().Contains(searchTerm) ||
u.FirstName.ToLower().Contains(searchTerm) ||
u.LastName.ToLower().Contains(searchTerm));
}
var totalCount = await query.CountAsync();
if (!string.IsNullOrWhiteSpace(filter.SortBy))
{
query = ApplySorting(query, filter.SortBy, filter.SortDescending);
}
else
{
query = query.OrderBy(u => u.LastName).ThenBy(u => u.FirstName);
}
var users = await query
.Skip((filter.PageNumber - 1) * filter.PageSize)
.Take(filter.PageSize)
.ToListAsync();
return new PagedResult<User>
{
Items = users,
TotalCount = totalCount
};
}
}
}
Test Explorer
GetUsers_ReturnsOk
GetUsers_WithPagination
GetUsers_WithSearch
GetUser_ValidId_ReturnsUser
GetUser_InvalidId_NotFound
CreateUser_ValidData
CreateUser_DuplicateEmail
CreateUser_InvalidData
UpdateUser_ValidData
UpdateUser_NotFound
UpdateUser_Unauthorized
DeleteUser_Success
DeleteUser_NotFound
DeleteUser_Unauthorized
Auth_Login_ValidCredentials
Auth_Login_InvalidPassword
Auth_Register_NewUser
Email_SendWelcome_Success
Validation_User_RequiredFields
Validation_Email_Format

Christian Daniel

Software Architect & Fullstack Developer, Distributed Systems Engineer

📧 chris@th3chris.com📱 +49 170 55 65 65 7📍 Im Eichflur 1, 54518 Osann-Monzel, Deutschland🔗 linkedin.com/in/christiandanielsw

Profil

Software Architect und Fullstack-Developer mit über 20 Jahren Erfahrung in verteilten Systemen, KI-Integration und Cloud-Native Architekturen. Spezialisiert auf .NET-Ökosystem, Microservices und moderne AI/ML-Pipelines. Expertise in der Entwicklung skalierbarer Enterprise-Lösungen mit Orleans, GraphQL und ASP.NET Core. Nachweisliche Erfolge bei der Integration von KI-Funktionen in Produktionssysteme und der Orchestrierung komplexer verteilter Anwendungen in Azure/Kubernetes-Umgebungen.

Berufserfahrung

Fullstack Developer

Juli 2022 - Dezember 2025

Hoffmann Group / Hoffmann Engineering Services GmbH

Erneute Beauftragung aufgrund erfolgreicher Projektarbeit - Entwicklung von Data-Hub Services für Enterprise-Datenintegration aus heterogenen Systemen (SAP, Informatica PIM, MS-CRM)
Architektierung und Implementierung skalierbarer Cloud-Native Microservices mit ASP.NET Core in Azure/Kubernetes für kritische Geschäftsprozesse
Entwicklung eines innovativen Container-basierten Testframeworks mit Dockerized-Integration-Tests für verbesserte Entwicklungszyklen
Implementierung von KI-Funktionen und Machine Learning Komponenten zur intelligenten Datenverarbeitung
Design und Umsetzung von GraphQL Federation Architekturen mit GraphQL.NET für serviceübergreifende API-Orchestrierung
Etablierung von Central Package Management und Code Quality Standards mit SonarQube
Aufbau robuster Build & Release Pipelines mit Azure DevOps sowie Performance-Testing mit k6
Technische Führung durch Code-Reviews und Mentoring von Entwicklerkollegen
.NET 9.0C#ASP.NET CoreGraphQL.NETGraphQL FederationPostgreSQLElasticsearchRedisRabbitMQSAP IntegrationInformatica PIMMS-CRMAzureKubernetesDockerTestcontainersk6SonarQubeAzure DevOps

Senior Software Architect - Distributed Systems

Dezember 2023 - Juni 2024

Advastore Group (via SOLCOM GmbH)

Performance-Optimierung der Roboterschwarm-Steuerung in einem hochkomplexen Warehouse Automation System als Teil eines 7-8 köpfigen Senior-Entwicklerteams
Optimierung der Ein- und Auslagerungsprozesse in bestehender Akka.NET-basierter Aktor-Architektur
Weiterentwicklung und Verbesserung der Pfadplanungs-Algorithmen für effiziente Koordination autonomer Roboter-Flotten
Optimierung der Job-Zuweisung an Roboter basierend auf Position, Auslastung und Priorisierung zur Maximierung des Durchsatzes
Performance-Tuning der verteilten Aktor-Architektur für höheren Warehouse-Durchsatz und Echtzeit-Verarbeitung
Integration von MQTT-basierter Echtzeit-Kommunikation für latenz-kritische Roboter-Koordination
.NET 7.0C#Akka.NETActor ModelMQTTgRPCPythonTypeScriptMongoDBPostgreSQLElasticsearchDockerKubernetesAzure AKSAngularVue.js

Fullstack Developer

März 2022 - Juli 2022

Quickmail Systems GmbH / Quickmail AG

Vollständig eigenverantwortliche Entwicklung eines Customer-Self-Service Portals für komplexe Postwurfsendungen mit hohem Transaktionsvolumen
Moderne Frontend-Architektur mit Vue.js und TypeScript für intuitive, responsive Benutzerführung
Robuste Backend-Services mit ASP.NET Core WebAPI für sichere und performante Datenverarbeitung
Anwendung modernster UI/UX Design Patterns und Clean Architecture Prinzipien
.NET 6.0C#ASP.NET CoreVue.jsTypeScriptMS SQL ServerAzure

Fullstack Developer

September 2020 - März 2022

Hoffmann Group / Hoffmann Engineering Services GmbH

Initiale Projektentwicklung hochperformanter Data Hub Services für komplexe Enterprise-Datenintegration (SAP, Informatica PIM, MS-CRM)
Strategische Analyse und nahtlose Integration heterogener Microservice-Landschaften mit bestehenden Legacy-Systemen
Architektierung und Implementierung skalierbarer GraphQL API Gateways mit GraphQL.NET für kritische Business-Domänen
Umfassende Performance-Optimierung mit Elastic Stack für elastische und effiziente Datenabrufe
Etablierung professioneller Build-Automation und CI/CD-Pipelines mit Azure DevOps und Cake Build System
Mentoring und Onboarding neuer Team-Mitglieder in Microservices-Architektur
.NETC#ASP.NET CoreGraphQL.NETPostgreSQLElasticsearchSAP IntegrationInformatica PIMAzureKubernetesAzure DevOpsCake Build

Lead App-Developer

Januar 2019 - September 2020

Quickmail Systems GmbH / Quickmail AG

Vollständige Digitalisierung kritischer Logistikprozesse durch innovative Mobile-First Lösungen für Paketzusteller und Depotmitarbeiter
Architektierung und Entwicklung hochperformanter Cross-Platform Apps mit Xamarin.Forms für operative Exzellenz
Nahtlose Integration von Logistik-Hardware (Zebra Scanner, RFID) für optimierte Workflow-Automation
Anwendung modernster Clean Architecture Patterns und SOLID-Prinzipien für wartbare und skalierbare App-Entwicklung
.NET CoreC#Xamarin.FormsMVVMMS SQL ServerAzureZebra ScannerRFID

Fullstack Developer - Crossplatform Apps

Januar 2016 - März 2019

Itelligence AG / ITML GmbH

Konzeption und Entwicklung hochkomplexer Enterprise Sales- und Service Apps für Fortune-500 Kunden
Architektierung eines innovativen, vollständig konfigurierbaren Cross-Platform App-Frameworks mit .NET Core & Xamarin
Integration skalierbarer Multi-Tier Backend-Systeme mit modernen GraphQL APIs und NoSQL-Datenbanken
Professionelle Cross-Platform Entwicklung für iOS, Android und Universal Windows Platform mit einheitlicher Codebasis
.NET CoreC#Xamarin.FormsXamarin.iOSXamarin.AndroidGraphQLMVVMUWPMongoDBPrism

App-Entwickler

April 2014 - Juli 2014

McDonalds App - Razorfish Frankfurt

Entwicklung eines virtuellen Fußballspiels für die offizielle McDonalds App
Umsetzung anlässlich der FIFA Fußball Weltmeisterschaft 2014 in Brasilien
Entwicklung für Windows Phone und iOS mit nativen Technologien
C#.NET FrameworkObjective-CWindows Phone 8iOS 7/8XcodeVisual Studio

Softwareentwickler, Softwarearchitekt

Februar 2013 - März 2014

Schneider Electric (Marktheidenfeld)

Entwicklung der Central Integration/Central Plattform
Reverse Engineering proprietärer Systeme und Entwicklungstools ohne verfügbaren Quellcode zur nahtlosen Integration
Entwicklung Python-basierter Tools und Integrations-Scripts für Multi-Tool-Orchestrierung
Implementierung komplexer WPF-basierter Benutzeroberflächen mit COM-Interop für Low-Level-System-Integration
Konzeption XML-basierter Konfigurationssysteme für zentrale Verwaltung verteilter Automatisierungsprojekte
Integration von Build-Automation mit TeamCity und Jenkins für automatisierte Multi-Tool-Workflows
C#.NET Framework 4.5WPFPython 2.7COM-InteropSCADA IntegrationTeamCityJenkinsVisual Studio 2012/2013XMLReverse Engineering

Softwareentwickler, Softwarearchitekt

Oktober 2010 - Januar 2013

Sartorius Melsungen/Göttingen

Konzeption und Entwicklung eines Near-Time, Workflow-basierten Data-Streaming Services für Biotech-Prozesssteuerung
Entwicklung aufwendiger WPF-basierter Visualisierungstools für Biotech Fermentationsprozesse mit Echtzeit-Datenanbindung
Implementierung mit WCF Data Services und Workflow Foundation für robuste Service-Kommunikation
Integration von COM-basierten Legacy-Systemen mit modernen .NET-Architekturen
C#.NET Framework 4.0WCF Data ServicesWPFWorkflow FoundationCOM-InteropMS SQL ServerTFSVisual Studio 2010/2012Resharper

Founder, Chief Technology Officer

Oktober 2012 - Dezember 2016

10Geeks Software Engineering GbR

Gründung und technische Leitung eines innovativen Software-Engineering Unternehmens für individuelle Lösungsentwicklung
Vollständige Projektverantwortung von mobilen Apps über Client/Server-Lösungen bis hin zu Cloud-Architekturen
Entwicklung einer IoT KNX.NET Bibliothek - Open Source Software-Treiber für KNX Automationsbus
Architektierung einer Smart-Home Lösung (IoT Switch App) als Microsoft-Ökosystem Alternative zu Apple HomeKit
Diverse Enterprise-Projekte: BMW Qualitätsmanagement (IBS/Siemens), Fahrzeugkonfigurator (Werner Fahrzeugbau)
Entwicklung von Game-Apps (Flappy-Geek) und Cloud-basierter Event Software
C#.NET Core.NET Framework 4.5Xamarin.FormsXamarin.iOSXamarin.AndroidUWPWPFMVVMKNX ProtocolAzureAzure IoT HubAzure DevOpsWindows Phone 8/8.1Visual StudioGit

Softwarearchitekt .NET

August 2007 - August 2010

Felten Group (Wecker)

Entwicklung einer proprietären Skriptsprache mit zugehöriger IDE für kundenspezifische MES-Systeme
Implementierung FDA-validierbarer Lösungen nach 21 CFR Part 11 für pharmazeutische Produktionsumgebungen
Konzeption und Realisierung von Wiegesystemen und Leitsystemen für kritische Produktionsprozesse
Einführung moderner ALM-Tools (Team Foundation Server) zur Verbesserung der Entwicklungsprozesse
C#C++.NET FrameworkWPFWindows FormsCustom DSLIDE DevelopmentMS SQL ServerMES SystemsFDA 21 CFR Part 11TFSALMVisual Studio 2008/2010XML Configuration

Softwareentwickler

Januar 2004 - August 2007

ticket.International (Daun)

Konzeption und Entwicklung einer umfassenden Kassenlösung für die Freizeitbranche (Kinos, Theater, Freizeitparks)
Mitglied im Lead-Team für POS & ATM-Systeme sowie Entwicklung der skalierbaren Backend-Infrastruktur
Internationale Vor-Ort Kundenbetreuung und technische Implementierung in verschiedenen Ländern
Umfangreiche Hardware-Integration: Barcode-Scanner, RFID-Lesegeräte, EC-Karten-Terminals, Druckeransteuerung
Borland DelphiBorland C++Delphi VCLFirebird/InterBaseMS SQL ServerPOS SystemsATM SystemsBarcode ScannerRFID ReaderEC-Card TerminalsPrinter IntegrationCrystal Reports

Programming Analyst

Januar 2001 - Oktober 2003

Fimat International Banque S.A. (Frankfurt)

Strategische Portierung von Legacy Access- und Excel-Lösungen in moderne Intranet-Anwendungen
Entwicklung eines kritischen Risk-Management Tools (Miracle) für Echtzeit-Wertpapierhandel-Analysen
Implementierung regulatorischer Schnittstellen zur BaFin für Compliance und Reporting
Aufbau eines robusten Application-Frameworks für Finanzmarkt-Anwendungen
Visual C++Visual BasicJavaScriptPythonASP.NETCOM+/DCOMATL/MFCMS SQL ServerMS Access MigrationExcel AutomationBaFin ComplianceFinancial Trading SystemsRisk ManagementSecurities Analysis

Technische Expertise

Backend & Microservices

.NET (1.1-9.0), C#, ASP.NET Core, Web APIs, gRPC, SignalR, Entity Framework Core, LINQ, WCF, Workflow Foundation

Verteilte Systeme & Actor Model

Microsoft Orleans, Akka.NET, Distributed Computing, Event-Driven Architecture, Message-Passing, State Management, Supervision Hierarchies

KI & Machine Learning

Semantic Kernel, RAG-Pipelines, OpenAI API, Anthropic Claude, Embedding-Modelle, Pgvector, Model Context Protocol (MCP), LangChain

API-Design & GraphQL

GraphQL.NET, GraphQL Federation, Hot Chocolate (evaluiert), REST APIs, Swagger/OpenAPI, API Gateways, Schema Design, DataLoader

Datenbanken (SQL & NoSQL)

PostgreSQL, MS SQL Server, MongoDB, Elasticsearch, Redis, Cassandra, SQLite, Oracle, Couchbase, Pgvector Extension

Message Queues & Streaming

RabbitMQ, Azure Service Bus, MQTT, Event Hubs, Publish/Subscribe Patterns, Message-Driven Workflows

Cloud & Infrastructure

Azure (AKS, App Services, Functions), Kubernetes, Docker, Terraform, Ansible, Infrastructure as Code, Service Mesh, Network Policies

DevOps & CI/CD

Azure DevOps Pipelines, GitHub Actions, GitLab CI/CD, Cake Build, Flux v2 (GitOps), Helm, Container Registries, Incremental Builds

Frontend & Web

TypeScript, JavaScript, React, Next.js, Vue.js, Angular, Tailwind CSS, Node.js, Three.js, PixiJS, Xamarin.Forms

Software-Architektur

Domain-Driven Design (DDD), CQRS, Event-Sourcing, Clean Architecture, Hexagonal Architecture, Microservices, Modular Monoliths

Testing & Qualitätssicherung

xUnit, NUnit, Testcontainers, Integration Testing, k6 Performance Testing, SonarQube, Code Coverage, Dockerized Tests, Contract Testing

Entwicklungstools

JetBrains Rider, Visual Studio, VS Code, Cursor, Git, Postman, Bruno, Insomnia, MongoDB Compass, Wireshark

Agile & Projektmanagement

SCRUM, Kanban, Azure DevOps, Jira, Confluence, YouTrack, TeamCity, Retrospektiven, Sprint Planning

Security & Compliance

OIDC/OAuth2, FDA 21 CFR Part 11, BaFin Compliance, API Security, Nullability Enforcement, Code Analysis, Security Best Practices

Zertifizierungen

Microsoft .NET SpezialistAzure Cloud ServicesXamarin Cross-Platform DevelopmentAgile / SCRUM Methodiken

Sprachen

Deutsch: Muttersprache
Englisch: Gute Kenntnisse