Skip to content

Commit 6ab68a7

Browse files
committed
feat(#79-support-search): support search was added
1 parent a468dab commit 6ab68a7

File tree

5 files changed

+138
-0
lines changed

5 files changed

+138
-0
lines changed

api/src/commonMain/kotlin/app/meetacy/sdk/AuthorizedMeetacyApi.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import app.meetacy.sdk.friends.AuthorizedFriendsApi
55
import app.meetacy.sdk.invitations.AuthorizedInvitationsApi
66
import app.meetacy.sdk.meetings.AuthorizedMeetingsApi
77
import app.meetacy.sdk.notifications.AuthorizedNotificationsApi
8+
import app.meetacy.sdk.search.AuthorizedSearchItemRepository
89
import app.meetacy.sdk.types.annotation.UnsafeConstructor
910
import app.meetacy.sdk.types.auth.Token
11+
import app.meetacy.sdk.types.location.Location
1012
import app.meetacy.sdk.updates.AuthorizedUpdatesApi
1113
import app.meetacy.sdk.users.AuthorizedSelfUserRepository
1214
import app.meetacy.sdk.users.AuthorizedUsersApi
@@ -38,4 +40,7 @@ public class AuthorizedMeetacyApi @UnsafeConstructor constructor(
3840
data = base.getMe(token),
3941
api = this
4042
)
43+
public suspend fun search(location: Location, prompt: String): List<AuthorizedSearchItemRepository> =
44+
base.search(token, location, prompt).map { AuthorizedSearchItemRepository.of(it.data, api = this) }
45+
4146
}

api/src/commonMain/kotlin/app/meetacy/sdk/MeetacyApi.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ package app.meetacy.sdk
33
import app.meetacy.sdk.auth.AuthApi
44
import app.meetacy.sdk.engine.MeetacyRequestsEngine
55
import app.meetacy.sdk.engine.requests.GetMeRequest
6+
import app.meetacy.sdk.engine.requests.SearchRequest
67
import app.meetacy.sdk.files.FilesApi
78
import app.meetacy.sdk.friends.FriendsApi
89
import app.meetacy.sdk.invitations.InvitationsApi
910
import app.meetacy.sdk.meetings.MeetingsApi
1011
import app.meetacy.sdk.notifications.NotificationsApi
12+
import app.meetacy.sdk.search.SearchItemRepository
1113
import app.meetacy.sdk.types.annotation.UnsafeConstructor
1214
import app.meetacy.sdk.types.auth.Token
15+
import app.meetacy.sdk.types.location.Location
1316
import app.meetacy.sdk.types.user.SelfUser
1417
import app.meetacy.sdk.updates.UpdatesApi
1518
import app.meetacy.sdk.users.UsersApi
@@ -30,10 +33,26 @@ public class MeetacyApi(
3033
return engine.execute(GetMeRequest(token)).me
3134
}
3235

36+
public suspend fun search(
37+
token: Token,
38+
location: Location,
39+
prompt: String
40+
): List<SearchItemRepository> {
41+
return engine.execute(
42+
request = SearchRequest(
43+
token, location, prompt
44+
)
45+
).items.map { searchItem ->
46+
SearchItemRepository.of(searchItem, api = this)
47+
}
48+
}
49+
3350
@OptIn(UnsafeConstructor::class)
3451
public fun authorized(token: Token): AuthorizedMeetacyApi {
3552
return AuthorizedMeetacyApi(token, base = this)
3653
}
3754

