public async Task <IActionResult> CreatePointOfSaleApp(string storeId, CreatePointOfSaleAppRequest request)
        {
            var validationResult = Validate(request);

            if (validationResult != null)
            {
                return(validationResult);
            }

            var store = await _storeRepository.FindStore(storeId);

            if (store == null)
            {
                return(this.CreateAPIError(404, "store-not-found", "The store was not found"));
            }

            var defaultCurrency = store.GetStoreBlob().DefaultCurrency;
            var appData         = new AppData
            {
                StoreDataId = storeId,
                Name        = request.AppName,
                AppType     = AppType.PointOfSale.ToString()
            };

            appData.SetSettings(new PointOfSaleSettings
            {
                Title                 = request.Title,
                DefaultView           = (Services.Apps.PosViewType)request.DefaultView,
                ShowCustomAmount      = request.ShowCustomAmount,
                ShowDiscount          = request.ShowDiscount,
                EnableTips            = request.EnableTips,
                Currency              = request.Currency ?? defaultCurrency,
                Template              = request.Template,
                ButtonText            = request.FixedAmountPayButtonText ?? PointOfSaleSettings.BUTTON_TEXT_DEF,
                CustomButtonText      = request.CustomAmountPayButtonText ?? PointOfSaleSettings.CUSTOM_BUTTON_TEXT_DEF,
                CustomTipText         = request.TipText ?? PointOfSaleSettings.CUSTOM_TIP_TEXT_DEF,
                CustomCSSLink         = request.CustomCSSLink,
                NotificationUrl       = request.NotificationUrl,
                RedirectUrl           = request.RedirectUrl,
                Description           = request.Description,
                EmbeddedCSS           = request.EmbeddedCSS,
                RedirectAutomatically = request.RedirectAutomatically,
                RequiresRefundEmail   = request.RequiresRefundEmail == true ?
                                        RequiresRefundEmail.On :
                                        request.RequiresRefundEmail == false ?
                                        RequiresRefundEmail.Off :
                                        RequiresRefundEmail.InheritFromStore,
            });

            await _appService.UpdateOrCreateApp(appData);

            return(Ok(ToModel(appData)));
        }
        public virtual async Task <PointOfSaleAppData> CreatePointOfSaleApp(string storeId,
                                                                            CreatePointOfSaleAppRequest request, CancellationToken token = default)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            var response = await _httpClient.SendAsync(
                CreateHttpRequest($"api/v1/stores/{storeId}/apps/pos", bodyPayload : request,
                                  method : HttpMethod.Post), token);

            return(await HandleResponse <PointOfSaleAppData>(response));
        }