Skip to content
This repository was archived by the owner on Dec 7, 2024. It is now read-only.
Open
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@
<activity
android:name=".presentation.view.member_manage.MemberManageActivity"
android:exported="false" />
<activity
android:name=".presentation.view.attend.AttendActivity"
android:exported="false" />

<service
android:name=".presentation.service.GCMSMessagingService"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import kotlinx.coroutines.flow.Flow
import java.time.LocalDate

interface AttendDataSource {
suspend fun getClubAttendList(clubId: Long, date: LocalDate, period: String): Flow<GetClubAttendListResponse>
suspend fun getClubAttendList(clubId: Long, date: LocalDate?, period: String?): Flow<GetClubAttendListResponse>
suspend fun postAttendList(body: PostAttendListRequest): Flow<Unit>
suspend fun patchAttendStatus(body: PatchAttendStatusRequest): Flow<Unit>
suspend fun patchAttendStatusCollectively(body: PatchAttendStatusCollectivelyRequest): Flow<Unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ class AttendDataSourceImpl @Inject constructor(
) : AttendDataSource {
override suspend fun getClubAttendList(
clubId: Long,
date: LocalDate,
period: String
date: LocalDate?,
period: String?
): Flow<GetClubAttendListResponse> = flow {
emit(
GCMSApiHandler<GetClubAttendListResponse>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@ import com.google.gson.annotations.SerializedName
import com.msg.gcms.domain.data.attend.GetClubAttendListResponseData
import com.msg.gcms.domain.data.attend.GetClubAttendListResponseData.User as DomainUser
import java.time.LocalDate
import java.time.LocalTime
import java.util.UUID

data class GetClubAttendListResponse(
@SerializedName("date")
val date: LocalDate,
@SerializedName("period")
val period: LocalTime,
val period: String,
@SerializedName("users")
val users: List<User>
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ interface AttendAPI {
@GET("attend/{club_id}")
suspend fun getAttendList(
@Path("club_id") clubId: Long,
@Query("date") date: LocalDate,
@Query("period") period: String
@Query("date") date: LocalDate?,
@Query("period") period: String?
): GetClubAttendListResponse

@POST("attend/{club_id}/club")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ class AttendRepositoryImpl @Inject constructor(
) : AttendRepository {
override suspend fun getClubAttendList(
clubId: Long,
date: LocalDate,
period: String
date: LocalDate?,
period: String?
): Flow<GetClubAttendListResponseData> {
return attendDataSource.getClubAttendList(
clubId = clubId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import java.util.UUID

data class GetClubAttendListResponseData(
val date: LocalDate,
val period: LocalTime,
val period: String,
val users: List<User>
) {
data class User(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import kotlinx.coroutines.flow.Flow
import java.time.LocalDate

interface AttendRepository {
suspend fun getClubAttendList(clubId: Long, date: LocalDate, period: String): Flow<GetClubAttendListResponseData>
suspend fun getClubAttendList(clubId: Long, date: LocalDate?, period: String?): Flow<GetClubAttendListResponseData>
suspend fun postAttendList(body: PostAttendListRequestData): Flow<Unit>
suspend fun patchAttendStatus(body: PatchAttendStatusRequestData): Flow<Unit>
suspend fun patchAttendStatusCollectively(body: PatchAttendStatusCollectivelyRequestData): Flow<Unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import javax.inject.Inject
class GetClubAttendListUseCase @Inject constructor(
private val attendRepository: AttendRepository
) {
suspend operator fun invoke(clubId: Long, date: LocalDate, period: String) = runCatching {
suspend operator fun invoke(clubId: Long, date: LocalDate?, period: String?) = runCatching {
attendRepository.getClubAttendList(
clubId = clubId,
date = date,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import javax.inject.Inject
class PostAttendListUseCase @Inject constructor(
private val attendRepository: AttendRepository
) {
suspend fun invoke(body: PostAttendListRequestData) = runCatching {
suspend operator fun invoke(body: PostAttendListRequestData) = runCatching {
attendRepository.postAttendList(
body = body
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.msg.gcms.presentation.adapter.attend

import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.msg.gcms.R
import com.msg.gcms.databinding.ListMemberAttendBinding
import com.msg.gcms.domain.data.attend.GetClubAttendListResponseData

class ClubAttendListAdapter(private val itemList: List<GetClubAttendListResponseData.User>) :
RecyclerView.Adapter<ClubAttendListAdapter.ViewHolder>() {
class ViewHolder(val binding: ListMemberAttendBinding, listener: OnItemClickListener) : RecyclerView.ViewHolder(binding.root) {

fun bind(item: GetClubAttendListResponseData.User) {
val context = binding.userName.context
binding.member = item
binding.userClassTxt.text = "${item.grade}학년 ${item.classNum}반 ${item.number}번"
when (item.attendanceStatus) {
"ATTENDANCE" -> {
binding.userName.setTextColor(ContextCompat.getColor(context, R.color.dark_blue3))
binding.attendState.setBackgroundResource(R.drawable.ic_attend_check)
}
"LATE" -> {
binding.userName.setTextColor(ContextCompat.getColor(context, R.color.yellow))
binding.attendState.setBackgroundResource(R.drawable.ic_attend_late)
}
"REASONABLE_ABSENT" -> {
binding.userName.setTextColor(ContextCompat.getColor(context, R.color.gray_5))
binding.attendState.setBackgroundResource(R.drawable.ic_attend_sick)
}
"ABSENT" -> {
binding.userName.setTextColor(ContextCompat.getColor(context, R.color.red_error))
binding.attendState.setBackgroundResource(R.drawable.ic_attend_absent)
}
else -> {
binding.userName.setTextColor(ContextCompat.getColor(context, R.color.white))
}
}
}

init {
binding.checkAttendMember.setOnClickListener {
listener.select(adapterPosition, it.isSelected)
}
}
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(itemList[position])
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
ListMemberAttendBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
),
itemClickListener
)
}

override fun getItemCount(): Int = itemList.size

interface OnItemClickListener {
fun select(position: Int, isChecked: Boolean)
}

fun setItemOnClickListener(onItemClickListener: OnItemClickListener) {
this.itemClickListener = onItemClickListener
}

private lateinit var itemClickListener: OnItemClickListener
}
Loading