Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Test
import uniffi.wp_api.SparseUserField
import uniffi.wp_api.WpApiHelper
import uniffi.wp_api.WpContext
import uniffi.wp_api.wpAuthenticationFromUsernameAndPassword

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ interface UsersEndpointCreate {

interface UsersEndpointUpdate {
suspend fun withId(userId: UserId, params: UserUpdateParams): WpRequestResult<UserWithEditContext>
suspend fun current(params: UserUpdateParams): WpRequestResult<UserWithEditContext>
suspend fun me(params: UserUpdateParams): WpRequestResult<UserWithEditContext>
}

interface UsersEndpointDelete {
suspend fun withId(userId: UserId, params: UserDeleteParams): WpRequestResult<UserDeleteResponse>
suspend fun current(params: UserDeleteParams): WpRequestResult<UserDeleteResponse>
suspend fun me(params: UserDeleteParams): WpRequestResult<UserDeleteResponse>
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ package rs.wordpress.api.kotlin

import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import uniffi.wp_api.WpApiHelper
import uniffi.wp_api.WpAuthentication
import uniffi.wp_api.WpRequestBuilder

class WpApiClient(
siteUrl: String,
authentication: WpAuthentication,
networkHandler: NetworkHandler = WpNetworkHandler(),
dispatcher: CoroutineDispatcher = Dispatchers.IO
) {
private val apiHelper = WpApiHelper(siteUrl, authentication)
private val requestBuilder = WpRequestBuilder(siteUrl, authentication)
val users: UsersEndpoint by lazy {
WpUsersEndpoint(apiHelper, networkHandler, dispatcher)
WpUsersEndpoint(requestBuilder.users(), networkHandler, dispatcher)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import uniffi.wp_api.UserUpdateParams
import uniffi.wp_api.UserWithEditContext
import uniffi.wp_api.UserWithEmbedContext
import uniffi.wp_api.UserWithViewContext
import uniffi.wp_api.WpApiHelper
import uniffi.wp_api.UsersRequestBuilder
import uniffi.wp_api.WpContext
import uniffi.wp_api.WpNetworkResponse
import uniffi.wp_api.parseDeleteUserResponse
Expand All @@ -27,35 +27,35 @@ import uniffi.wp_api.parseRetrieveUserResponseWithEmbedContext
import uniffi.wp_api.parseRetrieveUserResponseWithViewContext

internal class WpUsersEndpoint(
apiHelper: WpApiHelper,
usersRequestBuilder: UsersRequestBuilder,
networkHandler: NetworkHandler,
dispatcher: CoroutineDispatcher
) : UsersEndpoint {
private val requestHandler = WpRequestHandler(networkHandler, dispatcher)

override val list: UsersEndpointList by lazy {
WpUsersEndpointList(requestHandler, apiHelper, dispatcher)
WpUsersEndpointList(requestHandler, usersRequestBuilder, dispatcher)
}
override val retrieve: UsersEndpointRetrieve by lazy {
WpUsersEndpointRetrieve(requestHandler, apiHelper, dispatcher)
WpUsersEndpointRetrieve(requestHandler, usersRequestBuilder, dispatcher)
}
override val me: UsersEndpointRetrieveMe by lazy {
WpUsersEndpointRetrieveMe(requestHandler, apiHelper, dispatcher)
WpUsersEndpointRetrieveMe(requestHandler, usersRequestBuilder, dispatcher)
}
override val create: UsersEndpointCreate by lazy {
WpUsersEndpointCreate(requestHandler, apiHelper, dispatcher)
WpUsersEndpointCreate(requestHandler, usersRequestBuilder, dispatcher)
}
override val update: UsersEndpointUpdate by lazy {
WpUsersEndpointUpdate(requestHandler, apiHelper, dispatcher)
WpUsersEndpointUpdate(requestHandler, usersRequestBuilder, dispatcher)
}
override val delete: UsersEndpointDelete by lazy {
WpUsersEndpointDelete(requestHandler, apiHelper, dispatcher)
WpUsersEndpointDelete(requestHandler, usersRequestBuilder, dispatcher)
}
}

private class WpUsersEndpointList(
private val requestHandler: WpRequestHandler,
private val apiHelper: WpApiHelper,
private val usersRequestBuilder: UsersRequestBuilder,
private val dispatcher: CoroutineDispatcher
) : UsersEndpointList {
override suspend fun withEditContext(params: UserListParams?): WpRequestResult<List<UserWithEditContext>> =
Expand All @@ -73,7 +73,7 @@ private class WpUsersEndpointList(
fields: List<SparseUserField>
): WpRequestResult<List<SparseUser>> = withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.filterListUsersRequest(context, params, fields),
request = usersRequestBuilder.filterList(context, params, fields),
::parseFilterUsersResponse
)
}
Expand All @@ -84,15 +84,15 @@ private class WpUsersEndpointList(
parser: (response: WpNetworkResponse) -> T
): WpRequestResult<T> = withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.listUsersRequest(context, params),
request = usersRequestBuilder.list(context, params),
parser
)
}
}

