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 @@ -11,6 +11,7 @@ import com.github.ai.split.api.request.PostGroupRequest
import com.github.ai.split.api.request.PostMemberRequest
import com.github.ai.split.api.request.PutExpenseRequest
import com.github.ai.split.api.request.PutGroupRequest
import com.github.ai.split.api.request.PutMemberRequest
import com.github.ai.split.api.response.DeleteExpenseResponse
import com.github.ai.split.api.response.DeleteMemberResponse
import com.github.ai.split.api.response.GetGroupsResponse
Expand All @@ -19,6 +20,7 @@ import com.github.ai.split.api.response.PostGroupResponse
import com.github.ai.split.api.response.PostMemberResponse
import com.github.ai.split.api.response.PutExpenseResponse
import com.github.ai.split.api.response.PutGroupResponse
import com.github.ai.split.api.response.PutMemberResponse
import io.ktor.client.HttpClient

class ApiClient(
Expand Down Expand Up @@ -130,6 +132,17 @@ class ApiClient(
url = "$baseUrl/member/$memberUid?password=$password"
)

suspend fun putMember(
memberUid: String,
password: String,
request: PutMemberRequest
): Either<ApiException, PutMemberResponse> =
httpClient.sendRequest<PutMemberRequest, PutMemberResponse>(
type = RequestType.PUT,
url = "$baseUrl/member/$memberUid?password=$password",
body = Some(request)
)

companion object {
const val PROD_SERVER_URL = "https://api.simplesplitapp.link"
const val DEBUG_SERVER_URL = "http://10.0.2.2:8080"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import arrow.core.Either
import com.github.ai.simplesplit.android.data.api.ApiClient
import com.github.ai.simplesplit.android.model.exception.AppException
import com.github.ai.split.api.request.PostMemberRequest
import com.github.ai.split.api.request.PutMemberRequest
import com.github.ai.split.api.response.DeleteMemberResponse
import com.github.ai.split.api.response.PostMemberResponse
import com.github.ai.split.api.response.PutMemberResponse

class MemberRepository(
private val api: ApiClient
Expand All @@ -28,4 +30,15 @@ class MemberRepository(
memberUid = memberUid,
password = password
)

suspend fun updateMember(
memberUid: String,
password: String,
request: PutMemberRequest
): Either<AppException, PutMemberResponse> =
api.putMember(
memberUid = memberUid,
password = password,
request = request
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ import com.github.ai.split.api.UserNameDto
import com.github.ai.split.api.request.PostGroupRequest
import com.github.ai.split.api.request.PostMemberRequest
import com.github.ai.split.api.request.PutGroupRequest
import com.github.ai.split.api.request.PutMemberRequest

typealias UserUidAndName = Pair<String, String>

class GroupEditorInteractor(
private val groupRepository: GroupRepository,
Expand All @@ -28,29 +31,36 @@ class GroupEditorInteractor(
credentials: GroupCredentials,
newTitle: String?,
newPassword: String?,
membersToRemove: List<String>,
membersToAdd: List<String>
memberUidsToRemove: List<String>,
memberNamesToAdd: List<String>,
membersToUpdate: List<UserUidAndName>
): Either<AppException, GroupDto> =
either {
if (membersToAdd.isNotEmpty()) {
for (member in membersToAdd) {
memberRepository.createMember(
password = credentials.password,
request = PostMemberRequest(
groupUid = credentials.groupUid,
name = member
)
).bind()
}
for (memberName in memberNamesToAdd) {
memberRepository.createMember(
password = credentials.password,
request = PostMemberRequest(
groupUid = credentials.groupUid,
name = memberName
)
).bind()
}

if (membersToRemove.isNotEmpty()) {
for (member in membersToRemove) {
memberRepository.removeMember(
memberUid = member,
password = credentials.password
).bind()
}
for (memberUid in memberUidsToRemove) {
memberRepository.removeMember(
memberUid = memberUid,
password = credentials.password
).bind()
}

for ((memberUid, memberName) in membersToUpdate) {
memberRepository.updateMember(
memberUid = memberUid,
password = credentials.password,
request = PutMemberRequest(
name = memberName
)
).bind()
}

val group = if (newTitle != null ||
Expand Down
Loading