Beispiel #1
0
        protected override async Task PatchStubAsync(MaterialStub advMaterialStub, Amsv1MaterialData amsv1Data)
        {
            // logo
            var logoElement = advMaterialStub.GetElementByType(MaterialElementType.CompositeBitmapImage);

            string uploadUrl  = logoElement.UploadUrl;
            var    materialId = advMaterialStub.Id;

            string fileName   = $"{amsv1Data.ImageName}.{amsv1Data.ImageExt}";
            var    uploadHash = await _okapiClient.UploadFileAsync(materialId, new Uri(uploadUrl), fileName, amsv1Data.ImageData);

            logoElement.Value.Raw = uploadHash.Raw;

            // crop area
            logoElement.Value.CropArea = CropAreaFactory.Create(amsv1Data);

            // background color
            var bgColorElement = advMaterialStub.GetElementByType(MaterialElementType.Color);

            bgColorElement.Value.Raw = amsv1Data.BackgroundColor;

            // custom images
            var customImages = new List <SizeSpecificImage>();

            foreach (var c in amsv1Data.SizeSpecificImages)
            {
                var img = await CreateCustomImageAsync(materialId, new Uri(uploadUrl), c);

                customImages.Add(img);
            }

            logoElement.Value.SizeSpecificImages = customImages.ToArray();

            advMaterialStub.Properties.Name = "logo_zmk";
        }
Beispiel #2
0
        public static CropArea Create(Amsv1MaterialData data)
        {
            var area = new CropArea
            {
                Top    = data.CropTop,
                Left   = data.CropLeft,
                Height = data.CropHeight,
                Width  = data.CropWidth
            };

            return(area);
        }
Beispiel #3
0
        public async Task <bool> SetModerationState(long amId, string version, Amsv1MaterialData materialData)
        {
            var uri = _baseUri + $"/api/{_apiVersion}/am/{amId}/version/{version}/moderation";

            try
            {
                var status = materialData.ModerationState;
                if (_moderationStateMap.TryGetValue(materialData.ModerationState, out var mappedStatus))
                {
                    status = mappedStatus;
                }

                var request = new ModerationRequest {
                    Status = status, Comment = materialData.ModerationComment ?? string.Empty
                };
                var reqContent = new StringContent(request.ToJson(), Encoding.UTF8, "application/json");

                using (var response = await _httpClient.PutAsync(uri, reqContent))
                {
                    var content = await response.Content.ReadAsStringAsync();

                    if (!response.IsSuccessStatusCode)
                    {
                        if (response.StatusCode == HttpStatusCode.PreconditionFailed)
                        {
                            _logger.Error("[MODERATION_FAIL] Unable to add moderation to material {amid} uuid {uuid} firm {firmid}. Moderation info: {info}, Response: {content}", amId, materialData.Uuid, materialData.FirmId, request, content);
                        }
                        else
                        {
                            response.EnsureSuccessStatusCode();
                        }
                    }

                    _logger.Information("[MODERATION_SUCCESS] Ad material {uuid} {firmid} successfully moderated with state: {state}, comment: {comment}", materialData.Uuid, materialData.FirmId, materialData.ModerationState, materialData.ModerationComment);

                    return(response.IsSuccessStatusCode);
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Exception occured while moderating material {amid}", amId);
                throw;
            }
        }
Beispiel #4
0
        public async Task <MaterialCreationResult> ExecuteAsync(Amsv1MaterialData amsv1Data)
        {
            try
            {
                _logger.Information("Starting to execute {name} import strategy; Am id {uuid}; Firm id: {firmid}", Name, amsv1Data.Uuid, amsv1Data.FirmId);

                var(byWhat, targetCode) = GetCreationTarget();

                _logger.Information("Creating stub for material id: {uuid}", amsv1Data.Uuid);

                var advMaterialStub = await _okapiClient.CreateMaterialStubAsync(byWhat, targetCode.ToString(), amsv1Data.FirmId, _options.Language);

                _logger.Information("Stub for material id {uuid} successfully created. Stub id: {stubId}", amsv1Data.Uuid, advMaterialStub.Id);
                _logger.Information("Stub patching started. AMS v1.0 material id {uuid}, OKAPI stub id: {stubId}", amsv1Data.Uuid, advMaterialStub.Id);

                await PatchStubAsync(advMaterialStub, amsv1Data);

                _logger.Information("Creating material started. AMS v1.0 material id {uuid}, OKAPI stub id: {stubId}", amsv1Data.Uuid, advMaterialStub.Id);
                var material = await _okapiClient.CreateNewMaterialAsync(advMaterialStub.Id, amsv1Data.FirmId, advMaterialStub);

                _logger.Information("Material {stubId} has been created", advMaterialStub.Id);
                _logger.Information("Strategy {name} has been completed successfully. Material id: {uuid}; Firm id: {firmid}", Name, amsv1Data.Uuid, amsv1Data.FirmId);

                return(new MaterialCreationResult
                {
                    MaterialId = advMaterialStub.Id,
                    FirmId = amsv1Data.FirmId,
                    BindedNomenclatures = GetBindedNomenclatures(),
                    VersionId = material.VersionId
                });
            }
            catch (UnprocessableEntityException ueex)
            {
                _logger.Error("[UNPROCESSABLE] {uuid} {firmid} {content} {header}", amsv1Data.Uuid, amsv1Data.FirmId, ueex.Content, ueex.CustomImageHeader);

                return(null);
            }
            catch (Exception)
            {
                _logger.Information("Failed to process AM with AMS 1.0 id: {uuid} {firmid}", amsv1Data.Uuid, amsv1Data.FirmId);
                throw;
            }
        }
Beispiel #5
0
        protected override async Task PatchStubAsync(MaterialStub advMaterialStub, Amsv1MaterialData amsv1Data)
        {
            // original logo
            var logoElement = advMaterialStub.GetElementByType(MaterialElementType.CompositeBitmapImage);

            string uploadUrl  = logoElement.UploadUrl;
            var    materialId = advMaterialStub.Id;

            string fileName   = $"{amsv1Data.ImageName}.{amsv1Data.ImageExt}";
            var    uploadHash = await _okapiClient.UploadFileAsync(materialId, new Uri(uploadUrl), fileName, amsv1Data.ImageData);

            logoElement.Value.Raw = uploadHash.Raw;

            // crop area
            logoElement.Value.CropArea = CropAreaFactory.Create(amsv1Data);

            // background color
            var bgColorElement = advMaterialStub.GetElementByType(MaterialElementType.Color);

            bgColorElement.Value.Raw = amsv1Data.BackgroundColor;

            advMaterialStub.Properties.Name = "logo_kb";
        }
Beispiel #6
0
 protected abstract Task PatchStubAsync(MaterialStub stub, Amsv1MaterialData amsv1Data);