Half-done open method

Fix unauthorized profile access
Fix VisitCard date formatting?
This commit is contained in:
Nymos 2025-02-19 15:47:18 +03:00
parent b65a8bb883
commit 3782f2fc97
13 changed files with 43 additions and 7 deletions

View File

@ -0,0 +1,7 @@
package com.nto.data.models
enum class ScanResult {
OK,
CANCELED,
ERROR
}

View File

@ -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()
)

View File

@ -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
}

View File

@ -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
}
}
}

View File

@ -16,4 +16,7 @@ interface RetrofitApi {
@GET("visits/{login}/visits")
fun getVisits(@Header("Authorization") token: String): Call<List<VisitCardDTO>>
@GET("visit/open")
fun open(@Header("Authorization") token: String): Call<ResponseBody>
}

View File

@ -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
}

View File

@ -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()
}
}

View File

@ -0,0 +1,4 @@
package com.nto.domain.usecase
class ScanUseCase {
}

View File

@ -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()

View File

@ -15,7 +15,7 @@ fun Navigation(navController: NavHostController, modifier: Modifier = Modifier)
NavHost(
navController = navController,
modifier = modifier,
startDestination = Destinations.Login
startDestination = Destinations.Profile
) {
composable<Destinations.Login> {
LoginScreen(navController)

View File

@ -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

View File

@ -70,7 +70,7 @@ fun ProfileScreen(
LaunchedEffect(Unit) {
if (state.isUnauthorized) {
//navController.navigate(Destinations.Login)
navController.navigate(Destinations.Login)
}
}

View File

@ -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
}