Skip to content

Commit

Permalink
πŸ”€ :: club
Browse files Browse the repository at this point in the history
  • Loading branch information
shw0471 authored Jul 17, 2022
2 parents 65670fd + 7e738d9 commit 6c8c727
Show file tree
Hide file tree
Showing 47 changed files with 938 additions and 100 deletions.
10 changes: 10 additions & 0 deletions buildSrc/src/main/kotlin/Dependency.kt
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,20 @@ object Dependency {
const val glide = "com.github.bumptech.glide:glide:${Version.glide}"
const val glideCompiler = "com.github.bumptech.glide:compiler:${Version.glide}"
const val tedImagePicker = "io.github.ParkSangGwon:tedimagepicker:${Version.tedImagePicker}"
const val circularImageView = "de.hdodenhof:circleimageview:${Version.circularImageView}"
}

object Paging {
const val paging = "androidx.paging:paging-runtime:${Version.paging}"
const val pagingCompose = "androidx.paging:paging-compose:${Version.pagingCompose}"
}

object Chime {
const val chimeSdkMedia = "software.aws.chimesdk:amazon-chime-sdk-media:${Version.chime}"
const val chimeSdk = "software.aws.chimesdk:amazon-chime-sdk:${Version.chime}"
}

object Permission {
const val TedPermission = "io.github.ParkSangGwon:tedpermission-coroutine:${Version.tedPermission}"
}
}
3 changes: 3 additions & 0 deletions buildSrc/src/main/kotlin/Version.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,7 @@ object Version {
const val tedImagePicker = "1.2.8"
const val paging = "3.1.1"
const val pagingCompose = "1.0.0-alpha14"
const val chime = "0.17.2"
const val tedPermission = "3.3.0"
const val circularImageView = "3.1.0"
}
2 changes: 2 additions & 0 deletions data/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,6 @@ dependencies {
implementation(Dependency.DI.inject)

implementation(Dependency.Date.threeTenAbp)

implementation(Dependency.Chime.chimeSdk)
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ interface FriendApi {
@GET("/friends")
suspend fun fetchFriends(): FriendsResponse

@DELETE("/friends")
@HTTP(method = "DELETE", path = "/friends", hasBody = true)
suspend fun deleteFriend(
@Body deleteFriendRequest: DeleteFriendRequest
)
Expand Down
16 changes: 11 additions & 5 deletions data/src/main/java/com/semicolon/data/remote/api/RoomApi.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,28 @@
package com.semicolon.data.remote.api

import com.semicolon.data.remote.request.room.CreateRoomRequest
import com.semicolon.data.remote.response.room.ClubResponse
import com.semicolon.data.remote.response.room.RoomsResponse
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query
import retrofit2.http.*

interface RoomApi {

@POST("rooms")
suspend fun createRoom(
@Body createRoomRequest: CreateRoomRequest
)
): ClubResponse

@GET("rooms")
suspend fun fetchRooms(
@Query("page") page: Int,
@Query("size") size: Int
): RoomsResponse

@POST("rooms/attendance")
suspend fun joinRoom(
@Query("roomId") roomId: String
): ClubResponse

@DELETE("rooms")
suspend fun leaveRoom()
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package com.semicolon.data.remote.datasource

import com.semicolon.domain.entity.room.CreateRoomEntity
import com.semicolon.domain.entity.room.RoomPageEntity
import com.semicolon.domain.entity.room.RoomsEntity
import com.semicolon.domain.entity.room.*

interface RemoteRoomDataSource {

suspend fun createRoom(createRoomEntity: CreateRoomEntity)
suspend fun createRoom(createRoomEntity: CreateRoomEntity): ClubEntity

suspend fun fetchRooms(roomPage: RoomPageEntity): RoomsEntity

suspend fun joinRoom(joinRoomEntity: JoinRoomEntity): ClubEntity

suspend fun leaveRoom()
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,25 @@ import com.semicolon.data.remote.api.RoomApi
import com.semicolon.data.remote.request.room.toRequest
import com.semicolon.data.remote.response.room.toEntity
import com.semicolon.data.toMultipart
import com.semicolon.domain.entity.room.CreateRoomEntity
import com.semicolon.domain.entity.room.RoomPageEntity
import com.semicolon.domain.entity.room.RoomsEntity
import com.semicolon.domain.entity.room.*
import javax.inject.Inject

class RemoteRoomDataSourceImpl @Inject constructor(
private val roomApi: RoomApi,
private val imageApi: ImageApi
) : RemoteRoomDataSource {

override suspend fun createRoom(createRoomEntity: CreateRoomEntity) {
override suspend fun createRoom(createRoomEntity: CreateRoomEntity): ClubEntity {
val imagePath = imageApi.sendImage(createRoomEntity.image.toMultipart()).link
roomApi.createRoom(createRoomEntity.toRequest(imagePath))
return roomApi.createRoom(createRoomEntity.toRequest(imagePath)).toEntity()
}

override suspend fun fetchRooms(roomPage: RoomPageEntity): RoomsEntity =
roomApi.fetchRooms(page = roomPage.page, size = roomPage.size).toEntity()

override suspend fun joinRoom(joinRoomEntity: JoinRoomEntity): ClubEntity =
roomApi.joinRoom(joinRoomEntity.roomId).toEntity()

override suspend fun leaveRoom() =
roomApi.leaveRoom()
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ package com.semicolon.data.remote.request.friend
import com.google.gson.annotations.SerializedName
import com.semicolon.domain.entity.friend.AcceptFriendEntity

@JvmInline
value class AcceptFriendRequest(@SerializedName("user_id") val userId: String)

data class AcceptFriendRequest(
@SerializedName("user_id") val userId: String
)

fun AcceptFriendEntity.toRequest() =
AcceptFriendRequest(userId)
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package com.semicolon.data.remote.request.friend
import com.google.gson.annotations.SerializedName
import com.semicolon.domain.entity.friend.AddFriendEntity

@JvmInline
value class AddFriendRequest(@SerializedName("user_id") val userId: String)
data class AddFriendRequest(
@SerializedName("user_id") val userId: String
)

fun AddFriendEntity.toRequest() =
AddFriendRequest(userId)
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package com.semicolon.data.remote.request.friend
import com.google.gson.annotations.SerializedName
import com.semicolon.domain.entity.friend.DeleteFriendEntity

@JvmInline
value class DeleteFriendRequest(@SerializedName("user_id") val userId: String)
data class DeleteFriendRequest(
@SerializedName("user_id") val userId: String
)

fun DeleteFriendEntity.toRequest() =
DeleteFriendRequest(userId)
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ data class FriendsResponse(
@SerializedName("user_id") val userId: String,
@SerializedName("nickname") val nickname: String,
@SerializedName("profile_path") val profilePath: String,
@SerializedName("room_id") val roomId: String?
@SerializedName("room_id") val roomId: String?,
@SerializedName("room_title") val roomTitle: String?
)
}

Expand All @@ -23,7 +24,8 @@ fun FriendsResponse.toEntity() =
userId = it.userId,
nickname = it.nickname,
profilePath = it.profilePath,
roomId = it.roomId
roomId = it.roomId,
roomTitle = it.roomTitle
)
}
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.semicolon.data.remote.response.room

import com.amazonaws.services.chime.sdk.meetings.session.Attendee
import com.amazonaws.services.chime.sdk.meetings.session.Meeting
import com.google.gson.annotations.SerializedName
import com.semicolon.domain.entity.room.ClubEntity

data class ClubResponse(
@SerializedName("Meeting") val meetingResponse: Meeting,
@SerializedName("Attendance") val attendeeResponse: Attendee?
)

fun ClubResponse.toEntity() = ClubEntity(
meeting = meetingResponse,
attendee = attendeeResponse
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ data class ProfileResponse(
@SerializedName("id") val id: String,
@SerializedName("nickname") val nickname: String,
@SerializedName("image_path") val imagePath: String,
@SerializedName("room_id") val roomId: Long?
@SerializedName("room_id") val roomId: String?
)

fun ProfileResponse.toEntity() =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
package com.semicolon.data.repository

import com.semicolon.data.remote.datasource.RemoteRoomDataSource
import com.semicolon.domain.entity.room.CreateRoomEntity
import com.semicolon.domain.entity.room.RoomPageEntity
import com.semicolon.domain.entity.room.RoomsEntity
import com.semicolon.domain.entity.room.*
import com.semicolon.domain.repository.RoomRepository
import javax.inject.Inject

class RoomRepositoryImpl @Inject constructor(
private val remoteRoomDataSource: RemoteRoomDataSource
) : RoomRepository {

override suspend fun createRoom(createRoomEntity: CreateRoomEntity) =
override suspend fun createRoom(createRoomEntity: CreateRoomEntity): ClubEntity =
remoteRoomDataSource.createRoom(createRoomEntity)

override suspend fun fetchRooms(roomPage: RoomPageEntity): RoomsEntity =
remoteRoomDataSource.fetchRooms(roomPage)

override suspend fun joinRoom(joinRoomEntity: JoinRoomEntity): ClubEntity =
remoteRoomDataSource.joinRoom(joinRoomEntity)

override suspend fun leaveRoom() =
remoteRoomDataSource.leaveRoom()
}
2 changes: 1 addition & 1 deletion di/src/main/java/com/semicolon/di/NetworkModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import retrofit2.converter.gson.GsonConverterFactory
@InstallIn(SingletonComponent::class)
object NetworkModule {

private const val BASE_URL = "http://3.39.78.140:3000"
private const val BASE_URL = "http://3.34.194.251:3000"

@Provides
fun provideHttpLoggingInterceptor(): HttpLoggingInterceptor =
Expand Down
2 changes: 2 additions & 0 deletions domain/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,6 @@ dependencies {
implementation(Dependency.DI.inject)

implementation(Dependency.Date.threeTenAbp)

implementation(Dependency.Chime.chimeSdk)
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ data class FriendsEntity(
val userId: String,
val nickname: String,
val profilePath: String,
val roomId: String?
val roomId: String?,
val roomTitle: String?
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.semicolon.domain.entity.room

import com.amazonaws.services.chime.sdk.meetings.session.Attendee
import com.amazonaws.services.chime.sdk.meetings.session.Meeting

data class ClubEntity(
val meeting: Meeting,
val attendee: Attendee?
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.semicolon.domain.entity.room

data class JoinRoomEntity(
val roomId: String
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ data class ProfileEntity(
val id: String,
val nickname: String,
val imagePath: String,
val roomId: Long?
val roomId: String?
)
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package com.semicolon.domain.repository

import com.semicolon.domain.entity.room.RoomsEntity
import com.semicolon.domain.entity.room.RoomPageEntity
import com.semicolon.domain.entity.room.CreateRoomEntity
import com.semicolon.domain.entity.room.*

interface RoomRepository {

suspend fun createRoom(createRoomEntity: CreateRoomEntity)
suspend fun createRoom(createRoomEntity: CreateRoomEntity): ClubEntity

suspend fun fetchRooms(roomPage: RoomPageEntity): RoomsEntity

suspend fun joinRoom(joinRoomEntity: JoinRoomEntity): ClubEntity

suspend fun leaveRoom()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.semicolon.domain.usecase.room

import com.semicolon.domain.entity.room.ClubEntity
import com.semicolon.domain.entity.room.CreateRoomEntity
import com.semicolon.domain.entity.room.RoomsEntity
import com.semicolon.domain.repository.RoomRepository
import javax.inject.Inject

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.semicolon.domain.usecase.room

import com.semicolon.domain.entity.room.JoinRoomEntity
import com.semicolon.domain.repository.RoomRepository
import javax.inject.Inject

class JoinRoomUseCase @Inject constructor(
private val roomRepository: RoomRepository
) {
suspend fun execute(joinRoomEntity: JoinRoomEntity) =
roomRepository.joinRoom(joinRoomEntity)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.semicolon.domain.usecase.room

import com.semicolon.domain.repository.RoomRepository
import javax.inject.Inject

class LeaveRoomUseCase @Inject constructor(
private val roomRepository: RoomRepository
) {
suspend fun execute() =
roomRepository.leaveRoom()
}
7 changes: 7 additions & 0 deletions ui/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,17 @@ dependencies {

implementation(Dependency.Date.threeTenAbp)

implementation(Dependency.Image.circularImageView)
implementation(Dependency.Image.tedImagePicker)
implementation(Dependency.Image.glide)
kapt(Dependency.Image.glideCompiler)

implementation(Dependency.Paging.paging)
implementation(Dependency.Paging.pagingCompose)

implementation(Dependency.Chime.chimeSdk)
implementation(Dependency.Chime.chimeSdkMedia)

implementation(Dependency.Permission.TedPermission)

}
Loading

0 comments on commit 6c8c727

Please sign in to comment.