Esempio n. 1
0
        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");
            }
Esempio n. 3
0
        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);
        }
Esempio n. 6
0
        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);
        }