private GetWorkshopsResponse GetWorkshops() { GetWorkshops getWorkshops = new GetWorkshops(_gateway); GetWorkshopsResponse response = getWorkshops.Execute(); return(response); }
public void GetWorkshops(HttpListenerResponse response, IGetWorkshops getWorkshops, string user) { GetWorkshopsResponse workshops = getWorkshops.Execute(); var slackMessage = ToSlackMessage(workshops, user); string jsonForSlack = JsonConvert.SerializeObject(slackMessage); byte[] responseArray = Encoding.UTF8.GetBytes(jsonForSlack); response.AddHeader("Content-type", "application/json"); response.OutputStream.Write(responseArray, 0, responseArray.Length); Console.WriteLine("no payload"); }
public GetWorkshopsResponse Execute() { var list = gateway.All(); if (list.Count == 0) { return new GetWorkshopsResponse() { PresentableWorkshops = new PresentableWorkshop[] { } } } ; var getWorkshopsResponse = new GetWorkshopsResponse() { PresentableWorkshops = new PresentableWorkshop[list.Count] }; for (int i = 0; i < list.Count; i++) { getWorkshopsResponse.PresentableWorkshops[i] = new PresentableWorkshop() { ID = list[i].id, Name = list[i].name, Host = list[i].host, // Time = list[i].time.ToLocalTime(), Time = new DateTimeOffset(list[i].time, TimeSpan.Zero).ToOffset(TimeZoneInfo .FindSystemTimeZoneById("Europe/London").GetUtcOffset(list[i].time)), Location = list[i].location, Duration = list[i].duration, Type = list[i].type, Attendees = list[i].attendees }; } return(getWorkshopsResponse); } }
private void ToggleAttendance(HttpListenerContext context) { var payload = new StreamReader(context.Request.InputStream).ReadToEnd(); var firstString = HttpUtility.UrlDecode(payload); var payloadString = HttpUtility.ParseQueryString(firstString); Dictionary <string, string> dictionary = payloadString .Keys .Cast <string>() .ToDictionary(k => k, k => payloadString[k]); SlackButtonPayload deserialisedPayload = JsonConvert.DeserializeObject <SlackButtonPayload>(dictionary["payload"]); //Console.WriteLine(deserialisedPayload.Actions[0].Value); ToggleWorkshopAttendanceRequest toggleWorkshopAttendanceRequest = new ToggleWorkshopAttendanceRequest() { User = deserialisedPayload.User.Name, WorkshopId = deserialisedPayload.Actions[0].Value }; string response_url = deserialisedPayload.ResponseURL; _toggleWorkshopAttendance.Execute(toggleWorkshopAttendanceRequest); GetWorkshopsResponse workshops = _getWorkshops.Execute(); var slackMessage = ToSlackMessage(workshops, toggleWorkshopAttendanceRequest.User); string jsonForSlack = JsonConvert.SerializeObject(slackMessage); WebClient webClient = new WebClient(); webClient.Headers.Add("Content-type", "application/json"); webClient.UploadString(response_url, "POST", jsonForSlack); }
private static SlackMessage ToSlackMessage(GetWorkshopsResponse workshops, string user) { SlackMessage slackMessage = new SlackMessage { Blocks = new SlackMessage.SlackMessageBlock[workshops.PresentableWorkshops.Length + 2] }; slackMessage.Blocks[0] = new SlackMessage.TitleSectionBlock { Text = new SlackMessage.SectionBlockText { Type = "mrkdwn", Text = "*Workshops*" } }; slackMessage.Blocks[1] = new SlackMessage.DividerBlock { Type = "divider" }; for (int i = 0; i < workshops.PresentableWorkshops.Length; i++) { string attendanceStatus = "Attend"; if (workshops.PresentableWorkshops[i].Attendees.Contains(user)) { attendanceStatus = "Unattend"; } if (workshops.PresentableWorkshops[i].Type == "Showcase") { string showcaseText = $"*{workshops.PresentableWorkshops[i].Name}*\n" + $"{workshops.PresentableWorkshops[i].Time.ToString("dd/MM/yyyy hh:mm tt")}\n" + $"{workshops.PresentableWorkshops[i].Host}\n"; if (i < workshops.PresentableWorkshops.Length - 1) { if (workshops.PresentableWorkshops[i].Time.Day != workshops.PresentableWorkshops[i + 1].Time.Day) { showcaseText = showcaseText + "---------------------------------------------------------------------------------------------------------\n"; } } slackMessage.Blocks[i + 2] = new SlackMessage.ShowcaseSectionBlock { Text = new SlackMessage.SectionBlockText { Type = "mrkdwn", Text = showcaseText } }; } else { slackMessage.Blocks[i + 2] = new SlackMessage.SectionBlock { Text = new SlackMessage.SectionBlockText { Type = "mrkdwn", Text = $"*{workshops.PresentableWorkshops[i].Name}*\n" + $"{workshops.PresentableWorkshops[i].Time.ToString("dd/MM/yyyy hh:mm tt")}\n" + $"{workshops.PresentableWorkshops[i].Host}\n" + $"Current number of attendees: {workshops.PresentableWorkshops[i].Attendees.Count}" }, Accessory = new SlackMessage.SectionBlock.AccessoryBlock { Text = new SlackMessage.SectionBlockText { Type = "plain_text", Text = attendanceStatus }, Value = workshops.PresentableWorkshops[i].ID } }; } } return(slackMessage); }
public void CanGetTwoAirtableWorkshops() { var expectedResponse = new AirtableResponseBuilder() .AddRecord( "rec4rdaOkafgV1Bqm", new DateTime(2019, 8, 22, 8, 25, 28) ).WithName("Team Performance: Team Agile-Lean maturity 'measures' in practice (at DfE and Hackney)") .WithHost("Barry") .WithCategories("Delivery") .WithTime(2019, 10, 18, 13, 0, 0) .WithDurationInSeconds(3600) .WithLocation("Everest, 2nd Foor") .WithSessionType("Seminar") .AddRecord( "reca7W6WxWubIR7CK", new DateTime(2019, 8, 27, 5, 24, 25) ) .WithName("Account Leadership - Roles & Responsibilities") .WithHost("Rory") .WithCategories("Sales", "Workshop", "Life Skills", "Business") .WithTime(2019, 10, 18, 14, 30, 0) .WithDurationInSeconds(3600) .WithLocation("Everest") .WithSessionType("Workshop") .Build(); airtableSimulator.SetUpAll( TABLE_ID, AIRTABLE_API_KEY, expectedResponse ); AirtableGateway airtableGateway = new AirtableGateway(AIRTABLE_URL, AIRTABLE_API_KEY, TABLE_ID); GetWorkshops getWorkshops = new GetWorkshops(airtableGateway); GetWorkshopsResponse response = getWorkshops.Execute(); DateTime sourceDate = new DateTime(2019, 10, 18, 14, 00, 0); DateTimeOffset time = new DateTimeOffset(sourceDate, TimeZoneInfo.FindSystemTimeZoneById("Europe/London").GetUtcOffset(sourceDate)); DateTime sourceDate2 = new DateTime(2019, 10, 18, 15, 30, 0); DateTimeOffset time2 = new DateTimeOffset(sourceDate2, TimeZoneInfo.FindSystemTimeZoneById("Europe/London").GetUtcOffset(sourceDate2)); PresentableWorkshop[] presentableWorkshops = response.PresentableWorkshops; Assert.AreEqual("Team Performance: Team Agile-Lean maturity 'measures' in practice (at DfE and Hackney)", presentableWorkshops[0].Name); Assert.AreEqual("Barry", presentableWorkshops[0].Host); Assert.AreEqual(time, presentableWorkshops[0].Time); Assert.AreEqual("Everest, 2nd Foor", presentableWorkshops[0].Location); Assert.AreEqual(60, presentableWorkshops[0].Duration); Assert.AreEqual("Seminar", presentableWorkshops[0].Type); Assert.AreEqual("Account Leadership - Roles & Responsibilities", response.PresentableWorkshops[1].Name); Assert.AreEqual("Rory", presentableWorkshops[1].Host); Assert.AreEqual(time2, presentableWorkshops[1].Time); Assert.AreEqual("Everest", presentableWorkshops[1].Location); Assert.AreEqual(60, presentableWorkshops[1].Duration); Assert.AreEqual("Workshop", presentableWorkshops[1].Type); }