using Dapper; using JdeScoping.Core.Models; using JdeScoping.Core.Models.Inventory; using JdeScoping.Core.Models.Organization; using JdeScoping.Core.Models.WorkOrders; using JdeScoping.Core.ViewModels; using JdeScoping.DataAccess.Queries; namespace JdeScoping.DataAccess.Repositories; /// /// Reference data lookup operations for LotFinder repository. /// public partial class LotFinderRepository { /// public async Task> SearchItemsAsync(string filter, CancellationToken ct = default) { const string operation = nameof(SearchItemsAsync); try { await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(ct); var result = await connection.QueryAsync( LotFinderQueries.SqlSearchItems, new { filter }, commandTimeout: _options.Value.DefaultTimeoutSeconds); return result.ToList(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { LogAndThrow(ex, operation, "SQL_SEARCH_ITEMS"); throw; } } /// public async Task> LookupItemsAsync(List itemNumbers, CancellationToken ct = default) { const string operation = nameof(LookupItemsAsync); try { var itemNumbersCsv = string.Join(",", itemNumbers); await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(ct); var result = await connection.QueryAsync( LotFinderQueries.SqlLookupItems, new { itemNumbers = itemNumbersCsv }, commandTimeout: _options.Value.DefaultTimeoutSeconds); return result.ToList(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { LogAndThrow(ex, operation, "SQL_LOOKUP_ITEMS"); throw; } } /// public async Task> LookupWorkordersAsync(List workorderNumbers, CancellationToken ct = default) { const string operation = nameof(LookupWorkordersAsync); try { var workOrderNumbersCsv = string.Join(",", workorderNumbers); await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(ct); var result = await connection.QueryAsync( LotFinderQueries.SqlLookupWorkorders, new { workOrderNumbers = workOrderNumbersCsv }, commandTimeout: _options.Value.DefaultTimeoutSeconds); return result.ToList(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { LogAndThrow(ex, operation, "SQL_LOOKUP_WORKORDERS"); throw; } } /// public async Task> SearchWorkCentersAsync(string filter, CancellationToken ct = default) { const string operation = nameof(SearchWorkCentersAsync); try { await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(ct); var result = await connection.QueryAsync( LotFinderQueries.SqlSearchWorkCenters, new { filter }, commandTimeout: _options.Value.DefaultTimeoutSeconds); return result.ToList(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { LogAndThrow(ex, operation, "SQL_SEARCH_WORK_CENTERS"); throw; } } /// public async Task> LookupWorkCentersAsync(List codes, CancellationToken ct = default) { const string operation = nameof(LookupWorkCentersAsync); try { var workCenterCodesCsv = string.Join(",", codes); await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(ct); var result = await connection.QueryAsync( LotFinderQueries.SqlLookupWorkCenters, new { workCenterCodes = workCenterCodesCsv }, commandTimeout: _options.Value.DefaultTimeoutSeconds); return result.ToList(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { LogAndThrow(ex, operation, "SQL_LOOKUP_WORK_CENTERS"); throw; } } /// public async Task> SearchProfitCentersAsync(string filter, CancellationToken ct = default) { const string operation = nameof(SearchProfitCentersAsync); try { await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(ct); var result = await connection.QueryAsync( LotFinderQueries.SqlSearchProfitCenters, new { filter }, commandTimeout: _options.Value.DefaultTimeoutSeconds); return result.ToList(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { LogAndThrow(ex, operation, "SQL_SEARCH_PROFIT_CENTERS"); throw; } } /// public async Task> LookupProfitCentersAsync(List codes, CancellationToken ct = default) { const string operation = nameof(LookupProfitCentersAsync); try { var profitCenterCodesCsv = string.Join(",", codes); await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(ct); var result = await connection.QueryAsync( LotFinderQueries.SqlLookupProfitCenters, new { profitCenterCodes = profitCenterCodesCsv }, commandTimeout: _options.Value.DefaultTimeoutSeconds); return result.ToList(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { LogAndThrow(ex, operation, "SQL_LOOKUP_PROFIT_CENTERS"); throw; } } /// public async Task> SearchUsersAsync(string filter, CancellationToken ct = default) { const string operation = nameof(SearchUsersAsync); try { await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(ct); var result = await connection.QueryAsync( LotFinderQueries.SqlSearchUsers, new { filter }, commandTimeout: _options.Value.DefaultTimeoutSeconds); return result.ToList(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { LogAndThrow(ex, operation, "SQL_SEARCH_USERS"); throw; } } /// public async Task> LookupUsersAsync(List userIds, CancellationToken ct = default) { const string operation = nameof(LookupUsersAsync); try { var userIdsCsv = string.Join(",", userIds); await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(ct); var result = await connection.QueryAsync( LotFinderQueries.SqlLookupUsers, new { userIds = userIdsCsv }, commandTimeout: _options.Value.DefaultTimeoutSeconds); return result.ToList(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { LogAndThrow(ex, operation, "SQL_LOOKUP_USERS"); throw; } } /// public async Task> LookupLotsAsync(List lots, CancellationToken ct = default) { const string operation = nameof(LookupLotsAsync); try { var lotsJson = System.Text.Json.JsonSerializer.Serialize( lots.Select(l => new { l.LotNumber, l.ItemNumber })); await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(ct); var result = await connection.QueryAsync( LotFinderQueries.SqlLookupLots, new { lotsJson }, commandTimeout: _options.Value.DefaultTimeoutSeconds); return result.ToList(); } catch (OperationCanceledException) { throw; } catch (Exception ex) { LogAndThrow(ex, operation, "SQL_LOOKUP_LOTS"); throw; } } }