55+
56+
3857
public companion object
3958
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package app.meetacy.sdk.search
2+
3+
import app.meetacy.sdk.AuthorizedMeetacyApi
4+
import app.meetacy.sdk.meetings.AuthorizedMeetingRepository
5+
import app.meetacy.sdk.types.auth.Token
6+
import app.meetacy.sdk.types.search.SearchItem
7+
import app.meetacy.sdk.users.AuthorizedUserRepository
8+
import app.meetacy.sdk.types.place.Place as PlaceData
9+
10+
public sealed class AuthorizedSearchItemRepository {
11+
protected abstract val api: AuthorizedMeetacyApi
12+
public abstract val data: SearchItem
13+
public abstract val base: SearchItemRepository
14+
15+
public val token: Token get() = api.token
16+
17+
public class Meeting(
18+
override val data: SearchItem.Meeting,
19+
override val api: AuthorizedMeetacyApi
20+
) : AuthorizedSearchItemRepository() {
21+
override val base: SearchItemRepository
22+
get() = SearchItemRepository.Meeting(data, api.base)
23+
public val meeting: AuthorizedMeetingRepository
24+
get() = AuthorizedMeetingRepository(data.meeting, api)
25+
}
26+
27+
public class Place(
28+
override val data: SearchItem.Place,
29+
override val api: AuthorizedMeetacyApi
30+
) : AuthorizedSearchItemRepository() {
31+
override val base: SearchItemRepository
32+
get() = SearchItemRepository.Place(data)
33+
34+
public val place: PlaceData
35+
get() = data.place
36+
}
37+
38+
public class User(
39+
override val data: SearchItem.User,
40+
override val api: AuthorizedMeetacyApi
41+
) : AuthorizedSearchItemRepository() {
42+
43+
override val base: SearchItemRepository
44+
get() = SearchItemRepository.User(data, api.base)
45+
public val user: AuthorizedUserRepository
46+
get() = AuthorizedUserRepository.of(data.user, api)
47+
}
48+
49+
public companion object {
50+
public fun of(data: SearchItem, api: AuthorizedMeetacyApi): AuthorizedSearchItemRepository =
51+
when (data) {
52+
is SearchItem.Meeting -> Meeting(data, api)
53+
is SearchItem.Place -> Place(data, api)
54+
is SearchItem.User -> User(data, api)
55+
}
56+
57+
}
58+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package app.meetacy.sdk.search
2+
3+
import app.meetacy.sdk.MeetacyApi
4+
import app.meetacy.sdk.meetings.AuthorizedMeetingRepository
5+
import app.meetacy.sdk.meetings.MeetingRepository
6+
import app.meetacy.sdk.types.place.Place as PlaceData
7+
import app.meetacy.sdk.types.search.SearchItem
8+
import app.meetacy.sdk.users.UserRepository
9+
10+
/**
11+
* When modifying this class, corresponding classes should be altered:
12+
* - [AuthorizedMeetingRepository]
13+
*/
14+
15+
public sealed class SearchItemRepository {
16+
public abstract val data: SearchItem
17+
18+
public class Meeting(
19+
override val data: SearchItem.Meeting,
20+
private val api: MeetacyApi
21+
) : SearchItemRepository() {
22+
public val meeting: MeetingRepository
23+
get() = MeetingRepository(data.meeting, api)
24+
}
25+
26+
public class Place(
27+
override val data: SearchItem.Place
28+
) : SearchItemRepository() {
29+
public val place: PlaceData
30+
get() = data.place
31+
}
32+
33+
public class User(
34+
override val data: SearchItem.User,
35+
private val api: MeetacyApi
36+
) : SearchItemRepository() {
37+
public val user: UserRepository
38+
get() = UserRepository.of(data.user, api)
39+
}
40+
41+
public companion object {
42+
public fun of(data: SearchItem, api: MeetacyApi): SearchItemRepository {
43+
return when (data) {
44+
is SearchItem.Meeting -> Meeting(data, api)
45+
is SearchItem.Place -> Place(data)
46+
is SearchItem.User -> User(data, api)
47+
}
48+
}
49+
}
50+
}

types/src/commonMain/kotlin/app/meetacy/sdk/types/search/SearchItem.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ import app.meetacy.sdk.types.meeting.Meeting as MeetingView
44
import app.meetacy.sdk.types.place.Place as PlaceView
55
import app.meetacy.sdk.types.user.User as UserView
66

7+
/**
8+
* When modifying this class, corresponding classes should be altered:
9+
* - [app.meetacy.sdk.search.SearchItemRepository]
10+
* - [app.meetacy.sdk.search.AuthorizedSearchItemRepository]
11+
*/
12+
713
public sealed interface SearchItem {
814
public class Meeting(public val meeting: MeetingView) : SearchItem
915
public class User(public val user: UserView) : SearchItem

0 commit comments

Comments
 (0)