Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions ZoomClient.Tests/Integration/ZoomClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,23 @@ public void Get_User_Participant_Report_For_Last_Meeting()
result.Participants.Count.ShouldBeGreaterThan(0);
}

[Test]
public void Get_User_Meeting_Report_Last_Month()
{
// Arrange
string user = _userEmail;
var from = DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd");
var to = DateTime.Now.ToString("yyyy-MM-dd");

// Act
var result = _sut.Reports.GetMeetingReport(user, from, to);

// Assert
result.ShouldNotBeNull();
result.Meetings.ShouldNotBeNull();
result.Meetings.Count.ShouldBeGreaterThan(0);
}

#endregion

#region Webhook Tests
Expand Down
12 changes: 12 additions & 0 deletions ZoomClient/Interfaces/IZoomReportsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,17 @@ public interface IZoomReportsClient
/// <param name="nextPageToken"></param>
/// <returns></returns>
MeetingParticipantsReport GetMeetingParticipantsReport(string meetingId, int pageSize = 30, string nextPageToken = null);

/// <summary>
/// Retrieve on a past meeting for a specified period of time. https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportmeetings
/// </summary>
/// <param name="userId"></param>
/// <param name="from"></param>
/// <param name="to"></param>
/// <param name="type"></param>
/// <param name="pageSize"></param>
/// <param name="nextPageToken"></param>
/// <returns></returns>
MeetingReport GetMeetingReport(string userId, string from, string to, MeetingReportTypes type = MeetingReportTypes.Past, int pageSize = 30, string nextPageToken = null);
}
}
68 changes: 68 additions & 0 deletions ZoomClient/Models/Reports/Meeting.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
using System;
using AndcultureCode.ZoomClient.Models.Meetings;

namespace AndcultureCode.ZoomClient.Models.Reports
{
public class Meeting
{
/// <summary>
/// Zoom Property: uuid
/// </summary>
public string Uuid { get; set; }

/// <summary>
/// Zoom Property: id
/// </summary>
public long Id { get; set; }

/// <summary>
/// Zoom Property: host_id
/// </summary>
public string HostId { get; set; }

/// <summary>
/// Zoom Property: type
/// </summary>
public MeetingTypes Type { get; set; }

/// <summary>
/// Zoom Property: topic
/// </summary>
public string Topic { get; set; }

/// <summary>
/// Zoom Property: user_name
/// </summary>
public string UserName { get; set; }

/// <summary>
/// Zoom Property: user_email
/// </summary>
public string UserEmail { get; set; }

/// <summary>
/// Zoom Property: start_time
/// </summary>
public DateTimeOffset StartTime { get; set; }

/// <summary>
/// Zoom Property: end_time
/// </summary>
public DateTimeOffset EndTime { get; set; }

/// <summary>
/// Zoom Property: duration
/// </summary>
public int Duration { get; set; }

/// <summary>
/// Zoom Property: total_minutes
/// </summary>
public int TotalMinutes { get; set; }

/// <summary>
/// Zoom Property: participants_count
/// </summary>
public int ParticipantsCount { get; set; }
}
}
13 changes: 13 additions & 0 deletions ZoomClient/Models/Reports/MeetingReport.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;

namespace AndcultureCode.ZoomClient.Models.Reports
{
public class MeetingReport : BaseTokenList
{
/// <summary>
/// Zoom Property: meetings
/// </summary>
public List<Meeting> Meetings { get; set; }
}
}
9 changes: 9 additions & 0 deletions ZoomClient/Models/Reports/MeetingReportTypes.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System;
namespace AndcultureCode.ZoomClient.Models.Reports
{
public enum MeetingReportTypes
{
Past = 1,
PastOne = 2
}
}
45 changes: 45 additions & 0 deletions ZoomClient/ZoomReportsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class ZoomReportsClient : IZoomReportsClient
#region Constants

protected const string GET_MEETING_PARTICIPANTS = "report/meetings/{meetingId}/participants";
protected const string GET_MEETINGS = "report/users/{userId}/meetings";

#endregion

Expand Down Expand Up @@ -74,6 +75,50 @@ public MeetingParticipantsReport GetMeetingParticipantsReport(string meetingId,
return null;
}

public MeetingReport GetMeetingReport(string userId, string from, string to, MeetingReportTypes type = MeetingReportTypes.Past, int pageSize = 30, string nextPageToken = null)
{
if (pageSize > 300)
{
throw new Exception("GetMeetingReport page size max 300");
}

var request = BuildRequestAuthorization(GET_MEETINGS, Method.GET);
request.AddParameter("userId", userId, ParameterType.UrlSegment);
request.AddParameter("from", from, ParameterType.QueryString);
request.AddParameter("to", to, ParameterType.QueryString);
request.AddParameter("type", type.ToString().ToLowerInvariant(), ParameterType.QueryString);

request.AddParameter("page_size", pageSize, ParameterType.QueryString);
if (!string.IsNullOrWhiteSpace(nextPageToken))
{
request.AddParameter("next_page_token", nextPageToken, ParameterType.QueryString);
}

var response = WebClient.Execute<MeetingReport>(request);

if (response.ResponseStatus == ResponseStatus.Completed && response.StatusCode == System.Net.HttpStatusCode.OK)
{
return response.Data;
}

if (!string.IsNullOrWhiteSpace(response.ErrorMessage))
{
throw new Exception(response.ErrorMessage);
}

if (!string.IsNullOrWhiteSpace(response.StatusDescription) && !string.IsNullOrWhiteSpace(response.Content))
{
throw new Exception($"{response.StatusDescription} || {response.Content}");
}

if (!string.IsNullOrWhiteSpace(response.Content))
{
throw new Exception($"{response.StatusCode} || {response.Content}");
}

return null;
}

#endregion

#region Private Methods
Expand Down