forked from yaso_meth/mih-project
Merge pull request #236 from yaso-meth/NEW--sql-alchemy-integration
NEW--sql-alchemy-integration
This commit is contained in:
@@ -25,9 +25,9 @@ class _MzansiInnovationHubState extends State<MzansiInnovationHub> {
|
||||
|
||||
String getTitle() {
|
||||
if (AppEnviroment.getEnv() == "Dev") {
|
||||
return "Mzansi Innovation Hub - Dev";
|
||||
return "Dev | MIH App: Mzansi Innovation Hub";
|
||||
} else {
|
||||
return "Mzansi Innovation Hub";
|
||||
return "MIH App: Mzansi Innovation Hub";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -79,6 +79,8 @@ class _MihBusinessProfilePreviewState extends State<MihBusinessProfilePreview> {
|
||||
return Icon(
|
||||
MihIcons.mihRing,
|
||||
size: profilePictureWidth,
|
||||
color:
|
||||
MzansiInnovationHub.of(context)!.theme.secondaryColor(),
|
||||
);
|
||||
}
|
||||
}),
|
||||
|
||||
74
Frontend/lib/mih_config/mih_colors.dart
Normal file
74
Frontend/lib/mih_config/mih_colors.dart
Normal file
@@ -0,0 +1,74 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mzansi_innovation_hub/main.dart';
|
||||
|
||||
class MihColors {
|
||||
|
||||
static Color getPrimaryColor(BuildContext context) {
|
||||
if(MzansiInnovationHub.of(context)!.theme.mode == "Dark"){
|
||||
return const Color(0XFF3A4454);
|
||||
}else{
|
||||
return const Color(0XFFbedcfe);
|
||||
}
|
||||
}
|
||||
|
||||
static Color getSecondaryColor(BuildContext context) {
|
||||
if(MzansiInnovationHub.of(context)!.theme.mode == "Dark"){
|
||||
return const Color(0XFFbedcfe);
|
||||
}else{
|
||||
return const Color(0XFF3A4454);
|
||||
}
|
||||
}
|
||||
|
||||
static Color getGreenColor(BuildContext context) {
|
||||
if(MzansiInnovationHub.of(context)!.theme.mode == "Dark"){
|
||||
return const Color(0xff8ae290);
|
||||
}else{
|
||||
return const Color(0xffB0F2B4);
|
||||
}
|
||||
}
|
||||
|
||||
static Color getRedColor(BuildContext context) {
|
||||
if(MzansiInnovationHub.of(context)!.theme.mode == "Dark"){
|
||||
return const Color(0xffD87E8B);
|
||||
}else{
|
||||
return const Color(0xffbb3d4f);
|
||||
}
|
||||
}
|
||||
|
||||
static Color getPinkColor(BuildContext context) {
|
||||
if(MzansiInnovationHub.of(context)!.theme.mode == "Dark"){
|
||||
return const Color(0xffdaa2e9);
|
||||
}else{
|
||||
// Add a different shade of pink for light mode
|
||||
return const Color(0xffdaa2e9);
|
||||
}
|
||||
}
|
||||
|
||||
static Color getOrangeColor(BuildContext context) {
|
||||
if(MzansiInnovationHub.of(context)!.theme.mode == "Dark"){
|
||||
return const Color(0xffd69d7d);
|
||||
}else{
|
||||
// Add a different shade of pink for light mode
|
||||
return const Color(0xffd69d7d);
|
||||
}
|
||||
}
|
||||
|
||||
static Color getYellowColor(BuildContext context) {
|
||||
if(MzansiInnovationHub.of(context)!.theme.mode == "Dark"){
|
||||
return const Color(0xfff4e467);
|
||||
}else{
|
||||
// Add a different shade of pink for light mode
|
||||
return const Color(0xffd4af37);
|
||||
}
|
||||
}
|
||||
|
||||
static Color getBluishPurpleColor(BuildContext context) {
|
||||
if(MzansiInnovationHub.of(context)!.theme.mode == "Dark"){
|
||||
return const Color(0xff6e7dcc);
|
||||
}else{
|
||||
// Add a different shade of pink for light mode
|
||||
return const Color(0xff6e7dcc);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import 'package:flutter/services.dart';
|
||||
import 'package:mzansi_innovation_hub/main.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart';
|
||||
@@ -155,8 +156,21 @@ class _MihRegisterState extends State<MihRegister> {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
title: Text(error),
|
||||
return MihPackageAlert(
|
||||
alertIcon: Icon(
|
||||
Icons.warning_amber_rounded,
|
||||
color: MzansiInnovationHub.of(context)!.theme.errorColor(),
|
||||
size: 100,
|
||||
),
|
||||
alertTitle: "Error While Signing Up",
|
||||
alertBody: Text(
|
||||
"An error occurred while signing up. Please try again later.",
|
||||
style: TextStyle(
|
||||
color: MzansiInnovationHub.of(context)!.theme.secondaryColor(),
|
||||
fontSize: 18,
|
||||
),
|
||||
),
|
||||
alertColour: MzansiInnovationHub.of(context)!.theme.errorColor(),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -135,18 +135,16 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
|
||||
FutureBuilder(
|
||||
future: futurePosition,
|
||||
builder: (context, asyncSnapshot) {
|
||||
String myLocation = "";
|
||||
if (asyncSnapshot.connectionState == ConnectionState.waiting) {
|
||||
return const Mihloadingcircle(
|
||||
message: "Getting Your GPS Location Ready",
|
||||
);
|
||||
myLocation = "Getting Your GPS Location Ready";
|
||||
} else {
|
||||
final myLocation = asyncSnapshot.data
|
||||
myLocation = asyncSnapshot.data
|
||||
.toString()
|
||||
.replaceAll("Latitude: ", "")
|
||||
.replaceAll("Longitude: ", "");
|
||||
print("My Location is : $myLocation");
|
||||
return displaySearchResults(userSearch, myLocation);
|
||||
}
|
||||
return displaySearchResults(userSearch, myLocation);
|
||||
}),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import 'package:custom_rating_bar/custom_rating_bar.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mzansi_innovation_hub/main.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart';
|
||||
import 'package:supertokens_flutter/supertokens.dart';
|
||||
@@ -362,42 +363,12 @@ class _MihBusinessCardState extends State<MihBusinessCard> {
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
const SizedBox(height: 10),
|
||||
RatingBar.readOnly(
|
||||
size: 50,
|
||||
alignment: Alignment.center,
|
||||
filledIcon: Icons.star,
|
||||
emptyIcon: Icons.star_border,
|
||||
halfFilledIcon: Icons.star_half,
|
||||
filledColor: const Color(0xffe9e8a1),
|
||||
// MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
emptyColor: MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
halfFilledColor: const Color(0xffe9e8a1),
|
||||
// MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
isHalfAllowed: true,
|
||||
initialRating: widget.business.rating.isNotEmpty
|
||||
? double.parse(widget.business.rating)
|
||||
: 0,
|
||||
maxRating: 5,
|
||||
),
|
||||
// Text(
|
||||
// "Rating: ${widget.rating}",
|
||||
// style: TextStyle(
|
||||
// fontSize: 15,
|
||||
// fontWeight: FontWeight.bold,
|
||||
// color: MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
// height: 1.0,
|
||||
// ),
|
||||
// ),
|
||||
// Divider(
|
||||
// color: MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
// ),
|
||||
const SizedBox(height: 10),
|
||||
_buildContactInfo(
|
||||
"Call",
|
||||
"Give us a quick call.",
|
||||
Icons.phone,
|
||||
const Color(0xffaff0b3),
|
||||
MihColors.getGreenColor(context),
|
||||
() {
|
||||
// print("Calling ${widget.cellNumber}");
|
||||
_makePhoneCall(widget.business.contact_no);
|
||||
@@ -410,7 +381,7 @@ class _MihBusinessCardState extends State<MihBusinessCard> {
|
||||
"Email",
|
||||
"Send us an email.",
|
||||
Icons.email,
|
||||
const Color(0xffdaa2e9),
|
||||
MihColors.getPinkColor(context),
|
||||
() {
|
||||
// print("Emailing ${widget.email}");
|
||||
_launchEmail(
|
||||
@@ -427,7 +398,7 @@ class _MihBusinessCardState extends State<MihBusinessCard> {
|
||||
"Location",
|
||||
"Come visit us.",
|
||||
Icons.location_on,
|
||||
const Color(0xffd69d7d),
|
||||
MihColors.getOrangeColor(context),
|
||||
() {
|
||||
final latitude =
|
||||
double.parse(widget.business.gps_location.split(',')[0]);
|
||||
@@ -453,7 +424,7 @@ class _MihBusinessCardState extends State<MihBusinessCard> {
|
||||
"Website",
|
||||
"Find out more about us.",
|
||||
Icons.vpn_lock,
|
||||
const Color(0xffd67d8a),
|
||||
MihColors.getRedColor(context),
|
||||
() {
|
||||
_launchWebsite(widget.business.website);
|
||||
},
|
||||
@@ -469,7 +440,7 @@ class _MihBusinessCardState extends State<MihBusinessCard> {
|
||||
"Rate Us",
|
||||
"Let us know how we are doing.",
|
||||
Icons.star_rate_rounded,
|
||||
const Color(0xffe9e8a1),
|
||||
MihColors.getYellowColor(context),
|
||||
() {
|
||||
businessReviewRatingWindow(true, widget.width);
|
||||
},
|
||||
@@ -484,10 +455,11 @@ class _MihBusinessCardState extends State<MihBusinessCard> {
|
||||
// "Bookmark",
|
||||
// "Save us for later.",
|
||||
// Icons.bookmark_add_rounded,
|
||||
// const Color(0xff6e7dcc),
|
||||
// MihColors.getBluishPurpleColor(context),
|
||||
// () {
|
||||
// // _launchWebsite(widget.website);
|
||||
// print("Saving ${widget.businessName} to Directory");
|
||||
// print("Saving ${widget.business.Name} to Directory");
|
||||
// showBookmarkAlert();
|
||||
// },
|
||||
// ),
|
||||
const SizedBox(height: 10),
|
||||
@@ -550,4 +522,69 @@ class _MihBusinessCardState extends State<MihBusinessCard> {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void showBookmarkAlert() {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => MihPackageAlert(
|
||||
alertColour: MihColors.getSecondaryColor(context),
|
||||
alertIcon: Icon(
|
||||
Icons.warning_rounded,
|
||||
size: 100,
|
||||
color: MihColors.getSecondaryColor(context),
|
||||
),
|
||||
alertTitle: "Bookmark Business",
|
||||
alertBody: Column(
|
||||
children: [
|
||||
Text(
|
||||
"Are you sure you want to save ${widget.business.Name} to your Mzansi Directory?",
|
||||
style: TextStyle(
|
||||
color: MzansiInnovationHub.of(context)!.theme.secondaryColor(),
|
||||
fontSize: 15,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 25),
|
||||
Wrap(
|
||||
spacing: 10,
|
||||
runSpacing: 10,
|
||||
children: [
|
||||
MihButton(
|
||||
width: 300,
|
||||
onPressed: () async {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
buttonColor:
|
||||
MzansiInnovationHub.of(context)!.theme.errorColor(),
|
||||
child: Text(
|
||||
"Cancel",
|
||||
style: TextStyle(
|
||||
color:
|
||||
MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
MihButton(
|
||||
width: 300,
|
||||
onPressed: () {},
|
||||
buttonColor:
|
||||
MzansiInnovationHub.of(context)!.theme.successColor(),
|
||||
child: Text(
|
||||
"Save Business",
|
||||
style: TextStyle(
|
||||
color:
|
||||
MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart';
|
||||
@@ -358,15 +359,17 @@ class _MihReviewBusinessWindowState extends State<MihReviewBusinessWindow> {
|
||||
filledIcon: Icons.star,
|
||||
emptyIcon: Icons.star_border,
|
||||
halfFilledIcon: Icons.star_half,
|
||||
filledColor: MzansiInnovationHub.of(context)!
|
||||
.theme
|
||||
.secondaryColor(),
|
||||
filledColor: MihColors.getYellowColor(context),
|
||||
// filledColor: MzansiInnovationHub.of(context)!
|
||||
// .theme
|
||||
// .secondaryColor(),
|
||||
emptyColor: MzansiInnovationHub.of(context)!
|
||||
.theme
|
||||
.secondaryColor(),
|
||||
halfFilledColor: MzansiInnovationHub.of(context)!
|
||||
.theme
|
||||
.secondaryColor(),
|
||||
halfFilledColor: MihColors.getYellowColor(context),
|
||||
// MzansiInnovationHub.of(context)!
|
||||
// .theme
|
||||
// .secondaryColor(),
|
||||
isHalfAllowed: true,
|
||||
initialRating: widget.businessReview != null
|
||||
? double.parse(_reviewScoreController.text)
|
||||
@@ -379,16 +382,11 @@ class _MihReviewBusinessWindowState extends State<MihReviewBusinessWindow> {
|
||||
filledIcon: Icons.star,
|
||||
emptyIcon: Icons.star_border,
|
||||
halfFilledIcon: Icons.star_half,
|
||||
filledColor: MzansiInnovationHub.of(context)!
|
||||
.theme
|
||||
.secondaryColor(),
|
||||
filledColor: MihColors.getYellowColor(context),
|
||||
emptyColor: MzansiInnovationHub.of(context)!
|
||||
.theme
|
||||
.secondaryColor(),
|
||||
halfFilledColor: MzansiInnovationHub.of(context)!
|
||||
.theme
|
||||
.secondaryColor(),
|
||||
isHalfAllowed: true,
|
||||
halfFilledColor: MihColors.getYellowColor(context), isHalfAllowed: true,
|
||||
initialRating: widget.businessReview != null
|
||||
? double.parse(_reviewScoreController.text)
|
||||
: 1,
|
||||
|
||||
@@ -646,6 +646,19 @@ class _MihBusinessDetailsState extends State<MihBusinessDetails> {
|
||||
),
|
||||
),
|
||||
),
|
||||
FittedBox(
|
||||
child: Text(
|
||||
widget.arguments.business!.type,
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: MzansiInnovationHub.of(context)!
|
||||
.theme
|
||||
.secondaryColor(),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
// FittedBox(
|
||||
// child: Text(
|
||||
// "Mission & Vision",
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import 'package:custom_rating_bar/custom_rating_bar.dart';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mzansi_innovation_hub/main.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
|
||||
@@ -130,6 +132,19 @@ class _MihBusinessDetailsViewState extends State<MihBusinessDetailsView> {
|
||||
),
|
||||
),
|
||||
),
|
||||
FittedBox(
|
||||
child: Text(
|
||||
widget.business.type,
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: MzansiInnovationHub.of(context)!
|
||||
.theme
|
||||
.secondaryColor(),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
// FittedBox(
|
||||
// child: Text(
|
||||
// "Mission & Vision",
|
||||
@@ -160,6 +175,24 @@ class _MihBusinessDetailsViewState extends State<MihBusinessDetailsView> {
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
RatingBar.readOnly(
|
||||
size: 50,
|
||||
alignment: Alignment.center,
|
||||
filledIcon: Icons.star,
|
||||
emptyIcon: Icons.star_border,
|
||||
halfFilledIcon: Icons.star_half,
|
||||
filledColor: MihColors.getYellowColor(context),
|
||||
// MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
emptyColor: MzansiInnovationHub.of(context)!.theme.secondaryColor(),
|
||||
halfFilledColor: MihColors.getYellowColor(context),
|
||||
// MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
isHalfAllowed: true,
|
||||
initialRating: widget.business.rating.isNotEmpty
|
||||
? double.parse(widget.business.rating)
|
||||
: 0,
|
||||
maxRating: 5,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
SizedBox(
|
||||
width: 700,
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:mzansi_innovation_hub/main.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart';
|
||||
|
||||
@@ -94,12 +95,12 @@ class _MihBusinessReviewsState extends State<MihBusinessReviews> {
|
||||
filledIcon: Icons.star,
|
||||
emptyIcon: Icons.star_border,
|
||||
halfFilledIcon: Icons.star_half,
|
||||
filledColor: const Color(0xffe9e8a1),
|
||||
filledColor: MihColors.getYellowColor(context),
|
||||
// MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
emptyColor: MzansiInnovationHub.of(context)!
|
||||
.theme
|
||||
.secondaryColor(),
|
||||
halfFilledColor: const Color(0xffe9e8a1),
|
||||
halfFilledColor: MihColors.getYellowColor(context),
|
||||
// MzansiInnovationHub.of(context)!.theme.primaryColor(),
|
||||
// filledColor:
|
||||
// MzansiInnovationHub.of(context)!.theme.secondaryColor(),
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
|
||||
<meta name="description"
|
||||
content="Digitizing Mzansi one process at a time. Discover essential Mzansi apps to streamline your personal and professional life. Simplify your daily tasks with our user-friendly solutions.">
|
||||
content="MIH, the first Mzansi super app by Mzansi Innovation Hub. Streamline your life with Mzansi Profile, Wallet, Patient Manager, AI, Directory, Calendar, Calculator, & secure MIH Access. Unify social, business & personal tools.">
|
||||
|
||||
<!-- iOS meta tags & icons -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
@@ -20,7 +20,7 @@
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" href="favicon.ico">
|
||||
|
||||
<title>Mzansi Innovation Hub</title>
|
||||
<title>MIH App: Mzansi Innovation Hub - All-in-One Super App for Business & Personal Life</title>
|
||||
<link rel="manifest" href="manifest.json">
|
||||
|
||||
<!-- test stuff for speed -->
|
||||
@@ -138,9 +138,78 @@
|
||||
document.body.style.background = "transparent";
|
||||
}
|
||||
</script>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "http://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "MIH App",
|
||||
"alternateName": "Mzansi Innovation Hub App",
|
||||
"applicationCategory": "ProductivityApplication",
|
||||
"operatingSystem": ["Android", "iOS", "Web"],
|
||||
"description": "MIH, the first super app of Mzansi, streamlines personal and business life with features like Mzansi Profile, Wallet, Patient Manager, AI, Directory, Calendar, Calculator, and MIH Access.",
|
||||
"softwareRequirements": "Internet connection",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0",
|
||||
"priceCurrency": "ZAR"
|
||||
},
|
||||
"url": "https://app.mzansi-innovation-hub.co.za/",
|
||||
"sameAs": [
|
||||
"https://play.google.com/store/apps/details?id=za.co.mzansiinnovationhub.mih&hl=en_ZA",
|
||||
"https://apps.apple.com/za/app/mih-app-mzansi-innovation-hub/id6743310890"
|
||||
],
|
||||
"featureList": [
|
||||
"Mzansi Profile (Personal & Business)",
|
||||
"Mzansi Wallet (Loyalty Cards)",
|
||||
"Patient Manager (Appointment Scheduling)",
|
||||
"Mzansi AI (Chat Assistant)",
|
||||
"Mzansi Directory (People & Businesses)",
|
||||
"Integrated Calendar",
|
||||
"Calculator (Tips & Forex)",
|
||||
"MIH Access (Profile Security Management)"
|
||||
],
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "Mzansi Innovation Hub"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="seo-content" style="display:none;">
|
||||
<h1>Mzansi Innovation Hub (MIH) - Your All-in-One Super App for South Africa</h1>
|
||||
<p>Tired of juggling multiple apps? Mzansi Innovation Hub (MIH) presents the first super app designed specifically for the people and businesses of Mzansi. MIH is your unified online information technology system to streamline both your personal and professional life, bridging the socio-economic divide during the digital revolution.</p>
|
||||
|
||||
<h2>Key Features of the MIH Super App:</h2>
|
||||
<ul>
|
||||
<li><strong>Mzansi Profile:</strong> Effortlessly manage your professional profile, personal information, and valuable business team details. Amplify your online presence.</li>
|
||||
<li><strong>Mzansi Wallet:</strong> Go digital! Securely store all your loyalty cards in one convenient place, reducing clutter.</li>
|
||||
<li><strong>Patient Manager:</strong> Revolutionize medical practices with seamless patient appointment scheduling and efficient data management.</li>
|
||||
<li><strong>Mzansi AI:</strong> Get instant support and quick answers with our friendly AI assistant, available 24/7.</li>
|
||||
<li><li><strong>Mzansi Directory:</strong> Discover and connect with people and businesses across Mzansi.</li>
|
||||
<li><strong>Calendar:</strong> Stay perfectly organized with an integrated calendar for all your personal and business appointments.</li>
|
||||
<li><strong>Calculator:</strong> Perform quick calculations, including tips and forex, right within the app.</li>
|
||||
<li><strong>MIH Access:</strong> Take control of your security. Easily manage and view who has access to your profile and data.</li>
|
||||
</ul>
|
||||
|
||||
<p>MIH simplifies daily tasks, reduces costs, and helps you manage your professional profile, team, and appointments all from a single, user-friendly platform. It's the essential mobile app for business owners and individuals looking to streamline their online presence in South Africa.</p>
|
||||
|
||||
<h3>Download the MIH Super App Today!</h3>
|
||||
<p>Available for Android and iOS. Search "Mzansi Innovation Hub" or "MIH App" on your app store.</p>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Hide the SEO content once the Flutter app starts to load
|
||||
window.addEventListener('load', function() {
|
||||
const seoContent = document.getElementById('seo-content');
|
||||
if (seoContent) {
|
||||
seoContent.style.display = 'none'; // Or 'hidden'
|
||||
}
|
||||
});
|
||||
// You might need to adjust this script to ensure it hides *after* the Flutter app's visual elements are fully rendered.
|
||||
// A more robust solution might involve listening for a Flutter-specific event when the app is ready.
|
||||
</script>
|
||||
<picture id="splash-branding">
|
||||
<source
|
||||
srcset="splash/img/branding-1x.png 1x, splash/img/branding-2x.png 2x, splash/img/branding-3x.png 3x, splash/img/branding-4x.png 4x"
|
||||
@@ -148,7 +217,7 @@
|
||||
<source
|
||||
srcset="splash/img/branding-dark-1x.png 1x, splash/img/branding-dark-2x.png 2x, splash/img/branding-dark-3x.png 3x, splash/img/branding-dark-4x.png 4x"
|
||||
media="(prefers-color-scheme: dark)">
|
||||
<img class="bottom" aria-hidden="true" src="splash/img/branding-1x.png" alt="">
|
||||
<img class="bottom" aria-hidden="true" src="splash/img/branding-1x.png" alt="Mzansi Innovation Hub Branding Logo">
|
||||
</picture>
|
||||
<picture id="splash">
|
||||
<source
|
||||
@@ -157,7 +226,7 @@
|
||||
<source
|
||||
srcset="splash/img/dark-1x.png 1x, splash/img/dark-2x.png 2x, splash/img/dark-3x.png 3x, splash/img/dark-4x.png 4x"
|
||||
media="(prefers-color-scheme: dark)">
|
||||
<img class="center" aria-hidden="true" src="splash/img/light-1x.png" alt="">
|
||||
<img class="center" aria-hidden="true" src="splash/img/light-1x.png" alt="MIH App Splash Screen Logo">
|
||||
</picture>
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
75
backend/mih_database/mihDbConnections.py
Normal file
75
backend/mih_database/mihDbConnections.py
Normal file
@@ -0,0 +1,75 @@
|
||||
from sqlalchemy import create_engine
|
||||
import mysql.connector
|
||||
from urllib.parse import quote_plus
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
dbUser = os.getenv("DB_USER")
|
||||
dbPass = os.getenv("DB_PASSWD")
|
||||
dbHost = "mysqldb"
|
||||
dbPort = 3306
|
||||
encoded_dbPass = quote_plus(dbPass)
|
||||
base_connect_url = f"mysql+mysqlconnector://{dbUser}:{encoded_dbPass}@{dbHost}:{dbPort}/"
|
||||
|
||||
def dbPatientManagerConnect():
|
||||
return create_engine(base_connect_url+"patient_manager", echo=True, pool_recycle=3600)
|
||||
# return mysql.connector.connect(
|
||||
# host="mysqldb",
|
||||
# user=dbUser,
|
||||
# passwd=dbPass,
|
||||
# database="patient_manager"
|
||||
# )
|
||||
|
||||
def dbAppDataConnect():
|
||||
return create_engine(base_connect_url+"app_data", echo=True, pool_recycle=3600)
|
||||
# return mysql.connector.connect(
|
||||
# host="mysqldb",
|
||||
# user=dbUser,
|
||||
# passwd=dbPass,
|
||||
# database="app_data"
|
||||
# )
|
||||
|
||||
def dbDataAccessConnect():
|
||||
return create_engine(base_connect_url+"data_access", echo=True, pool_recycle=3600)
|
||||
# return mysql.connector.connect(
|
||||
# host="mysqldb",
|
||||
# user=dbUser,
|
||||
# passwd=dbPass,
|
||||
# database="data_access"
|
||||
# )
|
||||
|
||||
def dbMzansiWalletConnect():
|
||||
return create_engine(base_connect_url+"mzansi_wallet", echo=True, pool_recycle=3600)
|
||||
# return mysql.connector.connect(
|
||||
# host="mysqldb",
|
||||
# user=dbUser,
|
||||
# passwd=dbPass,
|
||||
# database="mzansi_wallet"
|
||||
# )
|
||||
|
||||
def dbMzansiDirectoryConnect():
|
||||
return create_engine(base_connect_url+"mzansi_directory", echo=True, pool_recycle=3600)
|
||||
# return mysql.connector.connect(
|
||||
# host="mysqldb",
|
||||
# user=dbUser,
|
||||
# passwd=dbPass,
|
||||
# database="mzansi_directory"
|
||||
# )
|
||||
|
||||
def dbMzansiCalendarConnect():
|
||||
return create_engine(base_connect_url+"mzansi_calendar", echo=True, pool_recycle=3600)
|
||||
# return mysql.connector.connect(
|
||||
# host="mysqldb",
|
||||
# user=dbUser,
|
||||
# passwd=dbPass,
|
||||
# database="mzansi_calendar"
|
||||
# )
|
||||
|
||||
def dbAllConnect():
|
||||
return create_engine(base_connect_url, echo=True, pool_recycle=3600)
|
||||
# return mysql.connector.connect(
|
||||
# host="mysqldb",
|
||||
# user=dbUser,
|
||||
# passwd=dbPass,
|
||||
# )
|
||||
73
backend/mih_database/mihDbObjects.py
Normal file
73
backend/mih_database/mihDbObjects.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from sqlalchemy import DateTime, Column, Integer, String
|
||||
from sqlalchemy.orm import declarative_base
|
||||
Base = declarative_base()
|
||||
|
||||
class User(Base):
|
||||
__tablename__ = 'users'
|
||||
__table_args__ = {'schema': 'app_data'}
|
||||
idusers = Column(Integer, primary_key=True)
|
||||
email = Column(String(128), nullable=False, unique=True)
|
||||
fname = Column(String(128), nullable=False)
|
||||
lname = Column(String(128), nullable=False)
|
||||
type = Column(String(128), nullable=False)
|
||||
app_id = Column(String(128), nullable=False)
|
||||
username = Column(String(128), nullable=False)
|
||||
pro_pic_path = Column(String(128), nullable=False)
|
||||
purpose = Column(String(256), nullable=False, server_default="")
|
||||
|
||||
def __repr__(self):
|
||||
return (
|
||||
f"<User(idusers={self.idusers}, email='{self.email}', "
|
||||
f"fname='{self.fname}', lname='{self.lname}', type='{self.type}', "
|
||||
f"app_id='{self.app_id}', username='{self.username}', "
|
||||
f"pro_pic_path='{self.pro_pic_path}', purpose='{self.purpose}')>"
|
||||
)
|
||||
|
||||
class Business(Base):
|
||||
__tablename__ = 'business'
|
||||
__table_args__ = {'schema': 'app_data'}
|
||||
idbusiness = Column(Integer, primary_key=True)
|
||||
business_id = Column(String(128), nullable=False, unique=True)
|
||||
Name = Column(String(128))
|
||||
type = Column(String(128))
|
||||
registration_no = Column(String(128))
|
||||
logo_name = Column(String(128))
|
||||
logo_path = Column(String(128))
|
||||
contact_no = Column(String(45))
|
||||
bus_email = Column(String(128))
|
||||
gps_location = Column(String(128))
|
||||
practice_no = Column(String(45))
|
||||
vat_no = Column(String(45))
|
||||
website = Column(String(128))
|
||||
rating = Column(String(45), server_default="''") # Changed to match image default
|
||||
mission_vision = Column(String(256))
|
||||
|
||||
def __repr__(self):
|
||||
return (
|
||||
f"<Business(idbusiness={self.idbusiness}, business_id='{self.business_id}', "
|
||||
f"Name='{self.Name}', type='{self.type}', "
|
||||
f"registration_no='{self.registration_no}', logo_name='{self.logo_name}', "
|
||||
f"logo_path='{self.logo_path}', contact_no='{self.contact_no}', "
|
||||
f"bus_email='{self.bus_email}', gps_location='{self.gps_location}', "
|
||||
f"practice_no='{self.practice_no}', vat_no='{self.vat_no}', "
|
||||
f"website='{self.website}', rating='{self.rating}', "
|
||||
f"mission_vision='{self.mission_vision}')>"
|
||||
)
|
||||
|
||||
class BusinessRating(Base):
|
||||
__tablename__ = 'business_ratings'
|
||||
__table_args__ = {'schema': 'mzansi_directory'}
|
||||
idbusiness_ratings = Column(Integer, primary_key=True)
|
||||
app_id = Column(String(128), nullable=False, server_default="")
|
||||
business_id = Column(String(128), nullable=False, server_default="")
|
||||
rating_title = Column(String(128), nullable=False, server_default="")
|
||||
rating_description = Column(String(256), nullable=False, server_default="")
|
||||
rating_score = Column(String(45), nullable=False, server_default="")
|
||||
date_time = Column(DateTime, nullable=True)
|
||||
|
||||
def __repr__(self):
|
||||
return (
|
||||
f"<BusinessRating(idbusiness_ratings={self.idbusiness_ratings}, app_id='{self.app_id}', "
|
||||
f"business_id='{self.business_id}', rating_title='{self.rating_title}', rating_description='{self.rating_description}', "
|
||||
f"rating_score='{self.rating_score}', date_time='{self.date_time}')>"
|
||||
)
|
||||
@@ -1,5 +1,6 @@
|
||||
fastapi
|
||||
uvicorn
|
||||
sqlalchemy
|
||||
mysql-connector-python
|
||||
minio
|
||||
reportlab
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import mysql.connector
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
from datetime import date
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
@@ -32,7 +32,7 @@ class accessExtensionRequest(BaseModel):
|
||||
|
||||
@router.get("/access-requests/{app_id}", tags=["Access Requests"])
|
||||
async def read_all_access_request_by_app_id(app_id: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT patient_queue.idpatient_queue, patient_queue.business_id, "
|
||||
query += "patient_queue.app_id, patient_queue.date_time, patient_queue.access, patient_queue.revoke_date, "
|
||||
@@ -63,7 +63,7 @@ async def read_all_access_request_by_app_id(app_id: str, session: SessionContain
|
||||
|
||||
@router.put("/access-requests/update/", tags=["Access Requests"])
|
||||
async def Update_access_request_approcal(itemRequest : accessUpdateRequest): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update patient_queue "
|
||||
query += "set access=%s"
|
||||
@@ -86,7 +86,7 @@ async def Update_access_request_approcal(itemRequest : accessUpdateRequest): #,
|
||||
|
||||
@router.put("/access-requests/extension/", tags=["Access Requests"])
|
||||
async def Update_access_request_approcal(itemRequest : accessExtensionRequest): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update patient_queue "
|
||||
query += "set access=%s, revoke_date=%s"
|
||||
@@ -111,7 +111,7 @@ async def Update_access_request_approcal(itemRequest : accessExtensionRequest):
|
||||
# # Get List of all files
|
||||
# @router.get("/files/patients/", tags="patients_files")
|
||||
# async def read_all_files(session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "SELECT * FROM patient_files"
|
||||
# cursor.execute(query)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import mysql.connector
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
from datetime import datetime, timedelta, date
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
@@ -32,7 +32,7 @@ class appointmentDeleteRequest(BaseModel):
|
||||
# Get List of all files by patient
|
||||
@router.get("/appointments/business/{business_id}", tags=["Appointments"])
|
||||
async def read_all_appointments_by_business_id(business_id: str, date: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbMzansiCalendarConnect()
|
||||
db = mih_database.dbConnection.dbMzansiCalendarConnect()
|
||||
requestDate = datetime.strptime(date, '%Y-%m-%d').date()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT appointments.idappointments, appointments.app_id, "
|
||||
@@ -60,7 +60,7 @@ async def read_all_appointments_by_business_id(business_id: str, date: str, sess
|
||||
# Get List of all files by patient
|
||||
@router.get("/appointments/personal/{app_id}", tags=["Appointments"])
|
||||
async def read_all_appointments_by_business_id(app_id: str, date: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbMzansiCalendarConnect()
|
||||
db = mih_database.dbConnection.dbMzansiCalendarConnect()
|
||||
requestDate = datetime.strptime(date, '%Y-%m-%d').date()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT appointments.idappointments, appointments.app_id, "
|
||||
@@ -90,7 +90,7 @@ async def read_all_appointments_by_business_id(app_id: str, date: str, session:
|
||||
@router.post("/appointment/insert/", tags=["Appointments"], status_code=201)
|
||||
async def insert_appointment(itemRequest : appointmentInsertRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
date_time = itemRequest.date + " " + itemRequest.time + ":00"
|
||||
db = database.dbConnection.dbMzansiCalendarConnect()
|
||||
db = mih_database.dbConnection.dbMzansiCalendarConnect()
|
||||
cursor = db.cursor()
|
||||
query = "insert into appointments "
|
||||
query += "(app_id, business_id, title, description, date_time) "
|
||||
@@ -117,7 +117,7 @@ async def Update_appointment(itemRequest : appointmentUpdateRequest, session: Se
|
||||
|
||||
date_time = itemRequest.date + " " + itemRequest.time + ":00"
|
||||
|
||||
db = database.dbConnection.dbMzansiCalendarConnect()
|
||||
db = mih_database.dbConnection.dbMzansiCalendarConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update appointments "
|
||||
query += "set date_time=%s, title=%s, description=%s "
|
||||
@@ -140,7 +140,7 @@ async def Update_appointment(itemRequest : appointmentUpdateRequest, session: Se
|
||||
# Update Patient on table
|
||||
@router.delete("/appointment/delete/", tags=["Appointments"])
|
||||
async def Delete_appointment(itemRequest : appointmentDeleteRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbMzansiCalendarConnect()
|
||||
db = mih_database.dbConnection.dbMzansiCalendarConnect()
|
||||
cursor = db.cursor()
|
||||
query = "delete from appointments "
|
||||
query += "where idappointments=%s"
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
from supertokens_python.recipe.session import SessionContainer
|
||||
from fastapi import Depends
|
||||
import uuid
|
||||
|
||||
import database.dbConnection
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
# class userRequest(BaseModel):
|
||||
@@ -64,7 +62,7 @@ class businessUpdateRequestV2(BaseModel):
|
||||
# Get List of all files
|
||||
@router.get("/businesses/search/{search}", tags=["MIH Business"])
|
||||
async def read_all_businesses(search: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT business.business_id, business.Name, business.type, business.registration_no, "
|
||||
query += "business.logo_name, business.logo_path, business.contact_no, business.bus_email, "
|
||||
@@ -103,7 +101,7 @@ async def read_all_businesses(search: str, session: SessionContainer = Depends(v
|
||||
# Get List of all files
|
||||
@router.get("/business/business_id/{business_id}", tags=["MIH Business"])
|
||||
async def read_business_by_business_id(business_id: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT business.business_id, business.Name, business.type, business.registration_no, "
|
||||
query += "business.logo_name, business.logo_path, business.contact_no, business.bus_email, "
|
||||
@@ -150,7 +148,7 @@ async def read_business_by_business_id(business_id: str, session: SessionContain
|
||||
# Get List of all files
|
||||
@router.get("/business/app_id/{app_id}", tags=["MIH Business"])
|
||||
async def read_business_by_app_id(app_id: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT business.business_id, business.Name, business.type, business.registration_no, "
|
||||
query += "business.logo_name, business.logo_path, business.contact_no, business.bus_email, "
|
||||
@@ -195,7 +193,7 @@ async def read_business_by_app_id(app_id: str, session: SessionContainer = Depen
|
||||
# Insert Patient into table
|
||||
@router.post("/business/insert/", tags=["MIH Business"], status_code=201)
|
||||
async def insert_business_details(itemRequest : businessInsertRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "insert into business "
|
||||
query += "(business_id, Name, type, registration_no, logo_name, logo_path, contact_no, bus_email, gps_location, practice_no, vat_no, website, rating, mission_vision) "
|
||||
@@ -230,7 +228,7 @@ async def insert_business_details(itemRequest : businessInsertRequest, session:
|
||||
|
||||
@router.put("/business/update/", tags=["MIH Business"])
|
||||
async def Update_Business_details(itemRequest : businessUpdateRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
# print(itemRequest.gps_location)
|
||||
cursor = db.cursor()
|
||||
query = "update business "
|
||||
@@ -260,7 +258,7 @@ async def Update_Business_details(itemRequest : businessUpdateRequest, session:
|
||||
|
||||
@router.put("/business/update/v2/", tags=["MIH Business"])
|
||||
async def Update_Business_details(itemRequest : businessUpdateRequestV2, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
# print(itemRequest.gps_location)
|
||||
cursor = db.cursor()
|
||||
query = "update business "
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
from supertokens_python.recipe.session import SessionContainer
|
||||
from fastapi import Depends
|
||||
|
||||
import database.dbConnection
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
# class userRequest(BaseModel):
|
||||
@@ -44,7 +42,7 @@ class employeeDeleteRequest(BaseModel):
|
||||
# Get List of all files
|
||||
@router.get("/business-user/{app_id}", tags=["MIH Business_User"])
|
||||
async def read_business_users_by_app_id(app_id: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM business_users where app_id = %s"
|
||||
try:
|
||||
@@ -73,7 +71,7 @@ async def read_business_users_by_app_id(app_id: str, session: SessionContainer =
|
||||
# Get List of all files
|
||||
@router.get("/business-user/employees/{business_id}", tags=["MIH Business_User"])
|
||||
async def read_business_users_by_business_id(business_id: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = ""
|
||||
query += "SELECT business_users.business_id, business_users.app_id, business_users.title, business_users.access, "
|
||||
@@ -108,7 +106,7 @@ async def read_business_users_by_business_id(business_id: str, session: SessionC
|
||||
# Insert Patient into table
|
||||
@router.post("/business-user/insert/", tags=["MIH Business_User"], status_code=201)
|
||||
async def insert_User_details(itemRequest : businessUserInsertRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
checkQuery = "SELECT * FROM business_users where app_id = %s"
|
||||
try:
|
||||
@@ -175,7 +173,7 @@ async def insert_User_details(itemRequest : businessUserInsertRequest, session:
|
||||
# Update User on table
|
||||
@router.put("/business-user/update/", tags=["MIH Business_User"])
|
||||
async def Update_User_details(itemRequest : BusinessUserUpdateRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update business_users "
|
||||
query += "set signature=%s,sig_path=%s, title=%s, access=%s"
|
||||
@@ -200,7 +198,7 @@ async def Update_User_details(itemRequest : BusinessUserUpdateRequest, session:
|
||||
# Update User on table
|
||||
@router.put("/business-user/employees/update/", tags=["MIH Business_User"])
|
||||
async def Update_User_details(itemRequest : EmployeeUpdateRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update business_users "
|
||||
query += "set title=%s, access=%s"
|
||||
@@ -225,7 +223,7 @@ async def Update_User_details(itemRequest : EmployeeUpdateRequest, session: Sess
|
||||
@router.delete("/business-user/employees/delete/", tags=["MIH Business_User"])
|
||||
async def Delete_Patient_note(itemRequest : employeeDeleteRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
# today = date.today()
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "delete from business_users "
|
||||
query += "where business_id=%s "
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import mysql.connector
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
from datetime import date
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
@@ -24,7 +24,7 @@ class claimStatementInsertRequest(BaseModel):
|
||||
# Get List of all files by patient
|
||||
@router.get("/files/claim-statement/patient/{app_id}", tags=["Claim Statement Files"])
|
||||
async def read_all_claim_statement_files_by_app_id(app_id: str, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM claim_statement_file where app_id = %s ORDER BY insert_date DESC"
|
||||
cursor.execute(query, (app_id,))
|
||||
@@ -46,7 +46,7 @@ async def read_all_claim_statement_files_by_app_id(app_id: str, session: Session
|
||||
# Get List of all files by patient
|
||||
@router.get("/files/claim-statement/business/{business_id}", tags=["Claim Statement Files"])
|
||||
async def read_all_claim_statement_files_by_business_id(business_id: str, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM claim_statement_file where business_id = %s ORDER BY insert_date DESC"
|
||||
cursor.execute(query, (business_id,))
|
||||
@@ -69,7 +69,7 @@ async def read_all_claim_statement_files_by_business_id(business_id: str, sessio
|
||||
@router.delete("/files/claim-statement/delete/", tags=["Claim Statement Files"])
|
||||
async def Delete_Patient_File(itemRequest : claimStatementDeleteRequest, session: SessionContainer = Depends(verify_session())): #session: SessionContainer = Depends(verify_session())
|
||||
# today = date.today()
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "delete from claim_statement_file "
|
||||
query += "where idclaim_statement_file=%s"
|
||||
@@ -88,7 +88,7 @@ async def Delete_Patient_File(itemRequest : claimStatementDeleteRequest, session
|
||||
@router.post("/files/claim-statement/insert/", tags=["Claim Statement Files"], status_code=201)
|
||||
async def insert_Patient_Files(itemRequest : claimStatementInsertRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
today = date.today()
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "insert into claim_statement_file "
|
||||
query += "(app_id, business_id, file_path, file_name, insert_date) "
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
import mysql.connector
|
||||
from fastapi import APIRouter, HTTPException
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
from supertokens_python.recipe.session import SessionContainer
|
||||
from fastapi import Depends
|
||||
|
||||
import database.dbConnection
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
# Get Doctors Office By ID
|
||||
@router.get("/docOffices/{docOffic_id}", tags=["Doctor Office"])
|
||||
async def read_docOffice_By_ID(docOffic_id: int, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM doctor_offices WHERE iddoctor_offices=%s"
|
||||
cursor.execute(query, (docOffic_id,))
|
||||
@@ -29,7 +27,7 @@ async def read_docOffice_By_ID(docOffic_id: int, session: SessionContainer = Dep
|
||||
# Get Doctors Office By user
|
||||
@router.get("/docOffices/user/{user}", tags=["Doctor Office"])
|
||||
async def read_docOffice_By_ID(user: str, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM users WHERE email=%s"
|
||||
cursor.execute(query, (user,))
|
||||
@@ -50,7 +48,7 @@ async def read_docOffice_By_ID(user: str, session: SessionContainer = Depends(ve
|
||||
# Get List of all Doctors Office
|
||||
@router.get("/docOffices/", tags=["Doctor Office"])
|
||||
async def read_All_Doctors_Office(session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM doctor_offices"
|
||||
cursor.execute(query)
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from fastapi import APIRouter, HTTPException, status
|
||||
from sqlalchemy import desc
|
||||
from sqlalchemy.orm import Session
|
||||
from pydantic import BaseModel
|
||||
from datetime import datetime
|
||||
import database
|
||||
import mih_database.mihDbConnections
|
||||
from mih_database.mihDbObjects import User, Business, BusinessRating
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
from supertokens_python.recipe.session import SessionContainer
|
||||
from fastapi import Depends
|
||||
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
# class BusinessRatingUserGet(BaseModel):
|
||||
@@ -37,200 +42,254 @@ class BusinessRatingUpdateRequest(BaseModel):
|
||||
|
||||
@router.get("/mzansi-directory/business-ratings/user/{app_id}/{business_id}", tags=["Mzansi Directory"])
|
||||
async def read_all_ratings_by_business_id(app_id: str,business_id: str, session: SessionContainer = Depends(verify_session())): # , session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAllConnect()
|
||||
cursor = db.cursor()
|
||||
query = ""
|
||||
query += "SELECT business_ratings.idbusiness_ratings, business_ratings.app_id, business_ratings.business_id, "
|
||||
query += "business_ratings.rating_title, business_ratings.rating_description, business_ratings.rating_score, "
|
||||
query += "business_ratings.date_time, users.username as 'reviewer' "
|
||||
query += "FROM mzansi_directory.business_ratings "
|
||||
query += "inner join app_data.users "
|
||||
query += "on business_ratings.app_id = users.app_id "
|
||||
query += "where business_ratings.business_id = %s and business_ratings.app_id = %s;"
|
||||
cursor.execute(query, (business_id,
|
||||
app_id,))
|
||||
item = cursor.fetchone() # Get only one row
|
||||
cursor.close()
|
||||
db.close()
|
||||
dbEngine = mih_database.mihDbConnections.dbAllConnect()
|
||||
dbSession = Session(dbEngine)
|
||||
try:
|
||||
queryResults = dbSession.query(BusinessRating, User).\
|
||||
join(User, BusinessRating.app_id == User.app_id).\
|
||||
filter(
|
||||
BusinessRating.business_id == business_id,
|
||||
BusinessRating.app_id == app_id
|
||||
).first()
|
||||
if queryResults:
|
||||
rating_obj, user_obj = queryResults
|
||||
# Return a single dictionary
|
||||
return {
|
||||
"idbusiness_ratings": rating_obj.idbusiness_ratings,
|
||||
"app_id": rating_obj.app_id,
|
||||
"business_id": rating_obj.business_id,
|
||||
"rating_title": rating_obj.rating_title,
|
||||
"rating_description": rating_obj.rating_description,
|
||||
"rating_score": rating_obj.rating_score,
|
||||
"date_time": rating_obj.date_time,
|
||||
"reviewer": user_obj.username,
|
||||
}
|
||||
else:
|
||||
# Return an empty response or a specific message
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Business rating not found for the given app_id and business_id."
|
||||
)
|
||||
except HTTPException as http_exc:
|
||||
# Re-raise HTTPException directly if it was raised within the try block
|
||||
raise http_exc
|
||||
except Exception as e:
|
||||
print(f"An error occurred during the ORM query: {e}")
|
||||
if dbSession.is_active:
|
||||
dbSession.rollback()
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail="Failed to retrieve records due to an internal server error."
|
||||
)
|
||||
finally:
|
||||
dbSession.close()
|
||||
|
||||
if item:
|
||||
# Return a single dictionary
|
||||
return {
|
||||
"idbusiness_ratings": item[0],
|
||||
"app_id": item[1],
|
||||
"business_id": item[2],
|
||||
"rating_title": item[3],
|
||||
"rating_description": item[4],
|
||||
"rating_score": item[5],
|
||||
"date_time": item[6],
|
||||
"reviewer": item[7],
|
||||
}
|
||||
else:
|
||||
# Return an empty response or a specific message
|
||||
return None
|
||||
# items = [
|
||||
# {
|
||||
# "idbusiness_ratings": item[0],
|
||||
# "app_id": item[1],
|
||||
# "business_id": item[2],
|
||||
# "rating_title": item[3],
|
||||
# "rating_description": item[4],
|
||||
# "rating_score": item[5],
|
||||
# "date_time": item[6],
|
||||
# "reviewer": item[7],
|
||||
# }
|
||||
# for item in cursor.fetchall()
|
||||
# ]
|
||||
# cursor.close()
|
||||
# db.close()
|
||||
# return items[0]
|
||||
|
||||
@router.get("/mzansi-directory/business-ratings/all/{business_id}", tags=["Mzansi Directory"])
|
||||
async def read_all_ratings_by_business_id(business_id: str, session: SessionContainer = Depends(verify_session())): # , session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAllConnect()
|
||||
cursor = db.cursor()
|
||||
query = ""
|
||||
query += "SELECT business_ratings.idbusiness_ratings, business_ratings.app_id, business_ratings.business_id, "
|
||||
query += "business_ratings.rating_title, business_ratings.rating_description, business_ratings.rating_score, "
|
||||
query += "business_ratings.date_time, users.username as 'reviewer' "
|
||||
query += "FROM mzansi_directory.business_ratings "
|
||||
query += "inner join app_data.users "
|
||||
query += "on business_ratings.app_id = users.app_id "
|
||||
query += "where business_ratings.business_id = %s "
|
||||
query += "order by business_ratings.date_time desc;"
|
||||
cursor.execute(query, (business_id,))
|
||||
items = [
|
||||
{
|
||||
"idbusiness_ratings": item[0],
|
||||
"app_id": item[1],
|
||||
"business_id": item[2],
|
||||
"rating_title": item[3],
|
||||
"rating_description": item[4],
|
||||
"rating_score": item[5],
|
||||
"date_time": item[6],
|
||||
"reviewer": item[7],
|
||||
}
|
||||
for item in cursor.fetchall()
|
||||
]
|
||||
cursor.close()
|
||||
db.close()
|
||||
return items
|
||||
dbEngine = mih_database.mihDbConnections.dbAllConnect()
|
||||
dbSession = Session(dbEngine)
|
||||
try:
|
||||
queryResults = dbSession.query(BusinessRating, User).\
|
||||
join(User, BusinessRating.app_id == User.app_id).\
|
||||
filter(
|
||||
BusinessRating.business_id == business_id,
|
||||
).order_by(
|
||||
desc(BusinessRating.date_time)
|
||||
).all()
|
||||
response_data = []
|
||||
for rating_obj, user_obj in queryResults:
|
||||
response_data.append({
|
||||
"idbusiness_ratings": rating_obj.idbusiness_ratings,
|
||||
"app_id": rating_obj.app_id,
|
||||
"business_id": rating_obj.business_id,
|
||||
"rating_title": rating_obj.rating_title,
|
||||
"rating_description": rating_obj.rating_description,
|
||||
"rating_score": rating_obj.rating_score,
|
||||
"date_time": rating_obj.date_time,
|
||||
"reviewer": user_obj.username,
|
||||
})
|
||||
if len(response_data) > 0:
|
||||
return response_data
|
||||
else:
|
||||
# Return an empty response or a specific message
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Business rating not found for the given business_id."
|
||||
)
|
||||
except HTTPException as http_exc:
|
||||
# Re-raise HTTPException directly if it was raised within the try block
|
||||
raise http_exc
|
||||
except Exception as e:
|
||||
print(f"An error occurred during the ORM query: {e}")
|
||||
if dbSession.is_active:
|
||||
dbSession.rollback()
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail="Failed to retrieve records due to an internal server error."
|
||||
)
|
||||
finally:
|
||||
dbSession.close()
|
||||
|
||||
@router.post("/mzansi-directory/business-rating/insert/", tags=["Mzansi Directory"], status_code=201)
|
||||
async def insert_loyalty_card(itemRequest : BusinessRatingInsertRequest): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAllConnect()
|
||||
dbEngine = mih_database.mihDbConnections.dbAllConnect()
|
||||
nowDateTime = datetime.now()
|
||||
formatedDateTime = nowDateTime.strftime("%Y-%m-%d %H:%M:%S")
|
||||
cursor = db.cursor()
|
||||
dbSession = Session(dbEngine)
|
||||
try:
|
||||
# Get No Of reviews for business
|
||||
businessReviewCountQuery = "select count(*) from mzansi_directory.business_ratings where business_ratings.business_id = %s"
|
||||
countData = (itemRequest.business_id,)
|
||||
cursor.execute(businessReviewCountQuery, countData)
|
||||
countResult = cursor.fetchone()
|
||||
row_count = countResult[0] if countResult else 0
|
||||
print(f"Number of rows in business_ratings: {row_count}")
|
||||
businessReviewCountQueryResults = dbSession.query(BusinessRating).\
|
||||
filter(
|
||||
BusinessRating.business_id == itemRequest.business_id,
|
||||
).all()
|
||||
businessReviewCount = len(businessReviewCountQueryResults)
|
||||
print(f"Number of rows in business_ratings: {businessReviewCount}")
|
||||
dbSession.flush() # Ensure the session is flushed before adding new records
|
||||
# add business rating
|
||||
addQuery = "insert into mzansi_directory.business_ratings "
|
||||
addQuery += "(business_ratings.app_id, business_ratings.business_id, business_ratings.rating_title, business_ratings.rating_description, business_ratings.rating_score, business_ratings.date_time) "
|
||||
addQuery += "values (%s, %s, %s, %s, %s, %s)"
|
||||
addQueryData = (itemRequest.app_id,
|
||||
itemRequest.business_id,
|
||||
itemRequest.rating_title,
|
||||
itemRequest.rating_description,
|
||||
itemRequest.rating_score,
|
||||
formatedDateTime,
|
||||
)
|
||||
cursor.execute(addQuery, addQueryData)
|
||||
new_rating = BusinessRating(
|
||||
app_id=itemRequest.app_id,
|
||||
business_id=itemRequest.business_id,
|
||||
rating_title=itemRequest.rating_title,
|
||||
rating_description=itemRequest.rating_description,
|
||||
rating_score=itemRequest.rating_score,
|
||||
date_time=formatedDateTime
|
||||
)
|
||||
dbSession.add(new_rating)
|
||||
dbSession.flush() # Ensure the new rating is added to the session
|
||||
# Calc New Rating and update business rating
|
||||
newRating = ((float(itemRequest.current_rating) * row_count) + float(itemRequest.rating_score)) / (row_count + 1)
|
||||
print(f"New Rating: {newRating}")
|
||||
updateBusinessQuery = "update app_data.business "
|
||||
updateBusinessQuery += "set rating = %s "
|
||||
updateBusinessQuery += "where business_id = %s"
|
||||
updateBusinessData = (newRating, itemRequest.business_id)
|
||||
cursor.execute(updateBusinessQuery, updateBusinessData)
|
||||
db.commit()
|
||||
except Exception as error:
|
||||
print(error)
|
||||
raise HTTPException(status_code=404, detail="Failed to Create Record")
|
||||
# return {"message": error}
|
||||
cursor.close()
|
||||
db.close()
|
||||
return {"message": "Successfully Created Record"}
|
||||
newRating = ((float(itemRequest.current_rating) * businessReviewCount) + float(itemRequest.rating_score)) / (businessReviewCount + 1)
|
||||
businessToUpdate = dbSession.query(Business).filter(Business.business_id == itemRequest.business_id).first()
|
||||
if businessToUpdate:
|
||||
businessToUpdate.rating = str(newRating)
|
||||
dbSession.commit()
|
||||
else:
|
||||
# Return an empty response or a specific message
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Business not found for the given business_id."
|
||||
)
|
||||
except HTTPException as http_exc:
|
||||
# Re-raise HTTPException directly if it was raised within the try block
|
||||
raise http_exc
|
||||
except Exception as e:
|
||||
print(f"An error occurred during the ORM query: {e}")
|
||||
if dbSession.is_active:
|
||||
dbSession.rollback()
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail="Failed to insert records due to an internal server error."
|
||||
)
|
||||
finally:
|
||||
dbSession.close()
|
||||
return {"message": "Successfully Created Record"}
|
||||
|
||||
@router.delete("/mzansi-directory/business-rating/delete/", tags=["Mzansi Directory"])
|
||||
async def Delete_loyalty_card(itemRequest : BusinessRatingDeleteRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAllConnect()
|
||||
cursor = db.cursor()
|
||||
dbEngine = mih_database.mihDbConnections.dbAllConnect()
|
||||
dbSession = Session(dbEngine)
|
||||
try:
|
||||
# Get No Of reviews for business
|
||||
businessReviewCountQuery = "select count(*) from mzansi_directory.business_ratings where business_ratings.business_id = %s"
|
||||
countData = (itemRequest.business_id,)
|
||||
cursor.execute(businessReviewCountQuery, countData)
|
||||
countResult = cursor.fetchone()
|
||||
row_count = countResult[0] if countResult else 0
|
||||
print(f"Number of rows in business_ratings: {row_count}")
|
||||
# Delete business rating
|
||||
query = "delete from mzansi_directory.business_ratings "
|
||||
query += "where business_ratings.idbusiness_ratings=%s"
|
||||
cursor.execute(query, (str(itemRequest.idbusiness_ratings),))
|
||||
businessReviewCountQueryResults = dbSession.query(BusinessRating).\
|
||||
filter(
|
||||
BusinessRating.business_id == itemRequest.business_id,
|
||||
).all()
|
||||
businessReviewCount = len(businessReviewCountQueryResults)
|
||||
print(f"Number of rows in business_ratings: {businessReviewCount}")
|
||||
dbSession.flush() # Ensure the session is flushed before adding new records
|
||||
# delete business rating
|
||||
rating_to_delete = dbSession.query(BusinessRating).\
|
||||
get(
|
||||
itemRequest.idbusiness_ratings
|
||||
)
|
||||
if not rating_to_delete:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail=f"Business rating with ID {itemRequest.idbusiness_ratings} not found."
|
||||
)
|
||||
dbSession.delete(rating_to_delete)
|
||||
dbSession.flush() # Ensure the new rating is added to the session
|
||||
# Calc New Rating and update business rating
|
||||
if(row_count <= 1):
|
||||
newRating = 0.0
|
||||
newRating = ((float(itemRequest.current_rating) * businessReviewCount) - float(itemRequest.rating_score)) / (businessReviewCount - 1)
|
||||
businessToUpdate = dbSession.query(Business).filter(Business.business_id == itemRequest.business_id).first()
|
||||
if businessToUpdate:
|
||||
businessToUpdate.rating = str(newRating)
|
||||
dbSession.commit()
|
||||
else:
|
||||
newRating = ((float(itemRequest.current_rating) * row_count) - float(itemRequest.rating_score)) / (row_count - 1)
|
||||
print(f"New Rating: {newRating}")
|
||||
updateBusinessQuery = "update app_data.business "
|
||||
updateBusinessQuery += "set rating = %s "
|
||||
updateBusinessQuery += "where business_id = %s"
|
||||
updateBusinessData = (newRating, itemRequest.business_id)
|
||||
cursor.execute(updateBusinessQuery, updateBusinessData)
|
||||
db.commit()
|
||||
except Exception as error:
|
||||
print(error)
|
||||
raise HTTPException(status_code=404, detail="Failed to Delete Record")
|
||||
cursor.close()
|
||||
db.close()
|
||||
return {"message": "Successfully deleted Record"}
|
||||
# Return an empty response or a specific message
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Business not found for the given business_id."
|
||||
)
|
||||
except HTTPException as http_exc:
|
||||
# Re-raise HTTPException directly if it was raised within the try block
|
||||
raise http_exc
|
||||
except Exception as e:
|
||||
print(f"An error occurred during the ORM query: {e}")
|
||||
if dbSession.is_active:
|
||||
dbSession.rollback()
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail="Failed to insert records due to an internal server error."
|
||||
)
|
||||
finally:
|
||||
dbSession.close()
|
||||
return {"message": "Successfully Deleted Record"}
|
||||
|
||||
@router.put("/mzansi-directory/business-rating/update/", tags=["Mzansi Directory"])
|
||||
async def UpdatePatient(itemRequest : BusinessRatingUpdateRequest, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbMzansiDirectoryConnect()
|
||||
cursor = db.cursor()
|
||||
dbEngine = mih_database.mihDbConnections.dbAllConnect()
|
||||
nowDateTime = datetime.now()
|
||||
formatedDateTime = nowDateTime.strftime("%Y-%m-%d %H:%M:%S")
|
||||
dbSession = Session(dbEngine)
|
||||
try:
|
||||
# Get No Of reviews for business
|
||||
businessReviewCountQuery = "select count(*) from mzansi_directory.business_ratings where business_ratings.business_id = %s"
|
||||
countData = (itemRequest.business_id,)
|
||||
cursor.execute(businessReviewCountQuery, countData)
|
||||
countResult = cursor.fetchone()
|
||||
row_count = countResult[0] if countResult else 0
|
||||
print(f"Number of rows in business_ratings: {row_count}")
|
||||
businessReviewCountQueryResults = dbSession.query(BusinessRating).\
|
||||
filter(
|
||||
BusinessRating.business_id == itemRequest.business_id,
|
||||
).all()
|
||||
businessReviewCount = len(businessReviewCountQueryResults)
|
||||
print(f"Number of rows in business_ratings: {businessReviewCount}")
|
||||
dbSession.flush() # Ensure the session is flushed before adding new records
|
||||
# Update business rating
|
||||
query = "update business_ratings "
|
||||
query += "set rating_title=%s, rating_description=%s, rating_score=%s, date_time=%s "
|
||||
query += "where idbusiness_ratings=%s"
|
||||
notetData = (itemRequest.rating_title,
|
||||
itemRequest.rating_description,
|
||||
itemRequest.rating_new_score,
|
||||
formatedDateTime,
|
||||
itemRequest.idbusiness_ratings,
|
||||
)
|
||||
cursor.execute(query, notetData)
|
||||
# Calc New Rating and update business rating
|
||||
# add new rating and old rating params
|
||||
newRating = ((float(itemRequest.current_rating) * row_count) - float(itemRequest.rating_old_score) + float(itemRequest.rating_new_score)) / (row_count)
|
||||
print(f"New Rating: {newRating}")
|
||||
updateBusinessQuery = "update app_data.business "
|
||||
updateBusinessQuery += "set rating = %s "
|
||||
updateBusinessQuery += "where business_id = %s"
|
||||
updateBusinessData = (newRating, itemRequest.business_id)
|
||||
cursor.execute(updateBusinessQuery, updateBusinessData)
|
||||
db.commit()
|
||||
except Exception as error:
|
||||
raise HTTPException(status_code=404, detail="Failed to Update Record")
|
||||
cursor.close()
|
||||
db.close()
|
||||
return {"message": "Successfully Updated Record"}
|
||||
rating_to_update = dbSession.query(BusinessRating).\
|
||||
get(
|
||||
itemRequest.idbusiness_ratings
|
||||
)
|
||||
if rating_to_update:
|
||||
rating_to_update.rating_title = itemRequest.rating_title
|
||||
rating_to_update.rating_description = itemRequest.rating_description
|
||||
rating_to_update.rating_score = itemRequest.rating_new_score
|
||||
rating_to_update.date_time = formatedDateTime
|
||||
dbSession.flush() # Ensure the new rating is added to the session
|
||||
else:
|
||||
# Return an empty response or a specific message
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Business not found for the given business_id."
|
||||
)
|
||||
# Calc New Rating and update business rating
|
||||
newRating = ((float(itemRequest.current_rating) * businessReviewCount) - float(itemRequest.rating_old_score) + float(itemRequest.rating_new_score)) / (businessReviewCount)
|
||||
businessToUpdate = dbSession.query(Business).filter(Business.business_id == itemRequest.business_id).first()
|
||||
if businessToUpdate:
|
||||
businessToUpdate.rating = str(newRating)
|
||||
dbSession.commit()
|
||||
else:
|
||||
# Return an empty response or a specific message
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Business not found for the given business_id."
|
||||
)
|
||||
except HTTPException as http_exc:
|
||||
# Re-raise HTTPException directly if it was raised within the try block
|
||||
raise http_exc
|
||||
except Exception as e:
|
||||
print(f"An error occurred during the ORM query: {e}")
|
||||
if dbSession.is_active:
|
||||
dbSession.rollback()
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail="Failed to insert records due to an internal server error."
|
||||
)
|
||||
finally:
|
||||
dbSession.close()
|
||||
return {"message": "Successfully wUpdated Record"}
|
||||
@@ -1,8 +1,8 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
from datetime import date
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
from supertokens_python.recipe.session import SessionContainer
|
||||
@@ -38,7 +38,7 @@ class MzansiWalletUpdateRequest(BaseModel):
|
||||
# Get List of all loyalty cards by user
|
||||
@router.get("/mzasni-wallet/loyalty-cards/{app_id}", tags=["Mzansi Wallet"])
|
||||
async def read_all_loyalty_cards_by_app_id(app_id: str, session: SessionContainer = Depends(verify_session())): # , session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbMzansiWalletConnect()
|
||||
db = mih_database.dbConnection.dbMzansiWalletConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM loyalty_cards where app_id = %s ORDER BY shop_name Asc"
|
||||
cursor.execute(query, (app_id,))
|
||||
@@ -61,7 +61,7 @@ async def read_all_loyalty_cards_by_app_id(app_id: str, session: SessionContaine
|
||||
# Get List of favourite loyalty cards by user
|
||||
@router.get("/mzasni-wallet/loyalty-cards/favourites/{app_id}", tags=["Mzansi Wallet"])
|
||||
async def read_favourite_loyalty_cards_by_app_id(app_id: str, session: SessionContainer = Depends(verify_session())): # , session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbMzansiWalletConnect()
|
||||
db = mih_database.dbConnection.dbMzansiWalletConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM loyalty_cards where app_id = %s and favourite != '' ORDER BY priority_index Asc"
|
||||
cursor.execute(query, (app_id,))
|
||||
@@ -84,7 +84,7 @@ async def read_favourite_loyalty_cards_by_app_id(app_id: str, session: SessionCo
|
||||
# Get List of all notes by patient
|
||||
# @router.get("/notes/patients-docOffice/", tags="patients_notes")
|
||||
# async def read_all_patientsby(itemRequest: noteRequest, session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "select patient_notes.idpatient_notes, patient_notes.note_name, patient_notes.note_text, patient_notes.patient_id, patient_notes.insert_date, patients.doc_office_id "
|
||||
# query += "from patient_manager.patient_notes "
|
||||
@@ -108,7 +108,7 @@ async def read_favourite_loyalty_cards_by_app_id(app_id: str, session: SessionCo
|
||||
# Insert loyalty cards into table
|
||||
@router.post("/mzasni-wallet/loyalty-cards/insert/", tags=["Mzansi Wallet"], status_code=201)
|
||||
async def insert_loyalty_card(itemRequest : MzansiWalletInsertRequest): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbMzansiWalletConnect()
|
||||
db = mih_database.dbConnection.dbMzansiWalletConnect()
|
||||
cursor = db.cursor()
|
||||
query = "insert into loyalty_cards "
|
||||
query += "(app_id, shop_name, card_number, favourite, priority_index, nickname) "
|
||||
@@ -135,7 +135,7 @@ async def insert_loyalty_card(itemRequest : MzansiWalletInsertRequest): #, sessi
|
||||
@router.delete("/mzasni-wallet/loyalty-cards/delete/", tags=["Mzansi Wallet"])
|
||||
async def Delete_loyalty_card(itemRequest : LoyaltyCardDeleteRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
# today = date.today()
|
||||
db = database.dbConnection.dbMzansiWalletConnect()
|
||||
db = mih_database.dbConnection.dbMzansiWalletConnect()
|
||||
cursor = db.cursor()
|
||||
query = "delete from loyalty_cards "
|
||||
query += "where idloyalty_cards=%s"
|
||||
@@ -155,7 +155,7 @@ async def Delete_loyalty_card(itemRequest : LoyaltyCardDeleteRequest, session: S
|
||||
@router.put("/mzasni-wallet/loyalty-cards/update/", tags=["Mzansi Wallet"])
|
||||
async def UpdatePatient(itemRequest : MzansiWalletUpdateRequest, session: SessionContainer = Depends(verify_session())):
|
||||
today = date.today()
|
||||
db = database.dbConnection.dbMzansiWalletConnect()
|
||||
db = mih_database.dbConnection.dbMzansiWalletConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update loyalty_cards "
|
||||
query += "set favourite=%s, priority_index=%s, nickname=%s, card_number=%s "
|
||||
|
||||
@@ -2,8 +2,8 @@ import mysql.connector
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
from datetime import datetime, timedelta
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
from supertokens_python.recipe.session import SessionContainer
|
||||
@@ -43,7 +43,7 @@ class notificationInsertRequest(BaseModel):
|
||||
# Get Notifications By app ID
|
||||
@router.get("/notifications/{app_id}", tags=["Notifications"])
|
||||
async def read_notifications_By_app_ID(app_id: str, amount: int, session: SessionContainer = Depends(verify_session())): # , session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
#query = "SELECT * FROM patients"
|
||||
query = "Select * from notifications "
|
||||
@@ -72,7 +72,7 @@ async def read_notifications_By_app_ID(app_id: str, amount: int, session: Sessio
|
||||
# Insert Patient into table
|
||||
@router.post("/notifications/insert/", tags=["Notifications"], status_code=201)
|
||||
async def insert_Patient(itemRequest : notificationInsertRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
now = datetime.now() + timedelta(hours=2)
|
||||
notificationDateTime = now.strftime("%Y-%m-%d %H:%M:%S")
|
||||
print(notificationDateTime)
|
||||
@@ -103,7 +103,7 @@ async def insert_Patient(itemRequest : notificationInsertRequest, session: Sessi
|
||||
# Update Patient on table
|
||||
@router.put("/notifications/update/{notification_id}", tags=["Notifications"])
|
||||
async def Update_Patient(notification_id : str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update notifications "
|
||||
query += "set notification_read=%s "
|
||||
@@ -124,7 +124,7 @@ async def Update_Patient(notification_id : str, session: SessionContainer = Depe
|
||||
# # delete Patient on table
|
||||
# @router.delete("/patients/delete/", tags=["Patients"])
|
||||
# async def Delete_Patient(itemRequest : patientDeleteRequest, session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "delete from patients "
|
||||
# query += "where app_id=%s"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import mysql.connector
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
from datetime import date, datetime, timedelta
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
@@ -29,7 +29,7 @@ class accessRequestReapplyRequest(BaseModel):
|
||||
|
||||
@router.get("/access-requests/{access_type}/check/{business_id}", tags=["Patient Access"])
|
||||
async def check_business_id_has_access(access_type: str,business_id: str, app_id: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "select "
|
||||
query += "patient_business_access.business_id, business.Name, "
|
||||
@@ -73,7 +73,7 @@ async def check_business_id_has_access(access_type: str,business_id: str, app_id
|
||||
|
||||
@router.get("/access-requests/business/{access_type}/{business_id}", tags=["Patient Access"])
|
||||
async def read_all_patient_access_by_business_id(access_type: str,business_id: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "select "
|
||||
query += "patient_business_access.business_id, business.Name, "
|
||||
@@ -115,7 +115,7 @@ async def read_all_patient_access_by_business_id(access_type: str,business_id: s
|
||||
|
||||
@router.get("/access-requests/personal/{access_type}/{app_id}", tags=["Patient Access"])
|
||||
async def read_all_patient_access_by_app_id(access_type: str,app_id: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "select "
|
||||
query += "patient_business_access.business_id, business.Name, "
|
||||
@@ -158,7 +158,7 @@ async def read_all_patient_access_by_app_id(access_type: str,app_id: str, sessio
|
||||
# Insert Patient into table
|
||||
@router.post("/access-requests/insert/", tags=["Patient Access"], status_code=201)
|
||||
async def insert_Patient_access(itemRequest : accessRequestInsertRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbDataAccessConnect()
|
||||
db = mih_database.dbConnection.dbDataAccessConnect()
|
||||
now = datetime.now() + timedelta(hours=2)
|
||||
notificationDateTime = now.strftime("%Y-%m-%d %H:%M:%S")
|
||||
print(notificationDateTime)
|
||||
@@ -190,7 +190,7 @@ async def insert_Patient_access(itemRequest : accessRequestInsertRequest, sessio
|
||||
# Update Patient on table
|
||||
@router.put("/access-requests/update/permission/", tags=["Patient Access"])
|
||||
async def Update_Patient_access(itemRequest: accessRequestUpdateRequest): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbDataAccessConnect()
|
||||
db = mih_database.dbConnection.dbDataAccessConnect()
|
||||
now = datetime.now() + timedelta(hours=2)
|
||||
notificationDateTime = now.strftime("%Y-%m-%d %H:%M:%S")
|
||||
print(notificationDateTime)
|
||||
@@ -218,7 +218,7 @@ async def Update_Patient_access(itemRequest: accessRequestUpdateRequest): #, ses
|
||||
# Reapply Patient on table
|
||||
@router.put("/access-requests/re-apply/", tags=["Patient Access"])
|
||||
async def Reapply_Patient_access(itemRequest: accessRequestReapplyRequest): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbDataAccessConnect()
|
||||
db = mih_database.dbConnection.dbDataAccessConnect()
|
||||
now = datetime.now() + timedelta(hours=2)
|
||||
notificationDateTime = now.strftime("%Y-%m-%d %H:%M:%S")
|
||||
print(notificationDateTime)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import mysql.connector
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
from supertokens_python.recipe.session import SessionContainer
|
||||
@@ -46,7 +46,7 @@ class patientDeleteRequest(BaseModel):
|
||||
# # Get Patient By ID Number
|
||||
# @router.get("/patients/search/{search}", tags=["Patients"])
|
||||
# async def read_patientByID(search: str): #, session: SessionContainer = Depends(verify_session())
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "SELECT * FROM patients WHERE idpatients like %%%s%%" % search
|
||||
# #return {"query": query}
|
||||
@@ -72,7 +72,7 @@ class patientDeleteRequest(BaseModel):
|
||||
# Get Patient By app ID
|
||||
@router.get("/patients/{app_id}", tags=["Patients"])
|
||||
async def read_patient_By_app_ID(app_id: str, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM patients WHERE app_id=%s"
|
||||
cursor.execute(query, (app_id,))
|
||||
@@ -99,7 +99,7 @@ async def read_patient_By_app_ID(app_id: str, session: SessionContainer = Depend
|
||||
# # Get Patient By ID Number
|
||||
# @router.get("/patients/email/{email}", tags="patients")
|
||||
# async def read_patientByID(email: str, session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "SELECT * FROM patients WHERE lower(email)=%s"
|
||||
# cursor.execute(query, (email.lower(),))
|
||||
@@ -126,7 +126,7 @@ async def read_patient_By_app_ID(app_id: str, session: SessionContainer = Depend
|
||||
# Get List of all patients
|
||||
@router.get("/patients/search/{search}", tags=["Patients"])
|
||||
async def read_all_patientsByUser(search: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
#query = "SELECT * FROM patients"
|
||||
query = "Select * from patients "
|
||||
@@ -160,7 +160,7 @@ async def read_all_patientsByUser(search: str, session: SessionContainer = Depen
|
||||
# # Get List of all patients
|
||||
# @router.get("/patients/", tags="patients")
|
||||
# async def read_all_patients(session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "SELECT * FROM patients"
|
||||
# cursor.execute(query)
|
||||
@@ -187,7 +187,7 @@ async def read_all_patientsByUser(search: str, session: SessionContainer = Depen
|
||||
# # Get List of all patients by Doctors Office
|
||||
# @router.get("/patients/docOffice/{docoff_id}", tags="patients")
|
||||
# async def read_all_patientsby(docoff_id: str, session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "SELECT * FROM patients where doc_office_id=%s"
|
||||
# cursor.execute(query, (docoff_id,))
|
||||
@@ -214,7 +214,7 @@ async def read_all_patientsByUser(search: str, session: SessionContainer = Depen
|
||||
# Insert Patient into table
|
||||
@router.post("/patients/insert/", tags=["Patients"], status_code=201)
|
||||
async def insert_Patient(itemRequest : patientInsertRequest, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "insert into patients "
|
||||
query += "(id_no, first_name, last_name, email, cell_no, medical_aid, "
|
||||
@@ -247,7 +247,7 @@ async def insert_Patient(itemRequest : patientInsertRequest, session: SessionCon
|
||||
# Update Patient on table
|
||||
@router.put("/patients/update/", tags=["Patients"])
|
||||
async def Update_Patient(itemRequest : patientUpdateRequest, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update patients "
|
||||
query += "set id_no=%s, first_name=%s, last_name=%s, email=%s, cell_no=%s, medical_aid=%s, "
|
||||
@@ -281,7 +281,7 @@ async def Update_Patient(itemRequest : patientUpdateRequest, session: SessionCon
|
||||
# delete Patient on table
|
||||
@router.delete("/patients/delete/", tags=["Patients"])
|
||||
async def Delete_Patient(itemRequest : patientDeleteRequest, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "delete from patients "
|
||||
query += "where app_id=%s"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import mysql.connector
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
from datetime import date
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
@@ -22,7 +22,7 @@ class fileInsertRequest(BaseModel):
|
||||
# # Get List of all files
|
||||
# @router.get("/files/patients/", tags="patients_files")
|
||||
# async def read_all_files(session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "SELECT * FROM patient_files"
|
||||
# cursor.execute(query)
|
||||
@@ -43,7 +43,7 @@ class fileInsertRequest(BaseModel):
|
||||
# Get List of all files by patient
|
||||
@router.get("/patient_files/get/{app_id}", tags=["Patients Files"])
|
||||
async def read_all_patient_files_by_app_id(app_id: str, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM patient_files where app_id = %s ORDER BY insert_date DESC"
|
||||
cursor.execute(query, (app_id,))
|
||||
@@ -64,7 +64,7 @@ async def read_all_patient_files_by_app_id(app_id: str, session: SessionContaine
|
||||
# # Get List of all files by patient & DocOffice
|
||||
# @router.get("/files/patients-docOffice/", tags="patients_files")
|
||||
# async def read_all_files_by_patient(itemRequest: fileRequest, session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "select patient_files.idpatient_files, patient_files.file_path, patient_files.file_name, patient_files.patient_id, patient_files.insert_date, patients.doc_office_id "
|
||||
# query += "from patient_manager.patient_files "
|
||||
@@ -92,7 +92,7 @@ async def read_all_patient_files_by_app_id(app_id: str, session: SessionContaine
|
||||
@router.delete("/patient_files/delete/", tags=["Patients Files"])
|
||||
async def Delete_Patient_File(itemRequest : fileDeleteRequest, session: SessionContainer = Depends(verify_session())): #session: SessionContainer = Depends(verify_session())
|
||||
# today = date.today()
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "delete from patient_files "
|
||||
query += "where idpatient_files=%s"
|
||||
@@ -111,7 +111,7 @@ async def Delete_Patient_File(itemRequest : fileDeleteRequest, session: SessionC
|
||||
@router.post("/patient_files/insert/", tags=["Patients Files"], status_code=201)
|
||||
async def insert_Patient_Files(itemRequest : fileInsertRequest, session: SessionContainer = Depends(verify_session())):
|
||||
today = date.today()
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "insert into patient_files "
|
||||
query += "(file_path, file_name, insert_date, app_id) "
|
||||
|
||||
@@ -2,8 +2,8 @@ import mysql.connector
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
from datetime import date
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
from supertokens_python.recipe.session import SessionContainer
|
||||
@@ -32,7 +32,7 @@ class patientNoteUpdateRequest(BaseModel):
|
||||
# Get List of all notes
|
||||
# @router.get("/notes/patients/", tags="patients_notes")
|
||||
# async def read_all_notes(session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "SELECT * FROM patient_notes"
|
||||
# cursor.execute(query)
|
||||
@@ -52,7 +52,7 @@ class patientNoteUpdateRequest(BaseModel):
|
||||
# Get List of all notes by patient
|
||||
@router.get("/notes/patients/{app_id}", tags=["Patients Notes"])
|
||||
async def read_all_patient_notes_by_app_id(app_id: str, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM patient_notes where app_id = %s ORDER BY insert_date DESC"
|
||||
cursor.execute(query, (app_id,))
|
||||
@@ -75,7 +75,7 @@ async def read_all_patient_notes_by_app_id(app_id: str, session: SessionContaine
|
||||
# Get List of all notes by patient
|
||||
# @router.get("/notes/patients-docOffice/", tags="patients_notes")
|
||||
# async def read_all_patientsby(itemRequest: noteRequest, session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "select patient_notes.idpatient_notes, patient_notes.note_name, patient_notes.note_text, patient_notes.patient_id, patient_notes.insert_date, patients.doc_office_id "
|
||||
# query += "from patient_manager.patient_notes "
|
||||
@@ -100,7 +100,7 @@ async def read_all_patient_notes_by_app_id(app_id: str, session: SessionContaine
|
||||
@router.post("/notes/insert/", tags=["Patients Notes"], status_code=201)
|
||||
async def insert_Patient_Note(itemRequest : patientNoteInsertRequest, session: SessionContainer = Depends(verify_session())):
|
||||
today = date.today()
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "insert into patient_notes "
|
||||
query += "(note_name, note_text, insert_date, doc_office, doctor, app_id) "
|
||||
@@ -126,7 +126,7 @@ async def insert_Patient_Note(itemRequest : patientNoteInsertRequest, session: S
|
||||
@router.delete("/notes/delete/", tags=["Patients Notes"])
|
||||
async def Delete_Patient_note(itemRequest : noteDeleteRequest, session: SessionContainer = Depends(verify_session()) ): #session: SessionContainer = Depends(verify_session())
|
||||
# today = date.today()
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "delete from patient_notes "
|
||||
query += "where idpatient_notes=%s"
|
||||
@@ -145,7 +145,7 @@ async def Delete_Patient_note(itemRequest : noteDeleteRequest, session: SessionC
|
||||
# @router.put("/notes/update/", tags="patients_notes")
|
||||
# async def UpdatePatient(itemRequest : patientNoteUpdateRequest, session: SessionContainer = Depends(verify_session())):
|
||||
# today = date.today()
|
||||
# db = database.dbConnection.dbPatientManagerConnect()
|
||||
# db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "update patient_notes "
|
||||
# query += "set note_name=%s, note_text=%s, patient_id=%s, insert_date=%s "
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import mysql.connector
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
from datetime import datetime, timedelta, date
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
@@ -31,7 +31,7 @@ class queueDeleteRequest(BaseModel):
|
||||
# Get List of all files by patient
|
||||
@router.get("/queue/appointments/business/{business_id}", tags=["Patients Queue"])
|
||||
async def read_all_patient_queue_by_business_id(business_id: str, date: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
requestDate = datetime.strptime(date, '%Y-%m-%d').date()
|
||||
#print("request date: " + str(requestDate))
|
||||
cursor = db.cursor()
|
||||
@@ -73,7 +73,7 @@ async def read_all_patient_queue_by_business_id(business_id: str, date: str, ses
|
||||
# Get List of all files by patient
|
||||
@router.get("/queue/appointments/personal/{app_id}", tags=["Patients Queue"])
|
||||
async def read_all_patient_queue_by_business_id(app_id: str, date: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
requestDate = datetime.strptime(date, '%Y-%m-%d').date()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT patient_queue.idpatient_queue, patient_queue.business_id, "
|
||||
@@ -109,7 +109,7 @@ async def read_all_patient_queue_by_business_id(app_id: str, date: str, session:
|
||||
@router.post("/queue/appointment/insert/", tags=["Patients Queue"], status_code=201)
|
||||
async def insert_Patient_Files(itemRequest : queueInsertRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
date_time = itemRequest.date + " " + itemRequest.time + ":00"
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "insert into patient_queue "
|
||||
query += "(business_id, app_id, date_time) "
|
||||
@@ -134,7 +134,7 @@ async def Update_Queue(itemRequest : queueUpdateRequest, session: SessionContain
|
||||
|
||||
date_time = itemRequest.date + " " + itemRequest.time + ":00"
|
||||
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update patient_queue "
|
||||
query += "set date_time=%s "
|
||||
@@ -155,7 +155,7 @@ async def Update_Queue(itemRequest : queueUpdateRequest, session: SessionContain
|
||||
# Update Patient on table
|
||||
@router.delete("/queue/appointment/delete/", tags=["Patients Queue"])
|
||||
async def Delete_Queue(itemRequest : queueDeleteRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbPatientManagerConnect()
|
||||
db = mih_database.dbConnection.dbPatientManagerConnect()
|
||||
cursor = db.cursor()
|
||||
query = "delete from patient_queue "
|
||||
query += "where idpatient_queue=%s"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
#from ..database import dbConnection
|
||||
import database
|
||||
#from ..mih_database import dbConnection
|
||||
import mih_database
|
||||
#SuperToken Auth from front end
|
||||
from supertokens_python.recipe.session.framework.fastapi import verify_session
|
||||
from supertokens_python.recipe.session import SessionContainer
|
||||
@@ -9,7 +9,7 @@ from supertokens_python.asyncio import delete_user
|
||||
|
||||
from fastapi import Depends
|
||||
|
||||
import database.dbConnection
|
||||
import mih_database.dbConnection
|
||||
import Minio_Storage.minioConnection
|
||||
|
||||
router = APIRouter()
|
||||
@@ -46,7 +46,7 @@ class userDeleteRequest(BaseModel):
|
||||
# #get user by email & doc Office ID
|
||||
# @router.get("/users/profile/{email}", tags="users")
|
||||
# async def read_all_users(email: str, session: SessionContainer = Depends(verify_session())):
|
||||
# db = database.dbConnection.dbAppDataConnect()
|
||||
# db = mih_database.dbConnection.dbAppDataConnect()
|
||||
# cursor = db.cursor()
|
||||
# query = "SELECT * FROM users where email = %s"
|
||||
# cursor.execute(query, (email.lower(),))
|
||||
@@ -70,7 +70,7 @@ class userDeleteRequest(BaseModel):
|
||||
# Get List of all files
|
||||
@router.get("/users/search/{search}", tags=["MIH Users"])
|
||||
async def read_all_users(search: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = ""
|
||||
query += "SELECT * FROM users "
|
||||
@@ -101,7 +101,7 @@ async def read_all_users(search: str, session: SessionContainer = Depends(verify
|
||||
# Get List of all files
|
||||
@router.get("/users/validate/username/{username}", tags=["MIH Users"])
|
||||
async def read_all_users(username: str, session: SessionContainer = Depends(verify_session()) ): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM users WHERE LOWER(username) = %s"
|
||||
# search_term = f"%{username.lower()}%" # Add wildcards and lowercase
|
||||
@@ -114,7 +114,7 @@ async def read_all_users(username: str, session: SessionContainer = Depends(veri
|
||||
# Get List of all files
|
||||
@router.get("/user/{app_id}", tags=["MIH Users"])
|
||||
async def read_users_by_app_id(app_id: str, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "SELECT * FROM users where app_id = %s"
|
||||
cursor.execute(query, (app_id,))
|
||||
@@ -139,7 +139,7 @@ async def read_users_by_app_id(app_id: str, session: SessionContainer = Depends(
|
||||
# Insert Patient into table
|
||||
@router.post("/user/insert/", tags=["MIH Users"], status_code=201)
|
||||
async def insert_User_details(itemRequest : userInsertRequest, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "insert into users "
|
||||
query += "(email, fname, lname, type, app_id, username, pro_pic_path, purpose) "
|
||||
@@ -159,7 +159,7 @@ async def insert_User_details(itemRequest : userInsertRequest, session: SessionC
|
||||
# Update User on table
|
||||
@router.put("/user/update/v2/", tags=["MIH Users"])
|
||||
async def Update_User_details(itemRequest : userUpdateRequestV2, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update users "
|
||||
query += "set username=%s, fname=%s, lname=%s, type=%s, pro_pic_path=%s, purpose=%s "
|
||||
@@ -185,7 +185,7 @@ async def Update_User_details(itemRequest : userUpdateRequestV2, session: Sessio
|
||||
# Update User on table
|
||||
@router.put("/user/update/", tags=["MIH Users"])
|
||||
async def Update_User_details(itemRequest : userUpdateRequest, session: SessionContainer = Depends(verify_session())):
|
||||
db = database.dbConnection.dbAppDataConnect()
|
||||
db = mih_database.dbConnection.dbAppDataConnect()
|
||||
cursor = db.cursor()
|
||||
query = "update users "
|
||||
query += "set username=%s, fname=%s, lname=%s, type=%s, pro_pic_path=%s "
|
||||
@@ -210,7 +210,7 @@ async def Update_User_details(itemRequest : userUpdateRequest, session: SessionC
|
||||
# Get List of all files
|
||||
@router.delete("/user/delete/all/", tags=["MIH Users"])
|
||||
async def delete_users_data_by_app_id(itemRequest: userDeleteRequest, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session())
|
||||
db = database.dbConnection.dbAllConnect()
|
||||
db = mih_database.dbConnection.dbAllConnect()
|
||||
cursor = db.cursor()
|
||||
db.start_transaction()
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user