Skip to content

Commit

Permalink
Merge pull request #88 from ES2-UFPI/iury
Browse files Browse the repository at this point in the history
integrando telas de acompanhamento e edição de plano #13 #74
  • Loading branch information
lucasherlon authored Jan 21, 2025
2 parents c23f764 + 90d3d69 commit bd6ad54
Show file tree
Hide file tree
Showing 25 changed files with 724 additions and 157 deletions.
33 changes: 29 additions & 4 deletions backend/controllers/planoAlimentarController.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,23 +64,48 @@ const planoAlimentarController = {
}
},

// Obter planos alimentares de um paciente passando o seu id como parâmetro
async getByPaciente(req, res) {
// Obter um plano alimentar de um paciente passando o seu id como parâmetro
async getByPaciente(req, res) {
try {
const { paciente } = req.params;

if (!paciente) {
return res.status(400).json({ error: 'O parâmetro paciente é obrigatório.' });
}

const snapshot = await db.collection('planosAlimentares')
.where('paciente', '==', paciente)
const snapshot = await db.collection('plano_alimentar')
.where('id_paciente', '==', paciente)
.get();

if (snapshot.empty) {
return res.status(404).json({ message: 'Nenhum plano alimentar encontrado para este paciente.' });
}

const planos = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() }));

res.status(200).json(planos);

} catch (error) {
res.status(500).json({ error: error.message });
}
},

async getByNutricionista (req, res) {
try {
const { nutricionista } = req.params;

if (!nutricionista) {
return res.status(400).json({ error: 'O parâmetro nutricionista é obrigatório.' });
}

const snapshot = await db.collection('plano_alimentar')
.where('id_nutricionista', '==', nutricionista)
.get();

if (snapshot.empty) {
return res.status(404).json({ message: 'Nenhum plano alimentar encontrado para este nutricionista.' });
}

const planos = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() }));

