Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/dev' into feat/#459
Browse files Browse the repository at this point in the history
# Conflicts:
#	backend/src/main/java/com/festago/festival/application/FestivalService.java
#	backend/src/main/java/com/festago/festival/domain/Festival.java
#	backend/src/main/java/com/festago/presentation/AdminController.java
#	backend/src/main/java/com/festago/presentation/StageController.java
#	backend/src/main/java/com/festago/school/application/SchoolService.java
#	backend/src/main/java/com/festago/school/domain/School.java
#	backend/src/main/java/com/festago/stage/application/StageService.java
#	backend/src/main/java/com/festago/stage/domain/Stage.java
#	backend/src/test/java/com/festago/domain/FestivalTest.java
#	backend/src/test/java/com/festago/domain/StageTest.java
#	backend/src/test/java/com/festago/domain/TicketTest.java
  • Loading branch information
seokjin8678 committed Oct 5, 2023
2 parents e135dc7 + 59da4a1 commit 3458986
Show file tree
Hide file tree
Showing 118 changed files with 1,666 additions and 322 deletions.
5 changes: 4 additions & 1 deletion android/festago/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
android:theme="@style/Theme.Festago"
android:usesCleartextTraffic="true"
tools:targetApi="31">
<activity
android:name=".presentation.ui.selectschool.SelectSchoolActivity"
android:exported="false" />
<activity
android:name=".presentation.ui.studentverification.StudentVerificationActivity"
android:exported="false" />
Expand Down Expand Up @@ -61,4 +64,4 @@
android:exported="false" />
</application>

</manifest>
</manifest>
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.festago.festago.data.di

