public async Task <Product.Common.Models.InventoryResponse> Get(string id, [FromQuery] Guid?trackingGuid = null) { _context.Security = new K2SO.Auth.Security(HttpContext.Request.Headers["Authorization"]); trackingGuid = IG2000.Data.Utilities.Logging.CreateLogTrackingHeader(trackingGuid, _context); long longId = Utilities.RestErrorHandler.CheckId(id, _context, (Guid)trackingGuid); var response = new Product.Common.Models.InventoryResponse(); response = await _inventoryModel.GetById(longId, (Guid)trackingGuid); return(response); }
/// <summary> /// Get a single product by Id /// </summary> /// <param name="id">product id</param> /// <param name="context">Database context see ContextModel.cs</param> /// <param name="trackingGuid"></param> /// <returns></returns> public async Task <Tagge.Common.Models.ProductResponse> GetProductById(long id, Guid trackingGuid) { var companyId = context.Security.GetCompanyId(); // MongoDB Settings var database = context.MongoDbSettings.Value.Databases.FirstOrDefault(x => x.Name == "DeathStar"); string collectionName = database.Collections.FirstOrDefault(x => x.Name == "PC_Product").Name; // Get MongoDB var db = context.Database; var productCollection = db.GetCollection <Deathstar.Data.Models.PC_Product>(collectionName); // Filters - note always start with the company id var filters = Builders <Deathstar.Data.Models.PC_Product> .Filter.Eq(x => x.DV_CompanyId, companyId.ToString()); filters = filters & Builders <Deathstar.Data.Models.PC_Product> .Filter.Eq(x => x.Id, id); filters = filters & Builders <Deathstar.Data.Models.PC_Product> .Filter.Eq(x => x.IsActive, true); var dbProduct = await productCollection.FindAsync(filters).Result.FirstOrDefaultAsync(); if (dbProduct == null) { string reason = $"Product not found by Id:{id} provided."; IG2000.Data.Utilities.Logging.LogTrackingEvent($"Product was unable to be retrieved! Reason: {reason}", $"Status Code: {Microsoft.AspNetCore.Http.StatusCodes.Status404NotFound}", LT319.Common.Utilities.Constants.TrackingStatus.Error, context, trackingGuid); throw new HttpResponseException() { StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status404NotFound, ReasonPhrase = reason }; } //IG2000.Data.Utilities.Logging.LogTrackingEvent($"Product (id: {dbProduct.Id}, sku: {dbProduct.Sku}) successfully retrieved.", "Get Product (MongoDB)", LT319.Common.Utilities.Constants.TrackingStatus.Complete, trackingGuid); // Build the Response var response = dbProduct.ConvertToResponse(companyId.ToString(), context.Database); // Inventory response.Inventory = await _inventoryModel.GetById(dbProduct.Id.ToString(), "PC_Product", trackingGuid); // Variant response.Variants = await _variantModel.GetAll(dbProduct.Id, trackingGuid); // External Ids response.ExternalIds = await _externalIdModel.GetByParentId(dbProduct.Id.ToString(), "PC_Product", trackingGuid); return(response); }