Skip to content

Extend SubscriberServiceRemote #837

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 17 commits into from
May 13, 2025
4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ let package = Package(
targets: [
.binaryTarget(
name: "WordPressKit",
url: "https://github.com/user-attachments/files/19949939/WordPressKit.zip",
checksum: "ba06ff0716595023dd6c98b6a5bc74d4abb35bfb668e24026ffd041460f59137"
url: "https://github.com/user-attachments/files/20175119/WordPressKit.zip",
checksum: "13aa0e5952616a2f01a0f0db370ee7925d58253c2aab6e216671e8a013ab471b"
),
]
)
23 changes: 0 additions & 23 deletions Sources/WordPressKit/Models/RemoteSubscriber.swift

This file was deleted.

85 changes: 0 additions & 85 deletions Sources/WordPressKit/Services/PeopleServiceRemote.swift
Original file line number Diff line number Diff line change
Expand Up @@ -173,91 +173,6 @@ public class PeopleServiceRemote: ServiceRemoteWordPressComREST {
})
}

public struct SubscribersParameters {
public var sortField: SortField?
public var sortOrder: SortOrder?
public var filters: [Filter]

public enum SortField: String {
case dateSubscribed = "date_subscribed"
case email = "email"
case name = "name"
case plan = "plan"
case subscriptionStatus = "subscription_status"
}

public enum SortOrder: String {
case ascending = "asc"
case descending = "dsc"
}

public protocol Filter: CustomStringConvertible {}

public enum FilterSubscriptionType: String, Filter {
case email = "email_subscriber"
case reader = "reader_subscriber"
case unconfirmed = "unconfirmed_subscriber"
case blocked = "blocked_subscriber"

public var description: String { rawValue }
}

public enum FilterPaymentType: String, Filter {
case free
case paid

public var description: String { rawValue }
}

public init(sortField: SortField? = nil, sortOrder: SortOrder? = nil, filters: [Filter] = []) {
self.sortField = sortField
self.sortOrder = sortOrder
self.filters = filters
}
}

public struct SubscribersResponse: Decodable {
public var total: Int
public var pages: Int
public var page: Int
public var subscribers: [RemoteSubscriber]
}

public func getSubscribers(
siteID: Int,
page: Int? = nil,
perPage: Int? = 25,
parameters: SubscribersParameters = .init()
) async throws -> SubscribersResponse {
let url = self.path(forEndpoint: "sites/\(siteID)/subscribers", withVersion: ._2_0)
var query: [String: Any] = [:]
if let page {
query["page"] = page
}
if let perPage {
query["per_page"] = perPage
}
if let sortField = parameters.sortField {
query["sort"] = sortField.rawValue
}
if let sortOrder = parameters.sortOrder {
query["sort_order"] = sortOrder.rawValue
}
if !parameters.filters.isEmpty {
query["filters"] = parameters.filters.map { $0.description }
}

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = JSONDecoder.DateDecodingStrategy.supportMultipleDateFormats

return try await wordPressComRestApi.perform(
.get,
URLString: url,
jsonDecoder: decoder,
type: SubscribersResponse.self
).get().body
}

/// Updates a specified User's Role
///
/// - Parameters:
Expand Down
Loading