using Insight.Database; using Microsoft.ApplicationInsights; using PlanTempus.Core.Database; using PlanTempus.Core.Telemetry; namespace PlanTempus.Components.Organizations.Create { public class CreateOrganizationHandler(TelemetryClient telemetryClient, IDatabaseOperations databaseOperations) { public async Task Handle(CreateOrganizationCommand command) { using var db = databaseOperations.CreateScope(nameof(CreateOrganizationHandler)); using var transaction = db.Connection.BeginTransaction(); try { var createOrg = @" INSERT INTO organizations (connection_string) VALUES (@ConnectionString) RETURNING id, created_at"; var data = await db.Connection.QuerySqlAsync(createOrg, new { command.ConnectionString }); var orgResult = data.First(); await db.Connection.ExecuteAsync(@$" INSERT INTO user_organizations (user_id, organization_id) VALUES (@UserId, @OrganizationId)", new { command.UserId, OrganizationId = orgResult.Id }); transaction.Commit(); telemetryClient.TrackTrace(GetType().Name, orgResult.Format()); return orgResult; } catch (Exception ex) { db.Error(ex); throw; } } } }