# Medical Appointments System (First draft)
## :memo: Project Description!
**Medical appointments' system.**
- [x] A virtual session is represented as a recorded video that prompts patients to answer particular questions and based on the answers by yes or no, the best specialist will be selected for the case.
- [x] Using a calendar, Auto-select for the appointment from available hours for the specialist.
- [x] Payment stage is followed by an appointment confirmation email in case of payment success.
- [x] Reminder email one hour earlier from the session beginning.
- [x] Email message that informs that the session is starting.
## Working Stack
### BackEnd ⚙️🛠
| Service | Options |
| ----------------- |:----------------------- |
| Server |[AWS Lambda(Serverless)], [Expressjs]
| Database | [MySql], [Amazon Aurora], [PostgreSQL], [MongoDb] |
| Mailing system | [Nodemailer], [AWS SNS] |
| Storage | [AWS S3] |
| Authentication | [auth0], [AWS Cognito], [Passport], [Firebase], [JWT Token] |
| Payment | [PayPal], [Stripe], *cryptocurrency* |
[Expressjs]:https://expressjs.com/
[AWS Lambda(Serverless)]:https://aws.amazon.com/lambda/
[MySql]:https://www.mysql.com/
[MongoDb]:https://www.mongodb.com/
[Amazon Aurora]:https://aws.amazon.com/rds/aurora/?aurora-whats-new.sort-by=item.additionalFields.postDateTime&aurora-whats-new.sort-order=desc
[PostgreSQL]:https://www.postgresql.org/
[Nodemailer]:https://nodemailer.com/about/
[AWS SNS]:https://aws.amazon.com/sns/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc
[AWS S3]:https://aws.amazon.com/s3/
[auth0]:https://auth0.com/
[AWS Cognito]:https://aws.amazon.com/cognito/
[Passport]:https://www.passportjs.org/
[Firebase]:https://firebase.google.com/docs/auth/web/custom-auth
[JWT Token]:https://jwt.io/
[PayPal]:https://developer.paypal.com/home
[Stripe]:https://stripe.com/docs/development
### FrontEnd 👓🖥
[ReactJS..](https://ar.reactjs.org/)
---
## Database 💾 🗄
### Tables
#### Users
| column | datatype |required|
| ----------------- |:----------------------- |-----|
| user_id | varchar(50) |true|
| user_name | varchar(50) |false|
| email | varchar(50) |true|
| pass | varchar(50) |true|
| type | varchar(50) |true|
| created_at | datetime |true|
#### appointments
| column | datatype |required|
| ----------------- |:----------------------- |-----|
| id | varchar(50) |true|
| patient_id | varchar(50) |false|
| doctor_id | varchar(50) |true|
| patient_name | varchar(50) |fasle|
| date | datetime |true|
| description | text |true|
| first_appointment | boolean |true|
| email | varchar(50) |true|
| in_session | boolean |true|
| created_at | datetime |true|
#### working_schedules
| column | datatype |required|
| ----------------- |:----------------------- |-----|
| id | varchar(50) |true|
| doctor_id | varchar(50) |true|
| from_date | datetime |true|
| hours | varchar(50) |true|
| created_at | datetime |true|
#### holidays
| column | datatype |required|
| ----------------- |:----------------------- |-----|
| id | varchar(50) |true|
| fromDay | datetime |true|
| toDay | datetime |true|
| reason | varchar(255) |true|
| created_at | datetime |true|
#### noattendance
| column | datatype |required|
| ----------------- |:----------------------- |-----|
| id | varchar(50) |true|
| doctor_id | varchar(50) |true|
| from_date | datetime |true|
| to_date | datetime |true|
| reason | varchar(255) |true|
| created_at | datetime |true|
#### posts
| column | datatype |required|
| ----------------- |:----------------------- |-----|
| id | varchar(50) |true|
| author_id | varchar(50) |false|
| post_quote | varchar(50) |true|
| post_date | datetime |true|
| post_content | text |true|
| post_title | text |false|
| comments_count |int |true|
| comments_list | varchar(50) |true|
| post_type | varchar(50) |false|
| modify_date | datetime |false|
| created_at | datetime |true|
#### comments
| column | datatype |required|
| ----------------- |:----------------------- |-----|
| id | varchar(50) |true|
| author_id | varchar(50) |false|
| post_id | varchar(50) |true|
| author_alias | varchar(50) |true|
| comment_date | datetime |true|
| comment_content | text |true|
| author_email | varchar(50) |true|
| comment_type | varchar(50) |false|
| modify_date | datetime |false|
| created_at | datetime |true|
### Schema

[ToC]