Ejemplo n.º 1
0
        public async System.Threading.Tasks.Task FunctionHandler(RoutedPodioEvent input, ILambdaContext context)
        {
            context.Logger.LogLine($"Entered function...");
            context.Logger.LogLine($"AppId: {input.appId}");
            context.Logger.LogLine($"ClientId: {input.clientId}");

            //var spaceId = input.currentItem.App.SpaceId.Value;
            //context.Logger.LogLine($"SpaceId: {spaceId}");

            //var deployment = input.currentEnvironment.apps.First(a => a.appId == input.appId);
            //context.Logger.LogLine($"Deployment: {deployment.date}");

            //var spaceName = deployment.deployedSpaces.First(kv => kv.Value == spaceId.ToString()).Key;
            //context.Logger.LogLine($"Space Name: {spaceName}");

            //var appName = input.currentItem.App.Name;

            using (var _mysql = new MySqlQueryHandler(context))
            {
                context.Logger.LogLine($"Deleting item {input.podioEvent.item_id}.");
                try
                {
                    await _mysql.DeletePodioItem(int.Parse(input.podioEvent.item_id));
                }
                catch (InvalidOperationException e)
                {
                    Console.WriteLine($"ItemId: {input.podioEvent.item_id}");
                    throw e;
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task FunctionHandler(SaasafrasAppTableCreateRequest input, ILambdaContext context)
        {
            var apiKey           = System.Environment.GetEnvironmentVariable("API_KEY");
            var baseUrl          = System.Environment.GetEnvironmentVariable("BASE_URL");
            var connectionString = System.Environment.GetEnvironmentVariable("PODIO_DB_CONNECTION_STRING");

            var client = new BbcServiceClient(baseUrl, apiKey);
            SaasafrasTokenProvider token = new SaasafrasTokenProvider(input.solutionId, input.version, client);

            //var podio = new PodioCore.Podio(token);

            System.Console.WriteLine($"Entered function...");
            ILambdaSerializer serializer = new Amazon.Lambda.Serialization.Json.JsonSerializer();

            using (var _mysql = new MySqlQueryHandler(connectionString ?? "server=mpactprodata.czsyc7qltifw.us-east-2.rds.amazonaws.com;uid=admin;pwd=perilousDeity;database=podioTest"))
            {
                if (input.spaceName != "Contacts")
                {
                    await _mysql.CreatePodioAppView(input.solutionId, input.version, input.spaceName, input.appName);

                    await _mysql.CreatePodioAppTable(input.solutionId, input.version, input.spaceName, input.appName);
                }
                else
                {
                    await _mysql.CreatePodioContactsTable();

                    var http = new System.Net.Http.HttpClient();
                    http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("OAuth2", token.TokenData.AccessToken);
                    http.BaseAddress = new Uri("https://api.podio.com/");
                    int limit  = 50;
                    int offset = 0;
                    int count  = 0;
                    do
                    {
                        var content = await http.GetStringAsync($"contact?offset={offset}&limit={limit}");

                        var contacts = Newtonsoft.Json.JsonConvert.DeserializeObject <List <PodioContact> >(content);
                        foreach (var contact in contacts)
                        {
                            await _mysql.AddContact(
                                contact.ProfileId,
                                contact.UserId,
                                contact.Name,
                                (contact.Email?.Length ?? 0) > 0?contact.Email[0] : "",
                                (contact.Address?.Length ?? 0) > 0?contact.Address[0] : "",
                                contact.City,
                                contact.State,
                                contact.Zip,
                                contact.Type,
                                (contact.Phone?.Length ?? 0) > 0?contact.Phone[0] : ""
                                );
                        }
                        count   = contacts.Count;
                        offset += limit;
                    }while (count >= limit);
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task FunctionHandler(WebApiRequest <SaasafrasCoreTableRebuildRequest> input, ILambdaContext context)
        {
            context.Logger.LogLine($"Entered function...");
            using (var _mysql = new MySqlQueryHandler(context))
            {
                context.Logger.LogLine($"Rebuilding core tables for {input.bodyJson.appId}, {input.bodyJson.version}");

                await _mysql.RebuildCoreTables(input.bodyJson.solutionId, input.bodyJson.version);
            }
        }
        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task FunctionHandler(SaasafrasRebuildRequest input, ILambdaContext context)
        {
            context.Logger.LogLine($"{Newtonsoft.Json.JsonConvert.SerializeObject(input)}");
            using (var _mysql = new MySqlQueryHandler(context))
            {
                switch (input.command)
                {
                case "rebuild-core-tables":
                    context.Logger.LogLine($"Rebuilding app tables for {input.solutionId}, {input.version}");
                    try
                    {
                        var   task = _mysql.RebuildCoreTables(input.solutionId, input.version);
                        await task;
                    }
                    catch (Exception e)
                    {
                        context.Logger.LogLine(e.Message);
                    }
                    break;

                case "rebuild-app-tables":
                    context.Logger.LogLine($"Rebuilding app tables for {input.solutionId}, {input.version}");
                    try
                    {
                        var   task = _mysql.RebuildAppTable(input.solutionId, input.version, 'Y');
                        await task;
                    }
                    catch (Exception e)
                    {
                        context.Logger.LogLine(e.Message);
                    }
                    break;

                default:
                    throw new Exception($"command {input.command} not recognized.");
                }
            }
        }
Ejemplo n.º 5
0
        public async System.Threading.Tasks.Task FunctionHandler(RoutedPodioEvent input, ILambdaContext context)
        {
            context.Logger.LogLine($"Entered function...");
            context.Logger.LogLine($"AppId: {input.appId}");
            context.Logger.LogLine($"ClientId: {input.clientId}");
            ILambdaSerializer serializer = new Amazon.Lambda.Serialization.Json.JsonSerializer();

            BrickBridge.Models.Podio.Item _item;
            using (var stream = new System.IO.MemoryStream())
            {
                serializer.Serialize <Item>(input.currentItem, stream);
                var inputText = System.Text.Encoding.UTF8.GetString(stream.ToArray());
                context.Logger.LogLine($"Input: {inputText}");
                stream.Position = 0;
                _item           = serializer.Deserialize <Models.Podio.Item>(stream);
            }

            context.Logger.LogLine($"SpaceId: {_item.app.space_id}");
            var deployment = input.currentEnvironment.apps.First(a => a.appId == input.appId);
            var spaceName  = deployment.deployedSpaces.First(kv => kv.Value == _item.app.space_id.ToString()).Key;


            var appName = input.currentItem.App.Name;

            using (var _mysql = new MySqlQueryHandler(context))
            {
                context.Logger.LogLine($"Inserting item {input.currentItem.ItemId} from app {input.appId}");
                var podioAppId = await _mysql.GetPodioAppId(input.appId, input.version, spaceName, appName);

                var podioItemId = await _mysql.InsertPodioItem(podioAppId, input.currentItem.ItemId, int.Parse(input.podioEvent.item_revision_id), input.clientId, input.currentEnvironment.environmentId);

                var appFields = await _mysql.SelectAppFields(podioAppId);

                context.Logger.LogLine($"Item has {input.currentItem.Fields.Count} fields to insert.");
                foreach (var field in input.currentItem.Fields)
                {
                    //if the field matches a field defined for this app, insert the field data
                    if (!appFields.Any(a => a.ExternalId == field.ExternalId && a.Type == field.Type))
                    {
                        context.Logger.LogLine($"Field {field.ExternalId} was not found in the PodioFields table.");
                        continue;
                    }
                    var appField = appFields.First(a => a.ExternalId == field.ExternalId && a.Type == field.Type);
                    context.Logger.LogLine($"Inserting field {field.ExternalId} for item {input.currentItem.ItemId}");
                    switch (field.Type)
                    {
                    case "category":
                        var c = input.currentItem.Field <CategoryItemField>(field.ExternalId);
                        foreach (var option in c.Options)
                        {
                            var i = await _mysql.InsertCategoryField(podioItemId, appField.PodioFieldId, option.Text, option.Id.Value);
                        }
                        break;

                    case "contact":
                        var co = input.currentItem.Field <ContactItemField>(field.ExternalId);
                        foreach (var contact in co.Contacts)
                        {
                            var i = await _mysql.InsertContactField(podioItemId, appField.PodioFieldId, contact.ProfileId);
                        }
                        break;

                    case "date":
                        var d = input.currentItem.Field <DateItemField>(field.ExternalId);
                        if (d.Start.HasValue)
                        {
                            await _mysql.InsertDateField(podioItemId, appField.PodioFieldId, d.Start, d.End);
                        }
                        break;

                    case "duration":
                        var du = input.currentItem.Field <DurationItemField>(field.ExternalId);
                        if (du.Value.HasValue)
                        {
                            await _mysql.InsertDurationField(podioItemId, appField.PodioFieldId, du.Value.Value.Seconds);
                        }
                        break;

                    case "location":
                        var l = input.currentItem.Field <LocationItemField>(field.ExternalId);
                        foreach (var location in l.Locations)
                        {
                            var i = await _mysql.InsertLocationField(podioItemId, appField.PodioFieldId, location);
                        }
                        break;

                    case "member":
                        var me = input.currentItem.Field <ContactItemField>(field.ExternalId);
                        foreach (var member in me.Contacts)
                        {
                            var i = await _mysql.InsertMemberField(podioItemId, appField.PodioFieldId, member.ProfileId);
                        }
                        break;

                    case "money":
                        var m = input.currentItem.Field <MoneyItemField>(field.ExternalId);
                        if (m.Value.HasValue)
                        {
                            await _mysql.InsertMoneyField(podioItemId, appField.PodioFieldId, m.Value.Value, m.Currency);
                        }
                        break;

                    case "number":
                        var n = input.currentItem.Field <NumericItemField>(field.ExternalId);
                        if (n.Value.HasValue)
                        {
                            await _mysql.InsertNumberField(podioItemId, appField.PodioFieldId, n.Value.Value);
                        }
                        break;

                    case "phone":
                        var p = input.currentItem.Field <PhoneItemField>(field.ExternalId);
                        foreach (var phone in p.Value)
                        {
                            var i = await _mysql.InsertPhoneField(podioItemId, appField.PodioFieldId, phone.Type, phone.Value);
                        }
                        break;

                    case "email":
                        var e = input.currentItem.Field <EmailItemField>(field.ExternalId);
                        foreach (var email in e.Value)
                        {
                            var i = await _mysql.InsertEmailField(podioItemId, appField.PodioFieldId, email.Type, email.Value);
                        }
                        break;

                    case "progress":
                        var pr = input.currentItem.Field <ProgressItemField>(field.ExternalId);
                        if (pr.Value.HasValue)
                        {
                            await _mysql.InsertProgressField(podioItemId, appField.PodioFieldId, pr.Value.Value);
                        }
                        break;

                    case "app":
                        var a = input.currentItem.Field <AppItemField>(field.ExternalId);
                        foreach (var item in a.Items)
                        {
                            var i = await _mysql.InsertRelationField(podioItemId, appField.PodioFieldId, item.ItemId);
                        }
                        break;

                    case "text":
                        var t = input.currentItem.Field <TextItemField>(field.ExternalId);
                        await _mysql.InsertTextField(podioItemId, appField.PodioFieldId, t.Value);

                        break;

                    case "calculation":
                        //var ca = input.currentItem.Field<CalculationItemField>(field.ExternalId);
                        //if (ca.HasValue() && ca.Value.HasValue)
                        //    await _mysql.InsertNumberField(podioItemId, appField.PodioFieldId, (double)ca.Value.Value);
                        //else
                        //await _mysql.InsertTextField(podioItemId, appField.PodioFieldId, ca.ValueAsString);
                        break;

                    default: throw new Exception($"Cannot handle field type: {field.Type}");
                    }
                }
            }
        }