
Urls para acessar a documentação da API:
http://localhost:8080/api/v1/recipe_swagger
http://localhost:8080/api/v1/user_swagger
http://localhost:8080/api/v1/usersConnections_swagger
data class Success<out T>(val data: T) : ServiceResult<T>()
data class Error(val code: String? = null, val message: String) : ServiceResult<Nothing>()
EmptyField,
NoEmail,
PasswordsDoNotMatch,
PasswordUpperCaseMissing,
PasswordNumberMissing,
PasswordSpecialCharMissing,
PasswordTooShort,
PhoneNumberInvalid,
Valid
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
fun LoginContainerPreview() {
ReceitaFacilTheme {
LoginContainer(
emailValue = "",
passwordValue = "",
buttonEnabled = false,
onEmailChange = { },
onPasswordChange = {},
onLoginButtonClick = { },
isPasswordShow = false,
onToggleVisualTransformationPassword = { /*TODO*/ },
isLoading = false,
modifier = Modifier
.fillMaxWidth()
.padding(10.dp, 15.dp, 10.dp, 5.dp)
)
}
}
@Preview(showBackground = false, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun LoginContentPreview() {
ReceitaFacilTheme {
LoginContent(
paddingValues = PaddingValues(),
onLoginClick = {},
onEmailChange = {},
onPasswordChange = {},
onNavigateToRegisterScreen = {},
onToggleVisualTransformationPassword = {}
)
}
}
@Test
fun `given valid credentials, when registerUser is invoked, then should return success response`()
@Test
fun `given repository error, when registerUser is invoked, then should return error response`()
@Test
fun `onNameInputChange updates name and validates input`() = runTest {}
@Test
fun `toggle visual transformation for password updates isPasswordShown flag`() = runTest {}
@Test
fun `Given valid inputs, When onRegisterClick is triggered, Then it should emit loading then success and show toast`() = runTest {}
@Test
fun `Given use case returns error, When onRegisterClick is triggered, Then it should emit loading then error and update error message`() = runTest {}
@Test
fun `should emit Loading and Success when credentials are valid`()
@Test
fun `should emit Loading and Error when credentials are invalid`()
@Test
fun `should emit Loading and Success when login is successful and then emit ShowToast side effect`() = runTest {}
@Test
fun `should emit Loading and Error when login fails and update UI with error message`() = runTest {}
@Test
fun `should return Success from ResponseData when the result of the serviceResult is success`() = runTest {}
@Test
fun `should return error from ResponseData when the result of the serviceResult is error`() = runTest {}
@Test
fun `should emit loading then error when unexpected exception is thrown`() = runTest {}
@Test
fun `should get a recipe by id if RecipeId is not null and fill in the uiState fields`() = runTest {}
@Test
fun `should register a recipe and return a success response to uiState`() = runTest {}
@Test
fun `should update a recipe and return a success response to uiState`() = runTest {}
@Test
fun `should return an error to uiState when registering the recipe`() = runTest {}
@Test
fun `should emit Loading then Success when repository returns success`() = runTest {}
@Test
fun `should emit Loading then Error when repository returns error`() = runTest {}
@Test
fun `should emit Loading then Error when repository throws exception`() = runTest {}
@Test
fun `uiState should emit Loading then Success when use case returns success`() = runTest {}
@Test
fun `uiState should emit Loading then Error when use case returns error`() = runTest {}
Curso Android com Jetpack Compose: Receita Fácil
Aprenda a desenvolver um aplicativo Android completo do zero, utilizando as tecnologias mais modernas do ecossistema Android! Neste curso, você irá criar o Receita Fácil, um app intuitivo e prático para cadastro e compartilhamento de receitas, ideal para quem deseja dominar Jetpack Compose, WebSockets, Clean Architecture e muito mais!
Importante: Este curso tem como proposta a construção de um app real com base em uma arquitetura já definida. Não é um curso teórico ou que explica em detalhes cada conceito aplicado, como Clean Architecture ou padrões de projeto. O foco está na implementação prática de um app seguindo um modelo previamente estruturado.
O que você vai aprender:
Jetpack Compose: construa interfaces modernas e reativas com a nova toolkit oficial do Android.
Autenticação de usuários: implemente telas de login e registro com persistência de dados.
CRUD de Receitas: crie, edite, visualize e exclua receitas, aplicando conceitos de boas práticas de código.
WebSockets + QR Code: compartilhe receitas com outros usuários através da leitura de QR Codes em tempo real — a grande cereja do bolo!
Arquitetura limpa (Clean Architecture): veja como estruturar seu projeto de forma escalável e manutenível (é recomendado já ter conhecimento prévio sobre o tema).
ViewModel, Flow, DataStore e muito mais: use as ferramentas mais atuais para gerenciamento de estado, persistência e reatividade.
Para quem é este curso?
Desenvolvedores Android iniciantes ou intermediários que desejam aprender Jetpack Compose na prática.
Quem quer desenvolver um projeto real e com funcionalidades modernas.
Quem deseja aprender a integrar recursos avançados como WebSockets e QR Codes em aplicativos móveis.
Atenção: Não será ensinado Jetpack Compose durante o curso. É necessário que o aluno tenha um conhecimento prévio sobre a tecnologia.
Ao final do curso, você terá em mãos um projeto completo e profissional, que pode ser usado como portfólio, produto ou base para ideias ainda maiores.