From 3782f2fc972656b0a6bdba00c984fcf846083720 Mon Sep 17 00:00:00 2001 From: Nymos Date: Wed, 19 Feb 2025 15:47:18 +0300 Subject: [PATCH] Half-done open method Fix unauthorized profile access Fix VisitCard date formatting? --- .../src/main/java/com/nto/data/models/ScanResult.kt | 7 +++++++ .../java/com/nto/data/models/cards/VisitCardDTO.kt | 2 +- .../java/com/nto/data/repository/DataRepository.kt | 2 ++ .../com/nto/data/repository/DataRepositoryImpl.kt | 13 ++++++++++++- .../src/main/java/com/nto/data/utils/RetrofitApi.kt | 3 +++ .../com/nto/domain/repository/DomainRepository.kt | 2 ++ .../nto/domain/repository/DomainRepositoryImpl.kt | 5 +++++ .../main/java/com/nto/domain/usecase/ScanUseCase.kt | 4 ++++ .../main/java/com/nto/presentation/MainActivity.kt | 2 +- .../com/nto/presentation/composable/Navigation.kt | 2 +- .../nto/presentation/composable/cards/VisitCard.kt | 3 ++- .../screens/profileScreen/ProfileScreen.kt | 2 +- .../screens/profileScreen/ProfileState.kt | 3 ++- 13 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 data/src/main/java/com/nto/data/models/ScanResult.kt create mode 100644 domain/src/main/java/com/nto/domain/usecase/ScanUseCase.kt diff --git a/data/src/main/java/com/nto/data/models/ScanResult.kt b/data/src/main/java/com/nto/data/models/ScanResult.kt new file mode 100644 index 0000000..1b1d6dc --- /dev/null +++ b/data/src/main/java/com/nto/data/models/ScanResult.kt @@ -0,0 +1,7 @@ +package com.nto.data.models + +enum class ScanResult { + OK, + CANCELED, + ERROR +} \ No newline at end of file diff --git a/data/src/main/java/com/nto/data/models/cards/VisitCardDTO.kt b/data/src/main/java/com/nto/data/models/cards/VisitCardDTO.kt index 274bf31..edd1efd 100644 --- a/data/src/main/java/com/nto/data/models/cards/VisitCardDTO.kt +++ b/data/src/main/java/com/nto/data/models/cards/VisitCardDTO.kt @@ -10,7 +10,7 @@ enum class VisitType { data class VisitCardDTO( val name: String = "", val id: Long = Long.MAX_VALUE, - val dateString: LocalDateTime = LocalDateTime.now(), + val date: LocalDateTime = LocalDateTime.now(), val visitType: VisitType = VisitType.CARD_ENTRY, val qrCode: QRDTO = QRDTO() ) diff --git a/data/src/main/java/com/nto/data/repository/DataRepository.kt b/data/src/main/java/com/nto/data/repository/DataRepository.kt index 8a4f93f..2501ba9 100644 --- a/data/src/main/java/com/nto/data/repository/DataRepository.kt +++ b/data/src/main/java/com/nto/data/repository/DataRepository.kt @@ -1,6 +1,7 @@ package com.nto.data.repository import com.nto.data.models.LoginResult +import com.nto.data.models.ScanResult import com.nto.data.models.UserDTO import com.nto.data.models.cards.VisitCardDTO import com.nto.data.models.cards.VisitCardWrapper @@ -12,4 +13,5 @@ interface DataRepository { suspend fun getLogin(): String suspend fun getInfo(): UserDTO suspend fun getVisits(id: String?): VisitCardWrapper + suspend fun open(): ScanResult } \ No newline at end of file diff --git a/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt b/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt index 8baed86..a1dfb16 100644 --- a/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt +++ b/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt @@ -3,6 +3,7 @@ package com.nto.data.repository import android.content.Context import android.content.Context.MODE_PRIVATE import com.nto.data.models.LoginResult +import com.nto.data.models.ScanResult import com.nto.data.models.UserDTO import com.nto.data.models.cards.VisitCardWrapper import com.nto.data.utils.Provider @@ -22,7 +23,8 @@ class DataRepositoryImpl @Inject constructor(@ApplicationContext private val con } override suspend fun saveToken(token: String, login: String) { - context.getSharedPreferences("auth", MODE_PRIVATE).edit().putString("token", token).putString("login", login).apply() + context.getSharedPreferences("auth", MODE_PRIVATE).edit().putString("token", token) + .putString("login", login).apply() } override suspend fun getToken(): String { @@ -48,4 +50,13 @@ class DataRepositoryImpl @Inject constructor(@ApplicationContext private val con } } + override suspend fun open(): ScanResult { + val result = Provider.provideRetrofit().open(getToken()).execute() + return when (result.code()) { + 200 -> ScanResult.OK + 400, 403 -> ScanResult.CANCELED + else -> ScanResult.ERROR + } + } + } \ No newline at end of file diff --git a/data/src/main/java/com/nto/data/utils/RetrofitApi.kt b/data/src/main/java/com/nto/data/utils/RetrofitApi.kt index 7e1ba34..cc3b822 100644 --- a/data/src/main/java/com/nto/data/utils/RetrofitApi.kt +++ b/data/src/main/java/com/nto/data/utils/RetrofitApi.kt @@ -16,4 +16,7 @@ interface RetrofitApi { @GET("visits/{login}/visits") fun getVisits(@Header("Authorization") token: String): Call> + + @GET("visit/open") + fun open(@Header("Authorization") token: String): Call } \ No newline at end of file diff --git a/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt b/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt index b100997..d594e9d 100644 --- a/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt +++ b/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt @@ -1,6 +1,7 @@ package com.nto.domain.repository import com.nto.data.models.LoginResult +import com.nto.data.models.ScanResult import com.nto.data.models.UserDTO import com.nto.data.models.cards.VisitCardWrapper @@ -10,4 +11,5 @@ interface DomainRepository { suspend fun getToken(): String? suspend fun getInfo(): UserDTO suspend fun getVisits(id: String): VisitCardWrapper + suspend fun open(): ScanResult } \ No newline at end of file diff --git a/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt b/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt index b9ef572..407b71a 100644 --- a/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt +++ b/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt @@ -1,6 +1,7 @@ package com.nto.domain.repository import com.nto.data.models.LoginResult +import com.nto.data.models.ScanResult import com.nto.data.models.UserDTO import com.nto.data.models.cards.VisitCardWrapper import com.nto.data.repository.DataRepositoryImpl @@ -47,4 +48,8 @@ class DomainRepositoryImpl @Inject constructor(private val dataRepositoryImpl: D } } + override suspend fun open(): ScanResult { + return dataRepositoryImpl.open() + } + } \ No newline at end of file diff --git a/domain/src/main/java/com/nto/domain/usecase/ScanUseCase.kt b/domain/src/main/java/com/nto/domain/usecase/ScanUseCase.kt new file mode 100644 index 0000000..a2aab23 --- /dev/null +++ b/domain/src/main/java/com/nto/domain/usecase/ScanUseCase.kt @@ -0,0 +1,4 @@ +package com.nto.domain.usecase + +class ScanUseCase { +} \ No newline at end of file diff --git a/presentation/src/main/java/com/nto/presentation/MainActivity.kt b/presentation/src/main/java/com/nto/presentation/MainActivity.kt index 42acf3b..19c82bc 100644 --- a/presentation/src/main/java/com/nto/presentation/MainActivity.kt +++ b/presentation/src/main/java/com/nto/presentation/MainActivity.kt @@ -26,7 +26,7 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) setContent { NTOTheme { - //XML SUCKS! We use Jetpack Compose btw :>- + //XML SUCKS! We use Jetpack Compose btw :> this.window.statusBarColor = NTOTheme.colors.primaryText.toArgb() Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> val navController = rememberNavController() diff --git a/presentation/src/main/java/com/nto/presentation/composable/Navigation.kt b/presentation/src/main/java/com/nto/presentation/composable/Navigation.kt index 1bbb8f3..58fbed4 100644 --- a/presentation/src/main/java/com/nto/presentation/composable/Navigation.kt +++ b/presentation/src/main/java/com/nto/presentation/composable/Navigation.kt @@ -15,7 +15,7 @@ fun Navigation(navController: NavHostController, modifier: Modifier = Modifier) NavHost( navController = navController, modifier = modifier, - startDestination = Destinations.Login + startDestination = Destinations.Profile ) { composable { LoginScreen(navController) diff --git a/presentation/src/main/java/com/nto/presentation/composable/cards/VisitCard.kt b/presentation/src/main/java/com/nto/presentation/composable/cards/VisitCard.kt index 0cc5ed5..9f7a7ca 100644 --- a/presentation/src/main/java/com/nto/presentation/composable/cards/VisitCard.kt +++ b/presentation/src/main/java/com/nto/presentation/composable/cards/VisitCard.kt @@ -24,6 +24,7 @@ import com.nto.data.models.cards.VisitCardDTO import com.nto.data.models.cards.VisitType import com.nto.presentation.R import com.nto.presentation.theme.NTOTheme +import java.text.SimpleDateFormat import java.time.format.DateTimeFormatter @Composable @@ -59,7 +60,7 @@ fun VisitCard(data: VisitCardDTO, modifier: Modifier = Modifier) { } Column(horizontalAlignment = Alignment.End) { Text( - text = data.dateString.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME), + text = SimpleDateFormat.getDateInstance().format(data.date), style = NTOTheme.typography.displaySmall, fontSize = 12.sp, color = NTOTheme.colors.disabledText diff --git a/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileScreen.kt b/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileScreen.kt index 5e8582e..bf8bda8 100644 --- a/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileScreen.kt +++ b/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileScreen.kt @@ -70,7 +70,7 @@ fun ProfileScreen( LaunchedEffect(Unit) { if (state.isUnauthorized) { - //navController.navigate(Destinations.Login) + navController.navigate(Destinations.Login) } } diff --git a/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileState.kt b/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileState.kt index 3df1040..b4bafbd 100644 --- a/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileState.kt +++ b/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileState.kt @@ -5,6 +5,7 @@ import com.nto.data.models.Position import com.nto.data.models.UserDTO import com.nto.data.models.cards.VisitCardDTO import com.nto.presentation.R +import java.text.SimpleDateFormat import java.time.format.DateTimeFormatter data class ProfileState( @@ -20,7 +21,7 @@ data class ProfileState( this.firstName = o.firstName this.secondName = o.secondName this.thirdName = o.thirdName - this.lastOpen = o.lastVisit.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) + this.lastOpen = SimpleDateFormat.getDateInstance().format(o.lastVisit) this.job = translatePosition(o.position, context) this.isUnauthorized = o.isUnauthorized }