namespace FrameworkDAL.Query.EIPConversation.EIPInteractionSession { public static class EIPInteractionSessionQB { // Any interaction session still "in progress" for this actor+tenant+channel — // mirrors TEIUSERSESSION's own (USERIDENTIFIER, TENANTID, CHANNELTYPE) lookup key // so a whole multi-turn conversation shares one TEIPINTERACTIONSESSION row. public const string GET_OPEN_BY_ACTOR = @" SELECT TOP 1 INTERACTIONSESSIONID AS InteractionSessionId, TENANTID AS TenantId, SESSIONTOKEN AS SessionToken, FLOWDEFINITIONID AS FlowDefinitionId, CURRENTSTEP AS CurrentStep, CHANNELTYPE AS ChannelType, ACTORID AS ActorId, SESSIONSTATUS AS SessionStatus, STARTEDON AS StartedOn, COMPLETEDON AS CompletedOn FROM TEIPINTERACTIONSESSION WHERE ACTORID = @ActorId AND TENANTID = @TenantId AND CHANNELTYPE = @ChannelType AND SESSIONSTATUS IN (1,2,3,4) ORDER BY INTERACTIONSESSIONID DESC;"; // FLOWDEFINITIONID resolved inline — tenant-specific flow row wins over -1=global, // same override convention used by MEIPCAPABILITY's risk-config lookup. public const string INSERT = @" INSERT INTO TEIPINTERACTIONSESSION (INTERACTIONSESSIONID, TENANTID, SESSIONTOKEN, FLOWDEFINITIONID, CURRENTSTEP, CHANNELTYPE, ACTORID, SESSIONSTATUS, STARTEDON, VERSION, STATUS, SORTORDER, SOURCETYPE, CREATEDBYID, CREATEDON, MODIFIEDBYID, MODIFIEDON) SELECT @InteractionSessionId, @TenantId, @SessionToken, (SELECT TOP 1 FLOWDEFINITIONID FROM MEIPFLOWDEFINITION WHERE FLOWCODE = @FlowCode AND (TENANTID = @TenantId OR TENANTID = -1) ORDER BY CASE WHEN TENANTID = @TenantId THEN 0 ELSE 1 END), @CurrentStep, @ChannelType, @ActorId, 1, GETDATE(), 0, 1, 9999, 5, @CreatedById, GETDATE(), @ModifiedById, GETDATE();"; public const string UPDATE_STATUS = @" UPDATE TEIPINTERACTIONSESSION SET SESSIONSTATUS = @SessionStatus, CURRENTSTEP = @CurrentStep, COMPLETEDON = @CompletedOn, MODIFIEDBYID = @ModifiedById, MODIFIEDON = GETDATE() WHERE INTERACTIONSESSIONID = @InteractionSessionId;"; } }