private class WpUsersEndpointRetrieve(
private val requestHandler: WpRequestHandler,
private val apiHelper: WpApiHelper,
private val usersRequestBuilder: UsersRequestBuilder,
private val dispatcher: CoroutineDispatcher
) : UsersEndpointRetrieve {
override suspend fun withEditContext(userId: UserId): WpRequestResult<UserWithEditContext> =
Expand All @@ -110,7 +110,7 @@ private class WpUsersEndpointRetrieve(
fields: List<SparseUserField>
): WpRequestResult<SparseUser> = withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.filterRetrieveUserRequest(userId, context, fields),
request = usersRequestBuilder.filterRetrieve(userId, context, fields),
::parseFilterRetrieveUserResponse
)
}
Expand All @@ -121,15 +121,15 @@ private class WpUsersEndpointRetrieve(
parser: (response: WpNetworkResponse) -> T
): WpRequestResult<T> = withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.retrieveUserRequest(userId, context),
request = usersRequestBuilder.retrieve(userId, context),
parser
)
}
}

private class WpUsersEndpointRetrieveMe(
private val requestHandler: WpRequestHandler,
private val apiHelper: WpApiHelper,
private val usersRequestBuilder: UsersRequestBuilder,
private val dispatcher: CoroutineDispatcher
) : UsersEndpointRetrieveMe {
override suspend fun withEditContext(): WpRequestResult<UserWithEditContext> =
Expand All @@ -146,7 +146,7 @@ private class WpUsersEndpointRetrieveMe(
fields: List<SparseUserField>
): WpRequestResult<SparseUser> = withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.filterRetrieveCurrentUserRequest(context, fields),
request = usersRequestBuilder.filterRetrieveMe(context, fields),
::parseFilterRetrieveUserResponse
)
}
Expand All @@ -156,69 +156,69 @@ private class WpUsersEndpointRetrieveMe(
parser: (response: WpNetworkResponse) -> T
): WpRequestResult<T> = withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.retrieveCurrentUserRequest(context),
request = usersRequestBuilder.retrieveMe(context),
parser
)
}
}

private class WpUsersEndpointCreate(
private val requestHandler: WpRequestHandler,
private val apiHelper: WpApiHelper,
private val usersRequestBuilder: UsersRequestBuilder,
private val dispatcher: CoroutineDispatcher
) : UsersEndpointCreate {
override suspend fun new(params: UserCreateParams): WpRequestResult<UserWithEditContext> =
withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.createUserRequest(params),
request = usersRequestBuilder.create(params),
::parseRetrieveUserResponseWithEditContext
)
}
}

private class WpUsersEndpointUpdate(
private val requestHandler: WpRequestHandler,
private val apiHelper: WpApiHelper,
private val usersRequestBuilder: UsersRequestBuilder,
private val dispatcher: CoroutineDispatcher
) : UsersEndpointUpdate {
override suspend fun withId(
userId: UserId,
params: UserUpdateParams
): WpRequestResult<UserWithEditContext> = withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.updateUserRequest(userId, params),
request = usersRequestBuilder.update(userId, params),
::parseRetrieveUserResponseWithEditContext
)
}

override suspend fun current(params: UserUpdateParams): WpRequestResult<UserWithEditContext> =
override suspend fun me(params: UserUpdateParams): WpRequestResult<UserWithEditContext> =
withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.updateCurrentUserRequest(params),
request = usersRequestBuilder.updateMe(params),
::parseRetrieveUserResponseWithEditContext
)
}
}

private class WpUsersEndpointDelete(
private val requestHandler: WpRequestHandler,
private val apiHelper: WpApiHelper,
private val usersRequestBuilder: UsersRequestBuilder,
private val dispatcher: CoroutineDispatcher
) : UsersEndpointDelete {
override suspend fun withId(
userId: UserId,
params: UserDeleteParams
): WpRequestResult<UserDeleteResponse> = withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.deleteUserRequest(userId, params),
request = usersRequestBuilder.delete(userId, params),
::parseDeleteUserResponse
)
}

