Skip to content

Commit

Permalink
feat(#69) inscrição em disciplinas
Browse files Browse the repository at this point in the history
  • Loading branch information
GabrielCostaDeOliveira committed Feb 1, 2025
1 parent c391733 commit 1d41d6f
Show file tree
Hide file tree
Showing 11 changed files with 170 additions and 207 deletions.
10 changes: 5 additions & 5 deletions lib/core/network/token_manager/service/auth_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ class AuthService {
}

Future<UserModel> getUser() async {
String? json = await StorageValue.getInstance().getJsonUser();
// String? json = await StorageValue.getInstance().getJsonUser();

if (json != null) {
return UserModel.fromJsonString(json);
} else {
// if (json != null) {
// return UserModel.fromJsonString(json);
// } else {
final response = await validateToken();

Log.f(response);
Expand All @@ -52,6 +52,6 @@ class AuthService {
await StorageValue.getInstance().setJsonUser(user.toJson());

return user;
}
//}
}
}
5 changes: 2 additions & 3 deletions lib/core/state/command.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,12 @@ abstract class Command<T> extends ChangeNotifier {

if (_result?.asError != null) {
_isError = true;
Log.e(_result?.asError!.error.toString());
Log.i(_result?.asError!.error.toString());
} else {
_isOk = true;
}

} catch (e) {
Log.e(e);
Log.i(e);
_result = Result.error(e);
_isError = true;
} finally {
Expand Down
28 changes: 10 additions & 18 deletions lib/ui/join_subjects/service/join_subjects_service.dart
Original file line number Diff line number Diff line change
@@ -1,24 +1,16 @@
import 'package:aranduapp/core/log/log.dart';
import 'package:aranduapp/core/network/studio_maker_api.dart';
import 'package:aranduapp/ui/subjects/model/subject_model.dart';
import 'package:dio/dio.dart';
import 'package:aranduapp/core/network/auth_api.dart';
import 'package:aranduapp/core/network/token_manager/repository/auth_repository.dart';
import 'package:get_it/get_it.dart';

class JoinSubjectsService {
Future<bool> isUsersubscribe(String subjectId) async {
try {
Response response = await StudioMakerApi.getInstance().get(
path: '/users/{userId}/subscribedSubjects');
return response.data['isSubscribe'] ?? false;
} catch (e) {
Log.d('Erro ao verificar inscrição: $e');
return false;
}
}
Future<void> joinSubjects(String subjectId) async {

//TODO: isso está errado
String userId = (await GetIt.I<AuthRepository>().getUser()).id;

Future<SubjectModel> getJoinSubjects(String subjectId) async {
Response response =
await StudioMakerApi.getInstance().get(path:'/subjects/$subjectId');
await AuthApi.getInstance(auth: true)
.post(path: '/users/$userId/subjects/subscribe/$subjectId');

return SubjectModel.fromJson(response.data);
return;
}
}
151 changes: 66 additions & 85 deletions lib/ui/join_subjects/view/join_subjects_view.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'package:aranduapp/ui/join_subjects/viewmodel/join_subjects_viewmodel.dart';
import 'package:aranduapp/ui/journey/view/journey_view.dart';
import 'package:aranduapp/ui/shared/command_button.dart';
import 'package:aranduapp/ui/shared/loading_widget.dart';
import 'package:aranduapp/ui/subjects/model/subject_model.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
Expand All @@ -15,20 +14,7 @@ class JoinSubjects extends StatelessWidget {
Widget build(BuildContext context) {
return ChangeNotifierProvider<JoinSubjectsViewmodel>.value(
value: GetIt.instance<JoinSubjectsViewmodel>(),
child:
Consumer<JoinSubjectsViewmodel>(builder: (context, viewModel, child) {
if (viewModel.isSubscribe) {
Future.microtask(() {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => Journey(subject: subject),
),
);
});
return const LoadingWidget();
}
return _JoinSubjectsScreen(subject: subject);
}),
child: _JoinSubjectsScreen(subject: subject),
);
}
}
Expand All @@ -41,10 +27,6 @@ class _JoinSubjectsScreen extends StatelessWidget {
Widget build(BuildContext context) {
final viewModel = Provider.of<JoinSubjectsViewmodel>(context);

WidgetsBinding.instance.addPostFrameCallback((_) {
viewModel.subjectDetails(subject.id);
});

return Scaffold(
appBar: _buildAppBar(context),
body: _buildJoinSubjects(context, viewModel, subject),
Expand All @@ -55,7 +37,8 @@ class _JoinSubjectsScreen extends StatelessWidget {
return AppBar(
backgroundColor: Theme.of(context).colorScheme.surface,
elevation: 0,
title: Text(subject.name,
title: Text(
subject.name,
style: TextStyle(
color: Theme.of(context).colorScheme.onSurface,
fontSize: 24,
Expand Down Expand Up @@ -83,77 +66,75 @@ class _JoinSubjectsScreen extends StatelessWidget {
],
);
}
}

Widget _buildJoinSubjects(BuildContext context, JoinSubjectsViewmodel viewModel, SubjectModel subject) {
final screenWidth = MediaQuery.of(context).size.width;
final screenHeight = MediaQuery.of(context).size.height;
Widget _buildJoinSubjects(BuildContext context,
JoinSubjectsViewmodel viewModel, SubjectModel subject) {
final screenWidth = MediaQuery.of(context).size.width;
final screenHeight = MediaQuery.of(context).size.height;

return Column(children: [
Expanded(
child: SingleChildScrollView(
child: Container(
// Aqui definimos o tamanho
padding: EdgeInsets.only(
left: screenWidth * 0.05,
right: screenWidth * 0.05,
top: screenHeight * 0.02,
), // Espaçamento à esquerda
//height: screenHeight * 0.9,
child: Column(
children: [
Row(children: [
Icon(
Icons.book,
color: Theme.of(context).colorScheme.onSurface,
size: 120,
),
SizedBox(width: screenWidth * 0.03),
Flexible(
child: Text(
viewModel.subject?.name ?? subject.name,
style: const TextStyle(fontSize: 20, fontWeight: FontWeight.w500),
return Column(children: [
Expanded(
child: SingleChildScrollView(
child: Container(
padding: EdgeInsets.only(
left: screenWidth * 0.05,
right: screenWidth * 0.05,
top: screenHeight * 0.02,
),
child: Column(
children: [
Row(children: [
Icon(
Icons.book,
color: Theme.of(context).colorScheme.onSurface,
size: 120,
),
SizedBox(width: screenWidth * 0.03),
Flexible(
child: Text(
subject.name,
style: const TextStyle(
fontSize: 20, fontWeight: FontWeight.w500),
softWrap: true,
)),
]), // Espaçamento entre o ícone e o título
SizedBox(height: screenHeight * 0.06), // Espaçamento entre o título e a descrição
Text(
viewModel.subject?.description ?? subject.description,
style: const TextStyle(fontSize: 13),
textAlign: TextAlign.justify,
),
],
)),
]),
SizedBox(height: screenHeight * 0.06),
Text(
subject.description,
style: const TextStyle(fontSize: 13),
textAlign: TextAlign.justify,
),
],
),
),
),
),
),
Container(
padding:
EdgeInsets.only(bottom: screenHeight * 0.05), // Espaçamento inferior
child: Center(
child: _joinButton(context, viewModel),
Container(
padding: EdgeInsets.only(bottom: screenHeight * 0.05),
child: Center(
child: _joinButton(context, viewModel),
),
),
),
]);
}
]);
}

Widget _joinButton(BuildContext context, JoinSubjectsViewmodel viewModel) {
return CommandButton(
tap: () {
viewModel.joinsubjectsCommand.execute();
},
command: viewModel.joinsubjectsCommand,
nameButton: "Ingressar",
onErrorCallback: (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Erro: $e')),
);
},
onSuccessCallback: () {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Você ingressou na disciplina com sucesso!')),
);
},
);
Widget _joinButton(BuildContext context, JoinSubjectsViewmodel viewModel) {
return CommandButton(
tap: () {
viewModel.joinsubjectsCommand.execute(subject.id);
},
command: viewModel.joinsubjectsCommand,
nameButton: "Ingressar",
onErrorCallback: (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Erro: $e')),
);
},
onSuccessCallback: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => Journey(subject: subject)),
);
},
);
}
}
25 changes: 5 additions & 20 deletions lib/ui/join_subjects/viewmodel/join_subjects_viewmodel.dart
Original file line number Diff line number Diff line change
@@ -1,33 +1,18 @@
import 'package:aranduapp/core/state/command.dart';
import 'package:aranduapp/ui/join_subjects/service/join_subjects_service.dart';
import 'package:aranduapp/ui/subjects/model/subject_model.dart';
import 'package:async/async.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';

class JoinSubjectsViewmodel extends ChangeNotifier {
late Command0<SubjectModel> joinsubjectsCommand;

final bool _isSubscribe = false;
SubjectModel? _subject;

bool get isSubscribe => _isSubscribe;
SubjectModel? get subject => _subject;
late Command1<void, String> joinsubjectsCommand;

JoinSubjectsViewmodel() {
joinsubjectsCommand = Command0<SubjectModel>(joinsubjects);
}

Future<void> subjectDetails(String subjectId) async {
_subject = await GetIt.instance<JoinSubjectsService>()
.getJoinSubjects(subjectId);
notifyListeners();
joinsubjectsCommand = Command1(joinsubjects);
}

Future<Result<SubjectModel>> joinsubjects() async {
if (_subject == null) {
return Result.error('sem disciplina.');
}
return Result.value(_subject!);
Future<Result<void>> joinsubjects(String subjectId) async {
await GetIt.instance<JoinSubjectsService>().joinSubjects(subjectId);
return Result.value(null);
}
}
4 changes: 2 additions & 2 deletions lib/ui/journey/model/journey_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'dart:convert';
class JourneyModel {
final String id;
final String title;
final String description;
final String? description;

JourneyModel({
required this.id,
Expand All @@ -17,7 +17,7 @@ class JourneyModel {
return JourneyModel(
id: json['_id']! as String,
title: json['title']! as String,
description: json['description']! as String,
description: json['description'] as String?,
);
}
}
2 changes: 1 addition & 1 deletion lib/ui/journey/service/journey_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class JourneyService {
return JourneyModel(
id: subjectMap['_id']! as String,
title: subjectMap['title']! as String,
description: subjectMap['description']! as String);
description: subjectMap['description'] as String?);
}).toList();

return res;
Expand Down
4 changes: 2 additions & 2 deletions lib/ui/journey/view/journey_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ class _JourneyScreen extends StatelessWidget {
color: Theme.of(context).colorScheme.primary,
size: 32,
),
title: Text(journey.title),
subtitle: Text(journey.description),
title: Text(journey.title?? "NUll"),
subtitle: Text(journey.description?? "NULL"),
trailing: Icon(
Icons.chevron_right,
color: Theme.of(context).colorScheme.primary,
Expand Down
17 changes: 7 additions & 10 deletions lib/ui/subjects/service/subjects_service.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import 'package:aranduapp/core/log/log.dart';
import 'package:aranduapp/core/network/auth_api.dart';
import 'package:aranduapp/core/network/studio_maker_api.dart';
import 'package:aranduapp/core/network/token_manager/repository/auth_repository.dart';
import 'package:aranduapp/ui/subjects/model/subject_model.dart';
import 'package:dio/dio.dart';
import 'package:get_it/get_it.dart';

class SubjectService {
Future<List<SubjectModel>> getSubjects() async {
Expand All @@ -25,18 +27,13 @@ class SubjectService {
}

Future<bool> isUsersubscribe(String subjectId) async {
String userId = (await AuthRepository().getUser()).id;

try {
Response response = await StudioMakerApi.getInstance()
.get(path: '/users/$userId/subscribedSubjects');
//TODO: isso está errado
String userId = (await GetIt.I<AuthRepository>().getUser()).id;

Log.d(response);
Response response = await AuthApi.getInstance(auth: false)
.get(path: '/users/$userId/subscribedSubjects');

return response.data['isSubscribe'] ?? false;
} catch (e) {
Log.d('Erro ao verificar inscrição: $e');
return false;
}
return response.toString().toLowerCase().contains(subjectId.toLowerCase());
}
}
Loading

0 comments on commit 1d41d6f

Please sign in to comment.