Код: Выделить всё
interface AuthApi {
@POST("/auth/register")
suspend fun register(
@Body request: RegisterRequest,
)
@POST("/auth/login")
suspend fun login(
@Body request: LoginRequest,
): TokenPair
@GET("authenticate")
suspend fun authenticate(
@Header("Authorization") token: String,
)
}
@Module
@InstallIn(SingletonComponent::class)
internal object NetworkModule {
@Provides
@Singleton
fun provideAuthApi(
okhttpCallFactory: dagger.Lazy,
): AuthApi {
return Retrofit.Builder()
.baseUrl(SPOTIFY_BASE_URL)
.callFactory { okhttpCallFactory.get().newCall(it) }
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(AuthApi::class.java)
}
< /code>
Тогда это мой модуль данных. < /p>
class AuthRepositoryImpl
@Inject
constructor(
private val api: AuthApi,
) : AuthRepository {
override suspend fun signIn(email: String, password: String): Result {
return try {
val user = api.login(LoginRequest(email, password))
Result.Success(user)
} catch (e: HttpException) {
when (e.code()) {
400 -> Result.Error(DataError.Network.BAD_REQUEST)
401 -> Result.Error(DataError.Network.UNAUTHORIZED)
409 -> Result.Error(DataError.Network.CONFLICT)
else -> Result.Error(DataError.Network.INTERNAL_SERVER_ERROR)
}
}
}
sealed interface DataError : Error {
enum class Network : DataError {
BAD_REQUEST,
CONFLICT,
UNAUTHORIZED,
INTERNAL_SERVER_ERROR,
}
}
sealed interface Result {
data class Success(val data: D) : Result
data class Error(val error: E) : Result
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ompose-app