diff --git a/colaflow-api/src/Modules/ProjectManagement/ColaFlow.Modules.ProjectManagement.Application/Commands/CreateProject/CreateProjectCommand.cs b/colaflow-api/src/Modules/ProjectManagement/ColaFlow.Modules.ProjectManagement.Application/Commands/CreateProject/CreateProjectCommand.cs index d0f5ed3..5113581 100644 --- a/colaflow-api/src/Modules/ProjectManagement/ColaFlow.Modules.ProjectManagement.Application/Commands/CreateProject/CreateProjectCommand.cs +++ b/colaflow-api/src/Modules/ProjectManagement/ColaFlow.Modules.ProjectManagement.Application/Commands/CreateProject/CreateProjectCommand.cs @@ -8,7 +8,6 @@ namespace ColaFlow.Modules.ProjectManagement.Application.Commands.CreateProject; /// public sealed record CreateProjectCommand : IRequest { - public Guid TenantId { get; init; } public string Name { get; init; } = string.Empty; public string Description { get; init; } = string.Empty; public string Key { get; init; } = string.Empty; diff --git a/colaflow-api/src/Modules/ProjectManagement/ColaFlow.Modules.ProjectManagement.Application/Commands/CreateProject/CreateProjectCommandHandler.cs b/colaflow-api/src/Modules/ProjectManagement/ColaFlow.Modules.ProjectManagement.Application/Commands/CreateProject/CreateProjectCommandHandler.cs index 9766bd5..1b6f5be 100644 --- a/colaflow-api/src/Modules/ProjectManagement/ColaFlow.Modules.ProjectManagement.Application/Commands/CreateProject/CreateProjectCommandHandler.cs +++ b/colaflow-api/src/Modules/ProjectManagement/ColaFlow.Modules.ProjectManagement.Application/Commands/CreateProject/CreateProjectCommandHandler.cs @@ -1,5 +1,6 @@ using MediatR; using ColaFlow.Modules.ProjectManagement.Application.DTOs; +using ColaFlow.Modules.ProjectManagement.Application.Common.Interfaces; using ColaFlow.Modules.ProjectManagement.Domain.Aggregates.ProjectAggregate; using ColaFlow.Modules.ProjectManagement.Domain.Repositories; using ColaFlow.Modules.ProjectManagement.Domain.ValueObjects; @@ -12,14 +13,19 @@ namespace ColaFlow.Modules.ProjectManagement.Application.Commands.CreateProject; /// public sealed class CreateProjectCommandHandler( IProjectRepository projectRepository, - IUnitOfWork unitOfWork) + IUnitOfWork unitOfWork, + ITenantContext tenantContext) : IRequestHandler { private readonly IProjectRepository _projectRepository = projectRepository ?? throw new ArgumentNullException(nameof(projectRepository)); private readonly IUnitOfWork _unitOfWork = unitOfWork ?? throw new ArgumentNullException(nameof(unitOfWork)); + private readonly ITenantContext _tenantContext = tenantContext ?? throw new ArgumentNullException(nameof(tenantContext)); public async Task Handle(CreateProjectCommand request, CancellationToken cancellationToken) { + // Get authenticated tenant ID from JWT token + var tenantId = _tenantContext.GetCurrentTenantId(); + // Check if project key already exists var existingProject = await _projectRepository.GetByKeyAsync(request.Key, cancellationToken); if (existingProject != null) @@ -27,9 +33,9 @@ public sealed class CreateProjectCommandHandler( throw new DomainException($"Project with key '{request.Key}' already exists"); } - // Create project aggregate + // Create project aggregate with authenticated tenant ID var project = Project.Create( - TenantId.From(request.TenantId), + TenantId.From(tenantId), request.Name, request.Description, request.Key,