Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ALL] release: v1.2.0 (#608) #621

Merged
merged 22 commits into from
Nov 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
da935fb
[AN/USER] feat: ν‹°μΌ“ 예맀 λ””μžμΈ μˆ˜μ • (#567) (#570)
SeongHoonC Oct 17, 2023
497123f
[AN/USER] feat: νŽ˜μŠ€νƒ€κ³  μœ μ € μ•± 버전 λ³€κ²½ (#571) (#572)
EmilyCh0 Oct 18, 2023
18fc03c
[BE] chore: 개발 ν™˜κ²½μ˜ μ„œλΈŒ λͺ¨λ“ˆμ„ μ—…λ°μ΄νŠΈ (#573) (#574)
carsago Oct 18, 2023
de405d8
refactor: μ‚¬μš©ν•˜μ§€ μ•Šκ²Œλœ 클래슀λ₯Ό μ œκ±°ν•œλ‹€. (#513)
carsago Oct 19, 2023
b3987db
[BE] feat: νšŒμ›μ˜ 학생 인증 정보 쑰회 API κ΅¬ν˜„ (#496) (#531)
xxeol2 Oct 19, 2023
cab4bb9
[AN/USER] fix: 예맀 μ™„λ£Œ ν™”λ©΄ 버그 ν”½μŠ€ (#575) (#576)
EmilyCh0 Oct 19, 2023
f781fe5
[ALL] ν”„λ‘œμ νŠΈ README μΆ”κ°€ (#552) (#577)
seokjin8678 Oct 19, 2023
8550e89
[AN/USER] refactor: ViewModel Test Code Dispatcher Rule μΆ”κ°€ (#590)
SeongHoonC Oct 24, 2023
c88c5d4
[AN/USER] feat: λ²„νŠΌ 더블 클릭 막기(#584) (#585)
SeongHoonC Oct 24, 2023
e6f0b09
[AN/USER] feat: ν™ˆ ν™”λ©΄μ—μ„œ λ’€λ‘œκ°€κΈ° λˆ„λ₯΄λ©΄ κ³§λ°”λ‘œ μ’…λ£Œλ˜μ§€ μ•ŠλŠ”λ‹€. (#588)
SeongHoonC Oct 24, 2023
452ac25
[AN/USER] feat: SingleLivedata 제거 (#586) (#587)
SeongHoonC Oct 24, 2023
0027082
[AN/USER] feat: 예맀 μ‹€νŒ¨ μΌ€μ΄μŠ€ 처리(#369) (#593)
SeongHoonC Nov 1, 2023
674c8ab
[AN/USER] refactor: λ„€νŠΈμ›Œν¬ μ—λŸ¬ λ‘œκΉ…μ„ ν™•μž₯ν•¨μˆ˜ 없이 직접 μ²˜λ¦¬ν•œλ‹€(#595) (#596)
SeongHoonC Nov 8, 2023
af43162
[BE] feat: μΆ•μ œ 쑰회 필터링 κ΅¬ν˜„(#602) (#603)
BGuga Nov 13, 2023
a21401f
[AN/USER] feat: ν™ˆν™”λ©΄ 필터링 κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€ (#600) (#606)
SeongHoonC Nov 14, 2023
1eeb1c7
[BE] refactor: /stages/{stageId}/tickets API의 N+1을 ν•΄κ²°ν•œλ‹€.(#517) (#578)
seokjin8678 Nov 14, 2023
ef9e4a1
[BE] 도메인 μ—”ν‹°ν‹°μ˜ μ˜ˆμ™Έλ₯Ό μ •μ˜, μ μš©ν•˜κ³  ν…ŒμŠ€νŠΈ νŒ¨ν‚€μ§€ ꡬ쑰λ₯Ό μ •λ¦¬ν•œλ‹€. (#482) (#515)
seokjin8678 Nov 16, 2023
6f846cd
[BE] test properties show sql κ΄€λ ¨ μ„€μ • μ‚­μ œ (#605) (#607)
seokjin8678 Nov 16, 2023
5bf0d29
[BE] refactor: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” AdminService 제거 (#610) (#611)
seokjin8678 Nov 16, 2023
797fdf8
[BE] 학ꡐ 정보 API에 Swagger Annotation을 μΆ”κ°€ (#597) (#598)
carsago Nov 16, 2023
fe7a571
[AN/USER] feat: μΆ•μ œ λͺ©λ‘ ν™”λ©΄ UX κ°œμ„ (#614) (#615)
SeongHoonC Nov 16, 2023
d83682c
[AN] release: v1.2.0 (#618) (#619)
SeongHoonC Nov 16, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 73 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,73 @@
# 2023-festa-go
# νŽ˜μŠ€νƒ€κ³ , λŒ€ν•™ μΆ•μ œλ₯Ό λ”μš± 즐겁게!
> λŒ€ν•™ μΆ•μ œ μ€„μ„œκΈ° 및 μΆ•μ œ 정보 제곡 μ„œλΉ„μŠ€ "νŽ˜μŠ€νƒ€κ³ "

![](https://github.com/woowacourse-teams/2023-festa-go/assets/71129059/55f0d73b-c032-4c15-9cdf-40a560af948f)

λ‹€λ“€ μ¦κ±°μ›Œ ν•˜λŠ” λŒ€ν•™ μΆ•μ œμ΄μ§€λ§Œ, ν•œ 가지 κ±±μ •λ˜λŠ” 점이 μžˆμŠ΅λ‹ˆλ‹€. λ°”λ‘œ β€˜μ€„ μ„œκΈ°β€™μž…λ‹ˆλ‹€. ν‹°μΌ“νŒ…κ³Ό 예맀λ₯Ό μœ„ν•œ μ§€λ£¨ν•œ μ€„μ„œκΈ° 과정은 μΆ•μ œμ˜ 재미λ₯Ό λ°˜κ°μ‹œν‚€λŠ” μš”μΈμž…λ‹ˆλ‹€.

νŽ˜μŠ€νƒ€κ³ λŠ” μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜μ—¬, 우리 λͺ¨λ‘κ°€ λŒ€ν•™ μΆ•μ œλ₯Ό 더 νŽΈλ¦¬ν•˜κ²Œ 즐기기 μœ„ν•΄ λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.

νŽ˜μŠ€νƒ€κ³ λ₯Ό 톡해 티켓을 μ˜ˆλ§€ν•˜κΈ° μœ„ν•΄ λΆˆνŽΈν•œ 쀄 μ„œκΈ° 과정을 κ±°μΉ  ν•„μš” 없이 온라인으둜 티켓을 μ˜ˆλ§€ν•˜κ³ , λ³΅μž‘ν•œ 절차 없이 슀마트폰의 QR μ½”λ“œλ§ŒμœΌλ‘œ μž…μž₯을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<img width="1192" alt="image" src="https://github.com/woowacourse-teams/2023-festa-go/assets/71129059/8e761c81-6066-4f93-89af-b9d2d22eb577">

<br/>
<br/>

**β–· πŸ“² λ‹€μš΄λ‘œλ“œ |** [PlayStore](https://play.google.com/store/apps/details?id=com.festago.festago)

**β–· πŸ“ νŒ€λΈ”λ‘œκ·Έ |** [Festago νŒ€λΈ”λ‘œκ·Έ](https://festago.github.io/)

**β–· πŸ“§ μ—°λ½μ²˜ |** [email protected]

## Android
<div align="center">
<h3>ν”„λ‘œμ νŠΈ μ•„ν‚€ν…μ²˜</h3>
<img width="955" src="https://github.com/woowacourse-teams/2023-festa-go/assets/67777523/2fc5e26f-c628-41fe-b2d3-5b74da794fdc">
</div>

<div align="center">
<h3>기술 μŠ€νƒ</h3>
<img width="500" src="https://github.com/woowacourse-teams/2023-festa-go/assets/67777523/90c3eec2-ada6-4c83-a915-0ab3754ab40c">
</div>

## Backend
<div align="center">
<h3>λ°±μ—”λ“œ 인프라 μ•„ν‚€ν…μ²˜</h3>
<img width="800" src="https://github.com/woowacourse-teams/2023-festa-go/assets/103228463/aad084a6-c1ca-41fa-89c0-f2d2371e59cc">
</div>


<div align="center">
<h3>기술 μŠ€νƒ</h3>
<img src="https://img.shields.io/badge/Java17-000000?style=flat-square&logo=java&color=F40D12">
<img src="https://img.shields.io/badge/Spring_Boot_3-0?style=flat-square&logo=spring-boot&logoColor=white&color=%236DB33F">
<img src="https://img.shields.io/badge/MySQL_8-0?style=flat-square&logo=mysql&logoColor=white&color=4479A1">
<img src="https://img.shields.io/badge/Nginx-0?style=flat-square&logo=nginx&logoColor=white&color=009639">
<img src="https://img.shields.io/badge/Hibernate-0?style=flat-square&logo=hibernate&logoColor=white&color=%2359666C">
<img src="https://img.shields.io/badge/Amazon_EC2-0?style=flat-square&logo=amazon-ec2&logoColor=white&color=%23FF9900">
<img src="https://img.shields.io/badge/Flyway-0?style=flat-square&logo=flyway&color=%23CC0200">
<br/>
<img src="https://img.shields.io/badge/Amazon_CloudWatch-0?style=flat-square&logo=amazon-cloudwatch&logoColor=white&color=%23FF4F8B">
<img src="https://img.shields.io/badge/OAuth2-0?style=flat-square&logo=oauth2&logoColor=white&color=%23000000">
<img src="https://img.shields.io/badge/Gradle-0?style=flat-square&logo=gradle&logoColor=white&color=%2302303A">
<img src="https://img.shields.io/badge/Swagger-0?style=flat-square&logo=Swagger&logoColor=white&color=%2385EA2D">
<img src="https://img.shields.io/badge/GitHub%20Actions-0?style=flat-square&logo=GitHub%20Actions&logoColor=white&color=%232088FF">
<img src="https://img.shields.io/badge/JUnit5-0?style=JUnit5-square&logo=junit5&logoColor=white&color=%2325A162">
<img src="https://img.shields.io/badge/Jenkins-0?style=flat-square&logo=Jenkins&logoColor=white&color=%23D24939">
</div>
<br/>

## πŸŽ‰ μΆ•μ œ μŠ€νƒœν”„λ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€

|BackEnd|BackEnd|BackEnd|BackEnd|Android|Android|Android|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|![](https://avatars.githubusercontent.com/u/103228463?v=4&size=100)|![](https://avatars.githubusercontent.com/u/116627736?v=4&size=100)|![](https://avatars.githubusercontent.com/u/71129059?v=4&size=100)|![](https://avatars.githubusercontent.com/u/100915276?v=4&size=100)|![](https://avatars.githubusercontent.com/u/108349655?v=4&size=100)|![](https://avatars.githubusercontent.com/u/67777523?v=4&size=100)|![](https://avatars.githubusercontent.com/u/37167652?v=4&size=100)|
|[ν‘Έμš°](https://github.com/BGuga)|[κΈ€λ Œ](https://github.com/seokjin8678)|[애쉬](https://github.com/xxeol2)|[였리](https://github.com/carsago)|[λ² λ₯΄](https://github.com/SeongHoonC)|[ν•΄μ‹œ](https://github.com/EmilyCh0)|[아크](https://github.com/re4rk)|

<br>

## ⛔️ 곡연 κ΄€λžŒμ‹œ μ£Όμ˜μ‚¬ν•­
> νŽ˜μŠ€νƒ€κ³  νŒ€μ˜ κ·ΈλΌμš΄λ“œ 룰을 μ†Œκ°œν•©λ‹ˆλ‹€.

<img width="787" alt="image" src="https://github.com/woowacourse-teams/2023-festa-go/assets/71129059/85c4d4d0-24fa-4602-9eed-a9a2e4a6482e">
4 changes: 2 additions & 2 deletions android/festago/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ android {
applicationId = "com.festago.festago"
minSdk = 28
targetSdk = 34
versionCode = 3
versionName = "1.0.1"
versionCode = 7
versionName = "1.2.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,18 @@ import com.festago.festago.data.service.FestivalRetrofitService
import com.festago.festago.data.util.onSuccessOrCatch
import com.festago.festago.data.util.runCatchingResponse
import com.festago.festago.model.Festival
import com.festago.festago.model.FestivalFilter
import com.festago.festago.model.Reservation
import com.festago.festago.repository.FestivalRepository
import javax.inject.Inject

class FestivalDefaultRepository @Inject constructor(
private val festivalRetrofitService: FestivalRetrofitService,
) : FestivalRepository {
override suspend fun loadFestivals(): Result<List<Festival>> =
runCatchingResponse { festivalRetrofitService.getFestivals() }
.onSuccessOrCatch { it.toDomain() }
override suspend fun loadFestivals(festivalFilter: FestivalFilter): Result<List<Festival>> =
runCatchingResponse {
festivalRetrofitService.getFestivals(festivalFilter.name)
}.onSuccessOrCatch { it.toDomain() }

override suspend fun loadFestivalDetail(festivalId: Long): Result<Reservation> =
runCatchingResponse { festivalRetrofitService.getFestivalDetail(festivalId) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.festago.festago.data.dto.ReservedTicketRequest
import com.festago.festago.data.service.TicketRetrofitService
import com.festago.festago.data.util.onSuccessOrCatch
import com.festago.festago.data.util.runCatchingResponse
import com.festago.festago.model.ErrorCode
import com.festago.festago.model.ReservedTicket
import com.festago.festago.model.Ticket
import com.festago.festago.model.TicketCode
Expand Down Expand Up @@ -31,9 +32,16 @@ class TicketDefaultRepository @Inject constructor(
.onSuccessOrCatch { it.toDomain() }

override suspend fun reserveTicket(ticketId: Int): Result<ReservedTicket> =
runCatchingResponse {
ticketRetrofitService.postReserveTicket(
ReservedTicketRequest(ticketId),
)
}.onSuccessOrCatch { it.toDomain() }
runCatchingResponse { ticketRetrofitService.postReserveTicket(ReservedTicketRequest(ticketId)) }
.onSuccessOrCatch { it.toDomain() }
.onFailure { throwable ->
val message = throwable.message ?: "ERROR_UNKNOWN"
val error: Throwable = when {
"NEED_STUDENT_VERIFICATION" in message -> ErrorCode.NEED_STUDENT_VERIFICATION()
"RESERVE_TICKET_OVER_AMOUNT" in message -> ErrorCode.RESERVE_TICKET_OVER_AMOUNT()
"TICKET_SOLD_OUT" in message -> ErrorCode.TICKET_SOLD_OUT()
else -> throwable
}
return Result.failure(error)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@ import com.festago.festago.data.dto.ReservationFestivalResponse
import retrofit2.Response
import retrofit2.http.GET
import retrofit2.http.Path
import retrofit2.http.Query

interface FestivalRetrofitService {
@GET("/festivals")
suspend fun getFestivals(): Response<FestivalsResponse>
suspend fun getFestivals(
@Query("festivalFilter") festivalFilter: String,
): Response<FestivalsResponse>

@GET("/festivals/{festivalId}")
suspend fun getFestivalDetail(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.activity.addCallback
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
Expand Down Expand Up @@ -37,6 +38,7 @@ class HomeActivity : AppCompatActivity() {
initView()
initObserve()
initResultLauncher()
initBackPressedDispatcher()
}

private fun initResultLauncher() {
Expand Down Expand Up @@ -129,6 +131,22 @@ class HomeActivity : AppCompatActivity() {
resultLauncher.launch(SignInActivity.getIntent(this))
}

private fun initBackPressedDispatcher() {
var backPressedTime = START_BACK_PRESSED_TIME
onBackPressedDispatcher.addCallback {
if ((System.currentTimeMillis() - backPressedTime) > FINISH_BACK_PRESSED_TIME) {
backPressedTime = System.currentTimeMillis()
Toast.makeText(
this@HomeActivity,
getString(R.string.home_back_pressed),
Toast.LENGTH_SHORT,
).show()
} else {
finish()
}
}
}

private inline fun <reified T : Fragment> changeFragment() {
val tag = T::class.java.name
val fragmentTransaction = supportFragmentManager.beginTransaction()
Expand All @@ -150,6 +168,8 @@ class HomeActivity : AppCompatActivity() {
}

companion object {
private const val START_BACK_PRESSED_TIME = 0L
private const val FINISH_BACK_PRESSED_TIME = 3000L
fun getIntent(context: Context): Intent {
return Intent(context, HomeActivity::class.java)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.GridLayoutManager
import com.festago.festago.R
import com.festago.festago.databinding.FragmentFestivalListBinding
import com.festago.festago.model.FestivalFilter
import com.festago.festago.presentation.ui.home.ticketlist.TicketListFragment
import com.festago.festago.presentation.ui.ticketreserve.TicketReserveActivity
import com.festago.festago.presentation.util.repeatOnStarted
Expand Down Expand Up @@ -59,6 +60,15 @@ class FestivalListFragment : Fragment(R.layout.fragment_festival_list) {
adapter = FestivalListAdapter()
binding.rvFestivalList.adapter = adapter

initFestivalListSpanSize()
initRefresh()
initFestivalFilters()
if (vm.uiState.value is FestivalListUiState.Loading) {
loadFestivalsBy(binding.cgFilterOption.checkedChipId)
}
}

private fun initFestivalListSpanSize() {
binding.rvFestivalList.layoutManager.apply {
if (this is GridLayoutManager) {
val spanSize = (resources.displayMetrics.widthPixels.dp / 160)
Expand All @@ -69,15 +79,29 @@ class FestivalListFragment : Fragment(R.layout.fragment_festival_list) {
}
}
}
}

vm.loadFestivals()

private fun initRefresh() {
binding.srlFestivalList.setOnRefreshListener {
vm.loadFestivals()
loadFestivalsBy(binding.cgFilterOption.checkedChipId)
binding.srlFestivalList.isRefreshing = false
}
}

private fun initFestivalFilters() {
binding.cgFilterOption.setOnCheckedStateChangeListener { group, _ ->
loadFestivalsBy(checkedChipId = group.checkedChipId)
}
}

private fun loadFestivalsBy(checkedChipId: Int) {
when (checkedChipId) {
R.id.chipProgress -> vm.loadFestivals(FestivalFilter.PROGRESS)
R.id.chipPlanned -> vm.loadFestivals(FestivalFilter.PLANNED)
R.id.chipEnd -> vm.loadFestivals(FestivalFilter.END)
}
}

private fun updateUi(uiState: FestivalListUiState) {
when (uiState) {
is FestivalListUiState.Loading,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ sealed interface FestivalListUiState {
object Loading : FestivalListUiState

data class Success(
val festivals: List<FestivalItemUiState>
val festivals: List<FestivalItemUiState>,
) : FestivalListUiState {
val hasFestival get() = festivals.isNotEmpty()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.festago.festago.analytics.AnalyticsHelper
import com.festago.festago.analytics.logNetworkFailure
import com.festago.festago.model.FestivalFilter
import com.festago.festago.presentation.ui.home.festivallist.FestivalListEvent.ShowTicketReserve
import com.festago.festago.repository.FestivalRepository
import dagger.hilt.android.lifecycle.HiltViewModel
Expand All @@ -28,9 +29,9 @@ class FestivalListViewModel @Inject constructor(
private val _event = MutableSharedFlow<FestivalListEvent>()
val event: SharedFlow<FestivalListEvent> = _event.asSharedFlow()

fun loadFestivals() {
fun loadFestivals(festivalFilter: FestivalFilter) {
viewModelScope.launch {
festivalRepository.loadFestivals()
festivalRepository.loadFestivals(festivalFilter)
.onSuccess {
_uiState.value = FestivalListUiState.Success(
festivals = it.map { festival ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.festago.festago.databinding.ActivityStudentVerificationBinding
import com.festago.festago.presentation.ui.customview.OkDialogFragment
import com.festago.festago.presentation.ui.home.HomeActivity
import com.festago.festago.presentation.util.repeatOnStarted
import com.festago.festago.presentation.util.setOnSingleClickListener
import dagger.hilt.android.AndroidEntryPoint
import java.time.LocalTime
import java.time.format.DateTimeFormatter
Expand Down Expand Up @@ -43,7 +44,7 @@ class StudentVerificationActivity : AppCompatActivity() {
}

private fun initRequestVerificationCodeBtn(schoolId: Long) {
binding.btnRequestVerificationCode.setOnClickListener {
binding.btnRequestVerificationCode.setOnSingleClickListener {
vm.sendVerificationCode(binding.tieUserName.text.toString(), schoolId)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.ConcatAdapter
import com.festago.festago.R
import com.festago.festago.databinding.ActivityTicketReserveBinding
import com.festago.festago.model.ErrorCode
import com.festago.festago.model.ReservationTicket
import com.festago.festago.model.ReservedTicket
import com.festago.festago.presentation.ui.customview.OkDialogFragment
Expand Down Expand Up @@ -75,7 +76,7 @@ class TicketReserveActivity : AppCompatActivity() {
)

is ReserveTicketSuccess -> handleReserveTicketSuccess(event.reservedTicket)
is ReserveTicketFailed -> handleReserveTicketFailed()
is ReserveTicketFailed -> handleReserveTicketFailed(event.errorCode)
is ShowSignIn -> handleShowSignIn()
}

Expand Down Expand Up @@ -113,8 +114,14 @@ class TicketReserveActivity : AppCompatActivity() {
finish()
}

private fun handleReserveTicketFailed() {
OkDialogFragment.newInstance("μ˜ˆμ•½μ— μ‹€νŒ¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€.")
private fun handleReserveTicketFailed(errorCode: ErrorCode) {
val message: String = when (errorCode) {
is ErrorCode.TICKET_SOLD_OUT -> getString(R.string.ticket_reserve_dialog_sold_out)
is ErrorCode.RESERVE_TICKET_OVER_AMOUNT -> getString(R.string.ticket_reserve_dialog_over_amount)
is ErrorCode.NEED_STUDENT_VERIFICATION -> getString(R.string.ticket_reserve_dialog_need_student_verification)
is ErrorCode.UNKNOWN -> getString(R.string.ticket_reserve_dialog_unknown)
}
OkDialogFragment.newInstance(message)
.show(supportFragmentManager, OkDialogFragment::class.java.name)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.festago.festago.presentation.ui.ticketreserve

import com.festago.festago.model.ErrorCode
import com.festago.festago.model.ReservationTicket
import com.festago.festago.model.ReservedTicket
import java.time.LocalDateTime
Expand All @@ -11,6 +12,6 @@ sealed interface TicketReserveEvent {
) : TicketReserveEvent

class ReserveTicketSuccess(val reservedTicket: ReservedTicket) : TicketReserveEvent
object ReserveTicketFailed : TicketReserveEvent
class ReserveTicketFailed(val errorCode: ErrorCode) : TicketReserveEvent
object ShowSignIn : TicketReserveEvent
}
Loading
Loading