Skip to content

Commit c3f0d4c

Browse files
committed
일반 팀원 출첵 api 연결
1 parent 9bb4652 commit c3f0d4c

File tree

6 files changed

+51
-9
lines changed

6 files changed

+51
-9
lines changed

app/src/main/java/com/ddd/attendance/check/api/ApiService.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.ddd.attendance.check.api
22

33
import com.ddd.attendance.check.model.Attendance
4+
import com.ddd.attendance.check.model.AttendanceCheckResponse
45
import com.ddd.attendance.check.model.LoginResponse
56
import kotlinx.coroutines.Deferred
67
import retrofit2.Response
@@ -19,4 +20,8 @@ interface ApiService {
1920

2021
@POST("/attends/end")
2122
fun attendsEnd(): Deferred<Response<Attendance>>
23+
24+
@FormUrlEncoded
25+
@POST("/attends/check")
26+
fun attendsCheck(@Field("userId") userId: String, @Field("number") number: String): Deferred<Response<AttendanceCheckResponse>>
2227
}

app/src/main/java/com/ddd/attendance/check/common/DDDDialog.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import android.view.ViewGroup
1010
import androidx.core.content.ContextCompat
1111
import com.ddd.attendance.check.R
1212
import com.ddd.attendance.check.vm.MainViewModel
13+
import com.ddd.attendance.check.vm.MainViewModel.Companion.MSG_ATTENDANCE_SUCCESS
1314
import kotlinx.android.synthetic.main.dialog_ddd.*
1415

1516

@@ -33,7 +34,7 @@ class DDDDialog(context: Context, private val data: Pair<UserType, String>) : Di
3334
private fun setDialogMarkImg(message: String) {
3435
val background = ContextCompat.getDrawable(
3536
context,
36-
if (message == MainViewModel.MSG_ATTENDANCE_START) R.drawable.check_icon else R.drawable.exclamation
37+
if (message == MainViewModel.MSG_ATTENDANCE_START || message == MSG_ATTENDANCE_SUCCESS) R.drawable.check_icon else R.drawable.exclamation
3738
)
3839
imgMark.background = background
3940
}

app/src/main/java/com/ddd/attendance/check/data/repository/AttendanceRepository.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.ddd.attendance.check.data.repository
33
import com.ddd.attendance.check.data.Repository
44
import com.ddd.attendance.check.data.source.attendance.AttendanceRemoteDataSource
55
import com.ddd.attendance.check.model.Attendance
6+
import com.ddd.attendance.check.model.AttendanceCheckResponse
67
import retrofit2.Response
78
import javax.inject.Inject
89

@@ -13,6 +14,10 @@ class AttendanceRepository @Inject constructor(private val attendanceRemoteDataS
1314
}
1415

1516
suspend fun attendsEnd(): Response<Attendance> {
16-
return attendanceRemoteDataSource.attendsEnd()
17+
return attendanceRemoteDataSource.attendanceEnd()
18+
}
19+
20+
suspend fun attendanceCheck(userId: String, number: String): Response<AttendanceCheckResponse> {
21+
return attendanceRemoteDataSource.attendanceCheck(userId, number)
1722
}
1823
}

app/src/main/java/com/ddd/attendance/check/data/source/attendance/AttendanceRemoteDataSource.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@ package com.ddd.attendance.check.data.source.attendance
22

33
import com.ddd.attendance.check.api.ApiService
44
import com.ddd.attendance.check.model.Attendance
5+
import com.ddd.attendance.check.model.AttendanceCheckResponse
56
import retrofit2.Response
67

78
class AttendanceRemoteDataSource(private val apiService: ApiService) {
89
suspend fun attendanceStart(): Response<Attendance> {
910
return apiService.attendsStart().await()
1011
}
1112

12-
suspend fun attendsEnd(): Response<Attendance> {
13+
suspend fun attendanceEnd(): Response<Attendance> {
1314
return apiService.attendsEnd().await()
1415
}
16+
17+
suspend fun attendanceCheck(userId: String, number: String): Response<AttendanceCheckResponse> {
18+
return apiService.attendsCheck(userId, number).await()
19+
}
1520
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.ddd.attendance.check.model
2+
3+
data class AttendanceCheckResponse(
4+
val status: String? = "",
5+
val userId: Int? = 0,
6+
val message: String? = ""
7+
)

app/src/main/java/com/ddd/attendance/check/vm/MainViewModel.kt

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.ddd.attendance.check.model.Attendance
1414
import com.ddd.attendance.check.utill.SharedPreferences
1515
import com.ddd.attendance.check.utill.SingleLiveEvent
1616
import kotlinx.coroutines.*
17+
import org.json.JSONObject
1718
import java.io.IOException
1819
import javax.inject.Inject
1920

@@ -100,7 +101,7 @@ class MainViewModel @Inject constructor(
100101
}
101102

102103
}
103-
104+
// 관리자 출첵 시작
104105
private suspend fun attendanceStart() {
105106
val response = attendanceRepository.attendanceStart()
106107
if (response.isSuccessful) {
@@ -121,7 +122,7 @@ class MainViewModel @Inject constructor(
121122
job?.join()
122123
}
123124
}
124-
125+
// 관리자 출첵 종료
125126
private suspend fun attendanceEnd() {
126127
val response = attendanceRepository.attendsEnd()
127128
if (response.isSuccessful) {
@@ -131,13 +132,29 @@ class MainViewModel @Inject constructor(
131132
} else _showToastError.postValue(MSG_ALREADY_START)
132133
}
133134

134-
//일반 팀원 출첵 함수
135-
private fun attendanceCheck() {
136-
135+
//일반 팀원 출첵
136+
private suspend fun attendanceCheck() {
137+
GlobalScope.launch {
138+
try {
139+
val response = attendanceRepository.attendanceCheck(
140+
userRepository.getUsers()[0].id.toString(),
141+
editNumberAttendance.get() ?: ""
142+
)
143+
if (response.isSuccessful) {
144+
showDDDDialog(MSG_ATTENDANCE_SUCCESS)
145+
} else {
146+
JSONObject(response.errorBody()?.string()).run {
147+
showDDDDialog(optString(KEY_MSG_OBJ_JSON, ""))
148+
}
149+
}
150+
} catch (e: Exception) {
151+
e.printStackTrace()
152+
}
153+
}
137154
}
138155

139156
private suspend fun Int.countDown() {
140-
for (index in this downTo 1) {
157+
for (index in this downTo 0) {
141158
_isAttendanceNumberCount.postValue(index)
142159
delay(COUNT_DELAY)
143160
}
@@ -148,9 +165,11 @@ class MainViewModel @Inject constructor(
148165
}
149166

150167
companion object {
168+
const val MSG_ATTENDANCE_SUCCESS = "출석체크가 완료되었습니다."
151169
const val MSG_ATTENDANCE_START = "출석체크가 시작되었습니다."
152170
const val MSG_ATTENDANCE_END = "출석체크가 종료되었습니다."
153171
const val MSG_ALREADY_START = "이미 출석 체크가 시작되었습니다.\n 잠시후 다시 시도 해주세요."
172+
const val KEY_MSG_OBJ_JSON = "message"
154173
const val EMPTY_NUMBER = 0
155174
const val COUNT_DELAY: Long = 1000
156175
}

0 commit comments

Comments
 (0)