Esempio n. 1
0
        private async Task <OrganizationResponse> GetOrganizationAsync(string token, Community community,
                                                                       TimePadClient timePadClient, CancellationToken ct)
        {
            var introspect = await timePadClient.IntrospectTokenAsync(token, ct);

            var communityOrganization = introspect.Organizations?.SingleOrDefault(o => o.Name.Contains(community.Name));

            if (communityOrganization is null)
            {
                throw new Exception("Can't find community TimePad organization");
            }

            return(communityOrganization);
        }
Esempio n. 2
0
        public async Task PublishEventAsync(Meetup meetup, CancellationToken ct)
        {
            var token      = _optionsAccessor.Get(meetup.Community.ExportId).Token;
            var httpClient = _clientFactory.CreateClient("TimePad");

            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
            var timePadClient = new TimePadClient(httpClient);

            var communityOrganization = await GetOrganizationAsync(token, meetup.Community, timePadClient, ct);

            var events = await GetLastPrivateEvents(communityOrganization.Id, timePadClient, ct);

            var meetupEvent = events.FirstOrDefault(e => e.Name == meetup.Name);

            if (meetupEvent is null)
            {
                throw new Exception("Can't find meetup event");
            }

            var editEventBody = new EditEvent {
                Access_status = "public"
            };
            await timePadClient.EditEventAsync(meetupEvent.Id, editEventBody, ct);
        }
Esempio n. 3
0
        public async Task CreateDraftEventAsync(Meetup meetup, CancellationToken ct)
        {
            var token      = _optionsAccessor.Get(meetup.Community.ExportId).Token;
            var httpClient = _clientFactory.CreateClient("TimePad");

            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
            var timePadClient = new TimePadClient(httpClient);

            var communityOrganization = await GetOrganizationAsync(token, meetup.Community, timePadClient, ct);

            var startsAt = meetup.Sessions.Min(s => s.StartTime);
            var endsAt   = meetup.Sessions.Max(s => s.EndTime);

            var dateDescription  = startsAt.ToString("dd MMMM", CultureInfo.GetCultureInfo("ru-RU"));
            var shortDescription = $"{dateDescription} в гостях у компании {meetup.Friends.First()} состоится встреча {meetup.Community.Name}";

            var templateModel   = CreateTemplateModel(meetup);
            var htmlDescription = await _razorEngine.CompileRenderAsync($"Templates/{meetup.Community.ExportId}/TimePad.cshtml", templateModel);

            var ticketType = new TicketTypeRequest
            {
                Name  = "Входной билет",
                Price = 0,
                Send_personal_links = true
            };

            var questions = new List <QuestionInclude>
            {
                new QuestionInclude {
                    Field_id = "mail", Is_mandatory = true, Name = "E-mail"
                },
                new QuestionInclude {
                    Field_id = "surname", Is_mandatory = true, Name = "Фамилия"
                },
                new QuestionInclude {
                    Field_id = "name", Is_mandatory = true, Name = "Имя"
                },
                new QuestionInclude {
                    Name = "Компания"
                },
                new QuestionInclude {
                    Name = "Должность"
                }
            };

            string posterUrl       = null;
            var    lastPublicEvent = await GetLastPublicEvent(communityOrganization.Id, timePadClient, ct);

            if (!(lastPublicEvent is null))
            {
                posterUrl = $"http:{lastPublicEvent.Poster_image.Uploadcare_url}";
            }

            var createEventBody = new CreateEvent
            {
                Organization = new OrganizationInclude {
                    Id = communityOrganization.Id, Subdomain = communityOrganization.Subdomain
                },
                Starts_at         = startsAt,
                Ends_at           = endsAt,
                Name              = meetup.Name,
                Description_short = shortDescription,
                Description_html  = htmlDescription,
                Location          = new LocationInclude {
                    City = meetup.Community.City, Address = meetup.Venue.Address
                },
                Poster_image_url = posterUrl,
                Categories       = new[] { new CategoryInclude {
                                               Id = 452, Name = "ИТ и интернет"
                                           } },
                Access_status = "private",
                Tickets_limit = 150,
                Ticket_types  = new[] { ticketType },
                Questions     = questions,
                Age_limit     = "0"
            };

            await timePadClient.AddEventAsync(createEventBody, ct);
        }