@@ -173,6 +173,96 @@ public class PeopleServiceRemote: ServiceRemoteWordPressComREST {
173173 } )
174174 }
175175
176+ public struct SubscribersParameters {
177+ public var sortField : SortField ?
178+ public var sortOrder : SortOrder ?
179+ public var filters : [ Filter ]
180+
181+ public enum SortField : String {
182+ case dateSubscribed = " date_subscribed "
183+ case email = " email "
184+ case name = " name "
185+ case plan = " plan "
186+ case subscriptionStatus = " subscription_status "
187+ }
188+
189+ public enum SortOrder : String {
190+ case ascending = " asc "
191+ case descending = " dsc "
192+ }
193+
194+ public protocol Filter : CustomStringConvertible { }
195+
196+ public enum FilterSubscriptionType : String , Filter {
197+ case email = " email_subscriber "
198+ case reader = " reader_subscriber "
199+ case unconfirmed = " unconfirmed_subscriber "
200+ case blocked = " blocked_subscriber "
201+
202+ public var description : String { rawValue }
203+ }
204+
205+ public enum FilterPaymentType : String , Filter {
206+ case free
207+ case paid
208+
209+ public var description : String { rawValue }
210+ }
211+
212+ public init ( sortField: SortField ? = nil , sortOrder: SortOrder ? = nil , filters: [ Filter ] = [ ] ) {
213+ self . sortField = sortField
214+ self . sortOrder = sortOrder
215+ self . filters = filters
216+ }
217+ }
218+
219+ public struct SubscribersResponse : Decodable {
220+ public var total : Int
221+ public var pages : Int
222+ public var page : Int
223+ public var perPage : Int
224+ public var subscribers : [ RemoteSubscriber ]
225+
226+ private enum CodingKeys : String , CodingKey {
227+ case total = " total "
228+ case pages = " pages "
229+ case page = " page "
230+ case perPage = " per_page "
231+ case subscribers = " subscribers "
232+ }
233+ }
234+
235+ public func getSubscribers(
236+ siteID: Int ,
237+ page: Int ? = nil ,
238+ perPage: Int ? = 25 ,
239+ parameters: SubscribersParameters = . init( ) ,
240+ ) async throws -> SubscribersResponse {
241+ let url = self . path ( forEndpoint: " sites/ \( siteID) /subscribers " , withVersion: . _2_0)
242+ var query : [ String : Any ] = [ : ]
243+ if let page {
244+ query [ " page " ] = page
245+ }
246+ if let perPage {
247+ query [ " per_page " ] = perPage
248+ }
249+ if let sortField = parameters. sortField {
250+ query [ " sort " ] = sortField. rawValue
251+ }
252+ if let sortOrder = parameters. sortOrder {
253+ query [ " sort_order " ] = sortOrder. rawValue
254+ }
255+ if !parameters. filters. isEmpty {
256+ query [ " filters " ] = parameters. filters. map { $0. description }
257+ }
258+ return try await wordPressComRestApi. perform (
259+ . get,
260+ URLString: url,
261+ jsonDecoder: JSONDecoder . apiDecoder,
262+ type: SubscribersResponse . self
263+ ) . get ( ) . body
264+ }
265+
176266 /// Updates a specified User's Role
177267 ///
178268 /// - Parameters:
0 commit comments