override suspend fun current(params: UserDeleteParams): WpRequestResult<UserDeleteResponse> =
override suspend fun me(params: UserDeleteParams): WpRequestResult<UserDeleteResponse> =
withContext(dispatcher) {
requestHandler.execute(
request = apiHelper.deleteCurrentUserRequest(params),
request = usersRequestBuilder.deleteMe(params),
::parseDeleteUserResponse
)
}
Expand Down
40 changes: 20 additions & 20 deletions native/swift/Sources/wordpress-api/Endpoints/Users.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,24 @@ extension SparseUser: Contextual {
public typealias EditContext = UserWithEditContext
public typealias EmbedContext = UserWithEmbedContext

public static func retrieveRequest(id: UserId, using helper: WpApiHelperProtocol, context: WpContext) -> WpNetworkRequest {
helper.retrieveUserRequest(userId: id, context: context)
public static func retrieveRequest(id: UserId, using requestBuilder: WpRequestBuilderProtocol, context: WpContext) -> WpNetworkRequest {
requestBuilder.users().retrieve(userId: id, context: context)
}

public static func listRequest(params: UserListParams?, using helper: WpApiHelperProtocol, context: WpContext) -> WpNetworkRequest {
helper.listUsersRequest(context: context, params: params)
public static func listRequest(params: UserListParams?, using requestBuilder: WpRequestBuilderProtocol, context: WpContext) -> WpNetworkRequest {
requestBuilder.users().list(context: context, params: params)
}

public static func updateRequest(id: UserId, params: UserUpdateParams, using helper: any WpApiHelperProtocol) -> WpNetworkRequest {
helper.updateUserRequest(userId: id, params: params)
public static func updateRequest(id: UserId, params: UserUpdateParams, using requestBuilder: any WpRequestBuilderProtocol) -> WpNetworkRequest {
requestBuilder.users().update(userId: id, params: params)
}

public static func createRequest(params: UserCreateParams, using helper: any WpApiHelperProtocol) -> WpNetworkRequest {
helper.createUserRequest(params: params)
public static func createRequest(params: UserCreateParams, using requestBuilder: any WpRequestBuilderProtocol) -> WpNetworkRequest {
requestBuilder.users().create(params: params)
}

public static func deleteRequest(id: ID, params: UserDeleteParams, using helper: WpApiHelperProtocol) -> WpNetworkRequest {
helper.deleteUserRequest(userId: id, params: params)
public static func deleteRequest(id: ID, params: UserDeleteParams, using requestBuilder: WpRequestBuilderProtocol) -> WpNetworkRequest {
requestBuilder.users().delete(userId: id, params: params)
}

public static func parseResponse(_ response: WpNetworkResponse) throws -> UserWithViewContext {
Expand Down Expand Up @@ -63,8 +63,8 @@ extension WordPressAPI {
}

extension ContextualNamespace where T == SparseUser {
public func getCurrent() async throws -> R {
let request = self.api.helper.retrieveCurrentUserRequest(context: context)
public func getMe() async throws -> R {
let request = self.api.requestBuilder.users().retrieveMe(context: context)
let response = try await api.perform(request: request)
return try parseResponse(response)
}
Expand All @@ -78,14 +78,14 @@ extension AnyNamespace where T == SparseUser {
try await self.delete(id: id, params: .init(reassign: userID))
}

public func deleteCurrent(reassignTo userID: T.ID) async throws -> T.DeleteResult {
let request = self.api.helper.deleteCurrentUserRequest(params: .init(reassign: userID))
public func deleteMe(reassignTo userID: T.ID) async throws -> T.DeleteResult {
let request = self.api.requestBuilder.users().deleteMe(params: .init(reassign: userID))
let response = try await api.perform(request: request)
return try T.parseDeletionResponse(response)
}

public func updateCurrent(with params: UserUpdateParams) async throws -> T.EditContext {
let request = self.api.helper.updateCurrentUserRequest(params: params)
public func updateMe(with params: UserUpdateParams) async throws -> T.EditContext {
let request = self.api.requestBuilder.users().updateMe(params: params)
let response = try await self.api.perform(request: request)
return try parseRetrieveUserResponseWithEditContext(response: response)
}
Expand All @@ -99,19 +99,19 @@ extension AnyNamespace where T == SparseUser {
extension ContextualNamespace where T == SparseUser {

public func list(with params: T.ListParams, fields: [SparseUserField]) async throws -> [T] {
let request = api.helper.filterListUsersRequest(context: context, params: params, fields: fields)
let request = api.requestBuilder.users().filterList(context: context, params: params, fields: fields)
let response = try await api.perform(request: request)
return try parseFilterUsersResponse(response: response)
}

public func get(id: T.ID, fields: [SparseUserField]) async throws -> T {
let request = api.helper.filterRetrieveUserRequest(userId: id, context: context, fields: fields)
let request = api.requestBuilder.users().filterRetrieve(userId: id, context: context, fields: fields)
let response = try await api.perform(request: request)
return try parseFilterRetrieveUserResponse(response: response)
}

public func getCurrent(fields: [SparseUserField]) async throws -> T {
let request = api.helper.filterRetrieveCurrentUserRequest(context: context, fields: fields)
public func getMe(fields: [SparseUserField]) async throws -> T {
let request = api.requestBuilder.users().filterRetrieveMe(context: context, fields: fields)
let response = try await api.perform(request: request)
return try parseFilterRetrieveUserResponse(response: response)
}
Expand Down
20 changes: 10 additions & 10 deletions native/swift/Sources/wordpress-api/Namespace.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ public protocol Contextual {
associatedtype CreateParams
associatedtype DeleteParams

static func retrieveRequest(id: ID, using helper: WpApiHelperProtocol, context: WpContext) -> WpNetworkRequest
static func listRequest(params: ListParams, using helper: WpApiHelperProtocol, context: WpContext) -> WpNetworkRequest
static func updateRequest(id: ID, params: UpdateParams, using helper: WpApiHelperProtocol) -> WpNetworkRequest
static func createRequest(params: CreateParams, using helper: WpApiHelperProtocol) -> WpNetworkRequest
static func deleteRequest(id: ID, params: DeleteParams, using helper: WpApiHelperProtocol) -> WpNetworkRequest
static func retrieveRequest(id: ID, using requestBuilder: WpRequestBuilderProtocol, context: WpContext) -> WpNetworkRequest
static func listRequest(params: ListParams, using requestBuilder: WpRequestBuilderProtocol, context: WpContext) -> WpNetworkRequest
static func updateRequest(id: ID, params: UpdateParams, using requestBuilder: WpRequestBuilderProtocol) -> WpNetworkRequest
static func createRequest(params: CreateParams, using requestBuilder: WpRequestBuilderProtocol) -> WpNetworkRequest
static func deleteRequest(id: ID, params: DeleteParams, using requestBuilder: WpRequestBuilderProtocol) -> WpNetworkRequest

static func parseResponse(_ response: WpNetworkResponse) throws -> ViewContext
static func parseResponse(_ response: WpNetworkResponse) throws -> EditContext
Expand Down Expand Up @@ -108,13 +108,13 @@ public struct EmbedNamespace<T: Contextual>: ContextualNamespace {

extension ContextualNamespace {
public func get(id: T.ID) async throws -> R {
let request = T.retrieveRequest(id: id, using: api.helper, context: context)
let request = T.retrieveRequest(id: id, using: api.requestBuilder, context: context)
let response = try await api.perform(request: request)
return try parseResponse(response)
}

public func list(with params: T.ListParams) async throws -> [R] {
let request = T.listRequest(params: params, using: api.helper, context: context)
let request = T.listRequest(params: params, using: api.requestBuilder, context: context)
let response = try await api.perform(request: request)
return try parseResponse(response)
}
Expand All @@ -126,19 +126,19 @@ extension ContextualNamespace {

extension AnyNamespace where T: Contextual {
public func update(id: T.ID, with params: T.UpdateParams) async throws -> T.EditContext {
let request = T.updateRequest(id: id, params: params, using: api.helper)
let request = T.updateRequest(id: id, params: params, using: api.requestBuilder)
let response = try await self.api.perform(request: request)
return try T.parseResponse(response)
}

public func create(using params: T.CreateParams) async throws -> T.EditContext {
let request = T.createRequest(params: params, using: api.helper)
let request = T.createRequest(params: params, using: api.requestBuilder)
let response = try await self.api.perform(request: request)
return try T.parseResponse(response)
}

public func delete(id: T.ID, params: T.DeleteParams) async throws -> T.DeleteResult {
let request = T.deleteRequest(id: id, params: params, using: api.helper)
let request = T.deleteRequest(id: id, params: params, using: api.requestBuilder)
let response = try await api.perform(request: request)
return try T.parseDeletionResponse(response)
}
Expand Down
4 changes: 2 additions & 2 deletions native/swift/Sources/wordpress-api/WordPressAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ public struct WordPressAPI {
}

private let urlSession: URLSession
package let helper: WpApiHelperProtocol
package let requestBuilder: WpRequestBuilderProtocol

public init(urlSession: URLSession, baseUrl: URL, authenticationStategy: WpAuthentication) {
self.urlSession = urlSession
self.helper = WpApiHelper(siteUrl: baseUrl.absoluteString, authentication: authenticationStategy)
self.requestBuilder = WpRequestBuilder(siteUrl: baseUrl.absoluteString, authentication: authenticationStategy)
}

package func perform(request: WpNetworkRequest) async throws -> WpNetworkResponse {
Expand Down
Loading