import com.festago.festago.data.repository.ReservationTicketDefaultRepository
import com.festago.festago.data.repository.SchoolDefaultRepository
import com.festago.festago.data.repository.StudentVerificationDefaultRepository
import com.festago.festago.data.repository.UserDefaultRepository
import com.festago.festago.repository.ReservationTicketRepository
import com.festago.festago.repository.SchoolRepository
import com.festago.festago.repository.StudentVerificationRepository
import com.festago.festago.repository.UserRepository
import dagger.Binds
Expand All @@ -26,5 +28,9 @@ interface ViewModelScopeModule {

@Binds
@ViewModelScoped
fun binsUserDefaultRepository(userRepository: UserDefaultRepository): UserRepository
fun bindsUserDefaultRepository(userRepository: UserDefaultRepository): UserRepository

@Binds
@ViewModelScoped
fun bindsSelectSchoolRepository(schoolRepository: SchoolDefaultRepository): SchoolRepository
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@ package com.festago.festago.data.di.singletonscope

import com.festago.festago.data.repository.AuthDefaultRepository
import com.festago.festago.data.repository.FestivalDefaultRepository
import com.festago.festago.data.repository.SchoolDefaultRepository
import com.festago.festago.data.repository.TicketDefaultRepository
import com.festago.festago.data.repository.TokenDefaultRepository
import com.festago.festago.repository.AuthRepository
import com.festago.festago.repository.FestivalRepository
import com.festago.festago.repository.SchoolRepository
import com.festago.festago.repository.TicketRepository
import com.festago.festago.repository.TokenRepository
import dagger.Binds
Expand All @@ -30,10 +28,6 @@ interface RepositoryModule {
@Singleton
fun bindsFestivalDefaultRepository(festivalRepository: FestivalDefaultRepository): FestivalRepository

@Binds
@Singleton
fun bindsSchoolDefaultRepository(schoolRepository: SchoolDefaultRepository): SchoolRepository

@Binds
@Singleton
fun bindsTicketDefaultRepository(ticketRepository: TicketDefaultRepository): TicketRepository
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.festago.festago.data.di.singletonscope

import com.festago.festago.data.service.FestivalRetrofitService
import com.festago.festago.data.service.ReservationTicketRetrofitService
import com.festago.festago.data.service.SchoolRetrofitService
import com.festago.festago.data.service.StudentVerificationRetrofitService
import com.festago.festago.data.service.TicketRetrofitService
import com.festago.festago.data.service.TokenRetrofitService
Expand Down Expand Up @@ -64,4 +65,12 @@ object ServiceModule {
): StudentVerificationRetrofitService {
return retrofit.create(StudentVerificationRetrofitService::class.java)
}

@Provides
@Singleton
fun providesSchoolRetrofitService(
@NormalRetrofitQualifier retrofit: Retrofit
): SchoolRetrofitService {
return retrofit.create(SchoolRetrofitService::class.java)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.festago.festago.data.dto

import com.festago.festago.model.School
import kotlinx.serialization.Serializable

@Serializable
data class SchoolResponse(
val id: Int,
val domain: String,
val name: String
) {
fun toDomain(): School = School(
id = id.toLong(),
domain = domain,
name = name
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.festago.festago.data.dto

import com.festago.festago.model.School
import kotlinx.serialization.Serializable

@Serializable
data class SchoolsResponse(
val schools: List<SchoolResponse>
) {
fun toDomain(): List<School> = schools.map { it.toDomain() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ import kotlinx.serialization.Serializable

@Serializable
data class SendVerificationRequest(
val userName: String,
val schoolId: Int,
val username: String,
val schoolId: Long,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.festago.festago.data.dto

import com.festago.festago.model.StudentVerificationCode
import kotlinx.serialization.Serializable

@Serializable
data class VerificationRequest(
val code: String,
) {
companion object {
fun from(code: StudentVerificationCode) = VerificationRequest(code.value)
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
package com.festago.festago.data.repository

import com.festago.festago.data.service.SchoolRetrofitService
import com.festago.festago.data.util.runCatchingWithErrorHandler
import com.festago.festago.model.School
import com.festago.festago.repository.SchoolRepository
import javax.inject.Inject

class SchoolDefaultRepository @Inject constructor() : SchoolRepository {
class SchoolDefaultRepository @Inject constructor(
private val schoolRetrofitService: SchoolRetrofitService
) : SchoolRepository {

override suspend fun loadSchools(): Result<List<School>> {
schoolRetrofitService.getSchools()
.runCatchingWithErrorHandler()
.getOrElse { error -> return Result.failure(error) }
.let { return Result.success(it.toDomain()) }
}

override suspend fun loadSchoolEmail(schoolId: Long): Result<String> {
// TODO: API 연동 작업 필요
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.festago.festago.data.repository

import com.festago.festago.data.dto.SendVerificationRequest
import com.festago.festago.data.dto.VerificationRequest
import com.festago.festago.data.service.StudentVerificationRetrofitService
import com.festago.festago.data.util.runCatchingWithErrorHandler
import com.festago.festago.model.StudentVerificationCode
import com.festago.festago.repository.StudentVerificationRepository
import javax.inject.Inject
Expand All @@ -10,12 +13,18 @@ class StudentVerificationDefaultRepository @Inject constructor(
) : StudentVerificationRepository {

override suspend fun sendVerificationCode(userName: String, schoolId: Long): Result<Unit> {
// TODO: API 연동 작업 필요
return Result.success(Unit)
studentVerificationRetrofitService.sendVerificationCode(
SendVerificationRequest(userName, schoolId),
).runCatchingWithErrorHandler()
.getOrElse { error -> return Result.failure(error) }
.let { return Result.success(Unit) }
}

override suspend fun requestVerificationCodeConfirm(code: StudentVerificationCode): Result<Unit> {
// TODO: API 연동 작업 필요
return Result.success(Unit)
studentVerificationRetrofitService.requestVerification(
VerificationRequest.from(code),
).runCatchingWithErrorHandler()
.getOrElse { error -> return Result.failure(error) }
.let { return Result.success(Unit) }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.festago.festago.data.service

import com.festago.festago.data.dto.SchoolsResponse
import retrofit2.Response
import retrofit2.http.GET

interface SchoolRetrofitService {

@GET("/schools")
suspend fun getSchools(): Response<SchoolsResponse>
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.festago.festago.data.service

import com.festago.festago.data.dto.SendVerificationRequest
import com.festago.festago.data.dto.VerificationRequest
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.POST
Expand All @@ -10,4 +11,9 @@ interface StudentVerificationRetrofitService {
suspend fun sendVerificationCode(
@Body sendVerificationRequest: SendVerificationRequest,
): Response<Unit>

@POST("/students/verification")
suspend fun requestVerification(
@Body verificationRequest: VerificationRequest,
): Response<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import androidx.fragment.app.viewModels
import com.festago.festago.R
import com.festago.festago.databinding.FragmentMyPageBinding
import com.festago.festago.presentation.ui.home.HomeActivity
import com.festago.festago.presentation.ui.selectschool.SelectSchoolActivity
import com.festago.festago.presentation.ui.signin.SignInActivity
import com.festago.festago.presentation.ui.studentverification.StudentVerificationActivity
import com.festago.festago.presentation.ui.tickethistory.TicketHistoryActivity
import dagger.hilt.android.AndroidEntryPoint

Expand Down Expand Up @@ -104,9 +104,9 @@ class MyPageFragment : Fragment(R.layout.fragment_my_page) {
binding.srlMyPage.setOnRefreshListener {
vm.loadUserInfo()
}
// TODO: 학교 선택 화면 변경 필요

binding.tvSchoolAuthorization.setOnClickListener {
startActivity(StudentVerificationActivity.getIntent(requireContext(), 1L))
startActivity(SelectSchoolActivity.getIntent(requireContext()))
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.festago.festago.presentation.ui.selectschool

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.widget.ArrayAdapter
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import com.festago.festago.R
import com.festago.festago.databinding.ActivitySelectSchoolBinding
import com.festago.festago.presentation.ui.studentverification.StudentVerificationActivity
import com.festago.festago.presentation.util.repeatOnStarted
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class SelectSchoolActivity : AppCompatActivity() {

private val binding: ActivitySelectSchoolBinding by lazy {
ActivitySelectSchoolBinding.inflate(layoutInflater)
}

private val vm: SelectSchoolViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initBinding()
initObserve()
initView()
}

private fun initBinding() {
setContentView(binding.root)
binding.lifecycleOwner = this
binding.vm = vm
}

private fun initObserve() {
repeatOnStarted(this) {
vm.uiState.collect { uiState ->
handleUiState(uiState)
}
}
repeatOnStarted(this) {
vm.event.collect { event ->
handleEvent(event)
}
}
}

private fun initView() {
vm.loadSchools()
}

private fun handleUiState(uiState: SelectSchoolUiState) {
binding.uiState = uiState
when (uiState) {
is SelectSchoolUiState.Loading, is SelectSchoolUiState.Error -> Unit
is SelectSchoolUiState.Success -> handleSuccess(uiState)
}
}

private fun handleSuccess(uiState: SelectSchoolUiState.Success) {
val adapter =
ArrayAdapter(this, R.layout.item_select_school, uiState.schools.map { it.name })
binding.actvSelectSchool.setAdapter(adapter)
binding.actvSelectSchool.setOnItemClickListener { _, _, position, _ ->
val selectedSchool = uiState.schools.firstOrNull {
it.name == adapter.getItem(position)
}
selectedSchool?.let { vm.selectSchool(it.id) }
}
}

private fun handleEvent(event: SelectSchoolEvent) {
when (event) {
is SelectSchoolEvent.ShowStudentVerification -> {
startActivity(StudentVerificationActivity.getIntent(this, event.schoolId))
}
}
}

companion object {
fun getIntent(context: Context): Intent {
return Intent(context, SelectSchoolActivity::class.java)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.festago.festago.presentation.ui.selectschool

interface SelectSchoolEvent {
class ShowStudentVerification(val schoolId: Long) : SelectSchoolEvent
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.festago.festago.presentation.ui.selectschool

import com.festago.festago.model.School

interface SelectSchoolUiState {
object Loading : SelectSchoolUiState

data class Success(
val schools: List<School>,
val selectedSchoolId: Long? = null
) : SelectSchoolUiState {
val schoolSelected = selectedSchoolId != null
}

object Error : SelectSchoolUiState

val enableNext get() = (this is Success) && schoolSelected
val shouldShowSuccess get() = this is Success
val shouldShowLoading get() = this is Loading
val shouldShowError get() = this is Error
}
Loading

0 comments on commit 3458986

Please sign in to comment.