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; } } }
/// <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); } } }
/// <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."); } } }
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}"); } } } }