return res.status(200).json(planos);
Expand Down
6 changes: 4 additions & 2 deletions backend/model/PlanoAlimentar.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
class PlanoAlimentar {
constructor(consulta, dt_inicio, dt_fim, refeicoes, paciente) {
constructor(consulta, dt_inicio, dt_fim, refeicoes, paciente, nutricionista) {
this.consulta = consulta;
this.dt_inicio = dt_inicio;
this.dt_fim = dt_fim;
this.refeicoes = refeicoes;
this.paciente = paciente;
this.nutricionista = nutricionista;
}

toFirestore() {
Expand All @@ -13,7 +14,8 @@ class PlanoAlimentar {
dt_inicio: this.dt_inicio,
dt_fim: this.dt_fim,
refeicoes: this.refeicoes,
paciente: this.paciente
paciente: this.paciente,
nutricionista: this.nutricionista
};
}
}
Expand Down
3 changes: 2 additions & 1 deletion backend/model/Refeicao.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
class Refeicao {
constructor(nome, alimentos, observacoes) {
constructor({id = '', nome, alimentos, observacoes}) {
this.id = id;
this.nome = nome;
this.alimentos = alimentos;
this.observacoes = observacoes;
Expand Down
3 changes: 2 additions & 1 deletion backend/routes/planoAlimentarRoutes.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ router.get('/', planoAlimentarController.getAll);
router.get('/:id', planoAlimentarController.getById);
router.put('/:id', planoAlimentarController.update);
router.delete('/:id', planoAlimentarController.delete);
router.get('/:paciente', planoAlimentarController.getByPaciente);
router.get('/paciente/:paciente', planoAlimentarController.getByPaciente);
router.get('/nutricionista/:nutricionista', planoAlimentarController.getByNutricionista);

module.exports = router;
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,10 @@ public static void registerWith(@NonNull FlutterEngine flutterEngine) {
} catch (Exception e) {
Log.e(TAG, "Error registering plugin image_picker_android, io.flutter.plugins.imagepicker.ImagePickerPlugin", e);
}
try {
flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin());
} catch (Exception e) {
Log.e(TAG, "Error registering plugin path_provider_android, io.flutter.plugins.pathprovider.PathProviderPlugin", e);
}
}
}
7 changes: 7 additions & 0 deletions healthway_app/ios/Runner/GeneratedPluginRegistrant.m
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,17 @@
@import image_picker_ios;
#endif

#if __has_include(<path_provider_foundation/PathProviderPlugin.h>)
#import <path_provider_foundation/PathProviderPlugin.h>
#else
@import path_provider_foundation;
#endif

@implementation GeneratedPluginRegistrant

+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry {
[FLTImagePickerPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTImagePickerPlugin"]];
[PathProviderPlugin registerWithRegistrar:[registry registrarForPlugin:@"PathProviderPlugin"]];
}

@end
5 changes: 3 additions & 2 deletions healthway_app/lib/geral_screens/alimentos_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class _AlimentosScreenState extends State<AlimentosScreen> {

void _carregarAlimentos() {
setState(() {
futureAlimentos = AlimentoService().fetchAlimentos();
futureAlimentos = AlimentoService().fetchFoods();
});
}

Expand Down Expand Up @@ -81,8 +81,9 @@ class _AlimentosScreenState extends State<AlimentosScreen> {
),
floatingActionButton: FloatingActionButton(
onPressed: _carregarAlimentos,
child: Icon(Icons.refresh),
backgroundColor: kPrimaryColor,
foregroundColor: Colors.white,
child: Icon(Icons.refresh),
),
);
}
Expand Down
17 changes: 0 additions & 17 deletions healthway_app/lib/geral_screens/login_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,6 @@ class _LoginScreenState extends State<LoginScreen> {
_buildPasswordField(),
SizedBox(height: 20),
_buildUserTypeDropdown(),
SizedBox(height: 20),
_buildForgotPasswordButton(),
SizedBox(height: 30),
_buildLoginButton(),
SizedBox(height: 20),
Expand Down Expand Up @@ -176,21 +174,6 @@ class _LoginScreenState extends State<LoginScreen> {
);
}

Widget _buildForgotPasswordButton() {
return Align(
alignment: Alignment.centerRight,
child: TextButton(
onPressed: () {
// TODO: Implementar lógica para recuperação de senha
},
child: Text(
'Esqueceu a senha?',
style: TextStyle(color: kPrimaryColor, fontWeight: FontWeight.bold),
),
),
);
}

Widget _buildLoginButton() {
return ElevatedButton(
onPressed: _isLoading ? null : _submitForm,
Expand Down
20 changes: 18 additions & 2 deletions healthway_app/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ import 'package:healthway_app/geral_screens/chat_screen.dart';
import 'package:healthway_app/geral_screens/login_screen.dart' as login;
import 'package:healthway_app/geral_screens/nutricionistas_screen.dart';
import 'package:healthway_app/geral_screens/presentation_screen.dart';
import 'package:healthway_app/screens_nutricionist/meal_edit_screen.dart';
import 'package:healthway_app/screens_nutricionist/meal_plan_screen.dart';
import 'package:healthway_app/screens_nutricionist/nutritionist_dashboard_screen.dart';
import 'package:healthway_app/screens_nutricionist/nutritionist_profile.dart';
import 'package:healthway_app/screens_nutricionist/patient_list_screen.dart';
import 'package:healthway_app/screens_nutricionist/schedule_screen.dart';
import 'package:healthway_app/screens_nutricionist/signup_nutritionist_screen.dart';
import 'package:healthway_app/screens_patient/dietScreen.dart';
import 'package:healthway_app/screens_patient/notificationScreen.dart';
import 'package:healthway_app/screens_patient/patient_dashboard_screen.dart';
import 'package:healthway_app/screens_patient/patient_profile_screen.dart';
Expand Down Expand Up @@ -84,10 +86,11 @@ class MyApp extends StatelessWidget {
return MaterialPageRoute(
builder: (context) => NutritionistProfileScreen(userData: args),
);
case '/meal_plan':
case '/meal_plan_patient':
final args = settings.arguments as Map<String, dynamic>;
return MaterialPageRoute(
builder: (context) => MealPlanScreen(patientData: args),
builder: (context) =>
MealPlanScreen(patientData: args, isPatient: false),
);
case '/patient_list':
final args = settings.arguments as Map<String, dynamic>;
Expand All @@ -96,6 +99,19 @@ class MyApp extends StatelessWidget {
args: args,
),
);
case '/meal_edit':
final args = settings.arguments as Map<String, dynamic>;
return MaterialPageRoute(
builder: (context) => MealEditScreen(mealData: args),
);

case '/diet':
final args = settings.arguments as Map<String, dynamic>;
return MaterialPageRoute(
builder: (context) => PlanoAlimentarScreen(
pacienteId: args['id'],
),
);
default:
return null;
}
Expand Down
20 changes: 8 additions & 12 deletions healthway_app/lib/models/nutricionista.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,14 @@ class Nutricionista {

factory Nutricionista.fromJson(Map<String, dynamic> json) {
return Nutricionista(
id: json['id'],
cpf: json['cpf'],
crn: json['crn'],
nome: json['nome'],
especialidade: json['especialidade'],
email: json['email'],
senha: json['senha'],
fotoPerfil: json['foto_perfil'],
fotoDocumento: json['foto_documento'],
pacientes: List<String>.from(['pacientes']),
id: json['id'] ?? '',
cpf: json['cpf'] ?? '',
crn: json['crn'] ?? '',
nome: json['nome'] ?? '',
especialidade: json['especialidade'] ?? '',
email: json['email'] ?? '',
senha: json['senha'] ?? '',
pacientes: List<String>.from(json['pacientes'] ?? []),
);
}

Expand All @@ -47,8 +45,6 @@ class Nutricionista {
'especialidade': especialidade,
'email': email,
'senha': senha,
'foto_perfil': fotoPerfil,
'foto_documento': fotoDocumento,
'pacientes': pacientes,
};
}
Expand Down
27 changes: 14 additions & 13 deletions healthway_app/lib/models/paciente.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,20 @@ class Paciente {

factory Paciente.fromJson(Map<String, dynamic> json) {
return Paciente(
id: json['id'],
nome: json['nome'],
email: json['email'],
cpf: json['cpf'],
dataNascimento: json['dt_nascimento'],
sexo: json['sexo'],
altura: json['altura'].toDouble(),
peso: json['peso'].toDouble(),
circunferenciaAbdominal: json['circunferencia_abdominal'].toDouble(),
gorduraCorporal: json['gordura_corporal'].toDouble(),
massaMuscular: json['massa_muscular'].toDouble(),
alergias: List<String>.from(json['alergias']),
preferencias: List<String>.from(json['preferencias']),
id: json['id'] ?? '',
nome: json['nome'] ?? '',
email: json['email'] ?? '',
cpf: json['cpf'] ?? '',
dataNascimento: json['dt_nascimento'] ?? '',
sexo: json['sexo'] ?? '',
altura: json['altura'].toDouble() ?? 0.0,
peso: json['peso'].toDouble() ?? 0.0,
circunferenciaAbdominal:
json['circunferencia_abdominal'].toDouble() ?? 0.0,
gorduraCorporal: json['gordura_corporal'].toDouble() ?? 0.0,
massaMuscular: json['massa_muscular'].toDouble() ?? 0.0,
alergias: List<String>.from(json['alergias'] ?? []),
preferencias: List<String>.from(json['preferencias'] ?? []),
senha: json['senha'],
);
}
Expand Down
45 changes: 45 additions & 0 deletions healthway_app/lib/models/plano_alimentar.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import 'package:intl/intl.dart';

class PlanoAlimentar {
final String? id;
final String consulta;
final DateTime dtInicio;
final DateTime dtFim;
final List<String> refeicoes;
final String paciente;
final String nutricionista;

PlanoAlimentar({
this.id,
required this.consulta,
required this.dtInicio,
required this.dtFim,
required this.refeicoes,
required this.paciente,
required this.nutricionista,
});

factory PlanoAlimentar.fromJson(Map<String, dynamic> json) {
return PlanoAlimentar(
id: json['id'] ?? '',
consulta: json['consulta'] ?? '',
dtInicio: DateFormat('dd/MM/yyyy').parse(json['dt_inicio'] ?? ''),
dtFim: DateFormat('dd/MM/yyyy').parse(json['dt_fim'] ?? ''),
refeicoes: List<String>.from(json['refeicoes'] ?? []),
paciente: json['id_paciente'] ?? '',
nutricionista: json['id_nutricionista'] ?? '',
);
}

Map<String, dynamic> toJson() {
return {
'id': id,
'consulta': consulta,
'dt_inicio': DateFormat('dd/MM/yyyy').format(dtInicio),
'dt_fim': DateFormat('dd/MM/yyyy').format(dtFim),
'refeicoes': refeicoes,
'id_paciente': paciente,
'id_nutricionista': nutricionista,
};
}
}
31 changes: 31 additions & 0 deletions healthway_app/lib/models/refeicao.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
class Refeicao {
final String? id;
String nome;
String observacoes;
Map<String, String> alimentos;

Refeicao({
this.id,
required this.nome,
required this.observacoes,
required this.alimentos,
});

factory Refeicao.fromJson(Map<String, dynamic> json) {
return Refeicao(
id: json['id'] ?? '',
nome: json['nome'] ?? '',
observacoes: json['observacoes'] ?? '',
alimentos: Map<String, String>.from(json['alimentos'] ?? {}),
);
}

Map<String, dynamic> toJson() {
return {
'id': id,
'nome': nome,
'observacoes': observacoes,
'alimentos': alimentos,
};
}
}
Loading

0 comments on commit bd6ad54

Please sign in to comment.