using Dapr; using GB5Shared.DTO.Framework.Login; using Microsoft.AspNetCore.Mvc; using SkillManagementBLL.SkillGrant; namespace SkillManagementSL.Subscriptions; [ApiController] public class TmsSkillGrantSubscriber : ControllerBase { private readonly ISkillGrantBLL _skillGrantBll; private readonly ILogger _logger; public TmsSkillGrantSubscriber(ISkillGrantBLL skillGrantBll, ILogger logger) { _skillGrantBll = skillGrantBll; _logger = logger; } [Topic("pubsub", "tms.skillgrant.confirmed")] [HttpPost("/SkillManagement/Subscribe/SkillGrantConfirmed")] public async Task HandleSkillGrantConfirmedAsync( [FromBody] TmsSkillGrantConfirmedEvent evt, CancellationToken ct) { _logger.LogInformation( "tms.skillgrant.confirmed received: TxSkillUpgradeId {TxSkillUpgradeId} EmployeeId {EmployeeId} SkillId {SkillId} LevelNo {LevelNo}", evt.TxSkillUpgradeId, evt.EmployeeId, evt.SkillId, evt.LevelNo); try { var login = new LoginDTO { ClientId = evt.ClientId, DatabaseName = evt.DatabaseName, UserId = evt.UserId }; await _skillGrantBll.ApplySkillGrantAsync(evt.EmployeeId, evt.SkillId, evt.ProductFamilyId, evt.ModelId, evt.LevelNo, login, ct); return Ok(); } catch (Exception ex) { _logger.LogError(ex, "Failed to process tms.skillgrant.confirmed for TxSkillUpgradeId {TxSkillUpgradeId} EmployeeId {EmployeeId}", evt.TxSkillUpgradeId, evt.EmployeeId); return StatusCode(500, ex.Message); } } } public sealed class TmsSkillGrantConfirmedEvent { public int TxSkillUpgradeId { get; set; } public int EmployeeId { get; set; } public int SkillId { get; set; } public int ProductFamilyId { get; set; } = -1; public int ModelId { get; set; } = -1; public byte LevelNo { get; set; } public int TenantId { get; set; } public string DatabaseName { get; set; } = string.Empty; public int ClientId { get; set; } public int UserId { get; set; } }