Skip to content

Commit

Permalink
Merge pull request #34 from moevm/frontend
Browse files Browse the repository at this point in the history
Доработка макета
  • Loading branch information
kaidux22 authored Dec 24, 2024
2 parents 3f7a6cc + 25f6f79 commit 231126d
Show file tree
Hide file tree
Showing 37 changed files with 1,984 additions and 155 deletions.
3 changes: 3 additions & 0 deletions backend/app/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
from flask import Flask
from flask_cors import CORS
import os
import requests
from app.models.neo4jConnection import Neo4jConnection

app = Flask(__name__, static_folder='static')

cors = CORS(app, resources={r"/api/*": {"origins": ["http://localhost:4200", "http://localhost:8080"]}})

app.secret_key = ' key'
app.config['JSON_AS_ASCII'] = False

Expand Down
30 changes: 26 additions & 4 deletions backend/app/default_dump.csv
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
type,fullname,mail,password,sex,age,height,weight,admin,birthday,last_update,registration_date,disease_name,disease_description,disease_recommendations,disease_type,disease_course,symptom_name,symptom_description,analysis_name,analysis_source,relation_from,relation_to,symptom_weight,appeal_date,appeal_complaints
Patient,Шушков Егор,[email protected],3214,male,20,182,90,TRUE,2004-04-08 00:00:00,2024-11-08 12:41:12,2024-11-08 12:41:12,,,,,,,,,,,,,,
Patient,Прошичев Александр,[email protected],1234,male,21,185,75,FALSE,2003-05-05 00:00:00,2024-11-08 12:40:12,2024-11-08 12:40:12,,,,,,,,,,,,,,
Patient,Шушков Егор,[email protected],3214,male,20,182,90,TRUE,2004-04-08,2024-11-08 12:41:12,2024-11-08 12:41:12,,,,,,,,,,,,,,
Patient,Прошичев Александр,[email protected],1234,male,21,185,75,FALSE,2003-05-05,2024-11-08 12:40:12,2024-11-08 12:40:12,,,,,,,,,,,,,,
Symptom,,,,,,,,,,,,,,,,,зуд,"Неприятное ощущение на коже, вызывающее желание почесать её. Ощущение может быть локализованным или распространенным по всему телу.",,,,,,,
Symptom,,,,,,,,,,,,,,,,,кожная сыпь,"Появление красных пятен или высыпаний на коже, которые могут быть болезненными или зудящими. Пятна могут быть различной формы и размера.",,,,,,,
Symptom,,,,,,,,,,,,,,,,,узловые высыпания на коже,"Воспалительное заболевание кожи, характеризующееся появлением болезненных узлов, обычно на ногах. Узлы могут быть твердыми и горячими на ощупь.",,,,,,,
Expand Down Expand Up @@ -307,7 +307,7 @@ Disease,,,,,,,,,,,,Артрит,"Артрит – это отек и болез
Disease,,,,,,,,,,,,Гастроэнтерит,"Гастроэнтерит – это воспаление пищеварительного тракта, особенно желудка, а также толстого и тонкого кишечника. Вирусный и бактериальный гастроэнтерит — это кишечные инфекции, сопровождающиеся симптомами диареи, спазмов в животе, тошноты и рвоты.",перестаньте на время есть твердую пищу; попробуй пить небольшими глотками воды; отдых; легко вернуться к еде,Гастроэнтерологическое заболевание,Острое течение,,,,,,,,,
Disease,,,,,,,,,,,,Туберкулез,"Туберкулез (ТБ) – инфекционное заболевание, обычно вызываемое бактериями Mycobacterium Tuberculosis (MTB). Туберкулез обычно поражает легкие, но может поражать и другие части тела. Большинство инфекций не имеют симптомов, и в этом случае они известны как латентный туберкулез.",прикрыть рот; проконсультироваться с врачом; медикамент; отдых,Инфекционное заболевание,Хроническое течение,,,,,,,,,
Appeal,,,,,,,,,,,,,,,,,,,,,,,,2024-10-11 12:41:12,Очень болит живот. Тяжело передвагаться.
Appeal,,,,,,,,,,,,,,,,,,,,,,,,2024-10-02 12:41:12, Постоянные перепады настроения
Appeal,,,,,,,,,,,,,,,,,,,,,,,,2024-10-02 12:41:12,Постоянные перепады настроения
Appeal,,,,,,,,,,,,,,,,,,,,,,,,2024-05-13 18:56:12,Тяжесть в теле и руки постоянно дрожат
Appeal,,,,,,,,,,,,,,,,,,,,,,,,2024-07-07 9:41:12,Тошнило и рвало всю ночь :_)
Symptom-Disease,,,,,,,,,,,,,,,,,,,,,Грибковая инфекция,узловые высыпания на коже,4,,
Expand Down Expand Up @@ -762,4 +762,26 @@ Symptom-Analysis,,,,,,,,,,,,,,,,,,,,,небольшие вмятины на но
Symptom-Analysis,,,,,,,,,,,,,,,,,,,,,воспаленные ногти,Осмотр кожи,,,
Symptom-Analysis,,,,,,,,,,,,,,,,,,,,,волдырь,Осмотр кожи,,,
Symptom-Analysis,,,,,,,,,,,,,,,,,,,,,красная болячка вокруг носа,Осмотр кожи,,,
,,,,,,,,,,,,,,,,,,,,,желтая корка слизь,Осмотр кожи,,,
Symptom-Analysis,,,,,,,,,,,,,,,,,,,,,желтая корка слизь,Осмотр кожи,,,
Patient-Appeal,,,,,,,,,,,,,,,,,,,,,[email protected],2024-10-11 12:41:12,,,
Patient-Appeal,,,,,,,,,,,,,,,,,,,,,[email protected],2024-10-02 12:41:12,,,
Patient-Appeal,,,,,,,,,,,,,,,,,,,,,[email protected],2024-05-13 18:56:12,,,
Patient-Appeal,,,,,,,,,,,,,,,,,,,,,[email protected],2024-07-07 9:41:12,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-10-11 12:41:12,боль в животе,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-10-11 12:41:12,боль в спине,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-10-11 12:41:12,болезненная ходьба,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-10-11 12:41:12,слабость в конечностях,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-10-02 12:41:12,перепады настроения,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-10-02 12:41:12,раздражительность,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-10-02 12:41:12,депрессия,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-10-02 12:41:12,беспокойство,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-05-13 18:56:12,дрожь,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-05-13 18:56:12,усталость,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-05-13 18:56:12,вялость,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-05-13 18:56:12,мышечная слабость,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-05-13 18:56:12,слабость в конечностях,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-07-07 9:41:12,тошнота,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-07-07 9:41:12,рвота,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-07-07 9:41:12,обезвоживание,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-07-07 9:41:12,несварение желудка,,,
Appeal-Symptom,,,,,,,,,,,,,,,,,,,,,2024-07-07 9:41:12,вздутие желудка,,,
4 changes: 2 additions & 2 deletions backend/app/models/utils/allowedEntity.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
"disease_course"
],
"Analysis": [
"disease_name",
"disease_source"
"analysis_name",
"analysis_source"
]
}

Expand Down
41 changes: 32 additions & 9 deletions backend/app/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,17 @@ def register() -> str:

else:
query_string = '''
MERGE (p:Patient {fullname: $fullname, password: $password, mail: $mail, sex: $sex, birthday: $birthday, height: $height, weight: $weight, registration_date: $rd, admin: $admin})
MERGE (p:Patient {fullname: $fullname, password: $password, mail: $mail, sex: $sex, birthday: $birthday, height: $height, weight: $weight, registration_date: $rd, last_update: $lu, admin: $admin})
'''

print(fullname, password, mail, sex, birthday, height, weight, admin)

current_datetime = datetime.now()
# Форматируем дату и время в формате "yyyy-mm-dd hh:mm:ss"
formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")

conn.query(query_string, {"fullname": fullname, "password": password, "mail": mail,
"sex": sex, "birthday": birthday, "rd": datetime.now().isoformat(), "height": height, "weight": weight, "admin": admin})
"sex": sex, "birthday": birthday, "rd": formatted_datetime, "lu": formatted_datetime, "height": height, "weight": weight, "admin": admin})

elif request.method == 'POST':
msg = "Пожалуйста, заполните форму!"
Expand Down Expand Up @@ -150,6 +155,8 @@ def readEntities() -> json:
entity_type : str = data.get('entity_type')
filter_params : str = data.get('filter_params', {})
relation_type : str = data.get('relation_type')
patient_filter_params: str = data.get('patient_filter_params', {})

date_list = ['birthday', 'last_update', 'registration_date', 'appeal_date']
compare_operations = [">", "<", ">=", "<="]

Expand Down Expand Up @@ -186,6 +193,19 @@ def readEntities() -> json:
filter_idx += 1
if filter_params.get(f'filter{filter_idx}-field'):
query_string += " AND\n"
if patient_filter_params:
if not filter_params:
query_string += "WHERE "
else:
query_string += " AND\n"

field = patient_filter_params[f'filter1-field']
action = patient_filter_params[f'filter1-action']
value = patient_filter_params[f'filter1-value']

value = value.lower()
query_string += f'lower(b.{field}) {action} "{value}"'


if relation_type:
query_string += '\nRETURN p,r,b'
Expand Down Expand Up @@ -218,23 +238,26 @@ def readEntities() -> json:
def appeal_database():
data : dict = request.json
filter_params : str = data.get('filter_params', {})
patient_filter_params : str = data.get('patient_filter_params', {})

response = requests.post("http://127.0.0.1:5000/api/entities", json={'entity_type': 'Appeal', 'filter_params': filter_params, 'relation_type': 'belong'})
response = requests.post("http://127.0.0.1:5000/api/entities", json={'entity_type': 'Appeal', 'filter_params': filter_params, 'relation_type': 'belong', 'patient_filter_params': patient_filter_params})
patients = response.json()["ans"]
patients_log = response.json()["req"]

response = requests.post("http://127.0.0.1:5000/api/entities", json={'entity_type': 'Appeal', 'filter_params': filter_params, 'relation_type': 'contain'})
symptoms = response.json()["ans"]
symptoms_log = response.json()["req"]

appeal_database = []

for i in range(0, len(patients), 2):
row = {}
row["appeal"] = patients[i]
row["patient"] = patients[i+1]
row["patient"] = patients[i+1][0]
row["related"] = symptoms[symptoms.index(row["appeal"]) + 1]
appeal_database.append(row)

return jsonify({"ans": appeal_database})
return jsonify({"ans": appeal_database, "patients": patients_log, "symptoms": symptoms_log})


@app.route('/api/create_entity', methods=['POST'])
Expand All @@ -261,7 +284,7 @@ def createEntities():
if entity_type and entity_parametrs:

if entity_type not in allowed_entity_parameters:
return jsonify({"Error": "Invalid type of entity"}), 400
return jsonify({"Error": "Invalid type of entity", "incorrect_entity_type": entity_type}), 400

for parametr in entity_parametrs:
if parametr not in allowed_entity_parameters[entity_type]:
Expand All @@ -287,16 +310,16 @@ def createEntities():
def set_entity():
data : json = request.json
entity_mail : str = data.get('mail')
entity_admin : bool = data.get('flag')
entity_admin : str = data.get('flag')

if entity_mail and entity_admin:
query_string = f'''MATCH(p:Patient{{mail:'{entity_mail}'}})
SET p.admin = {entity_admin}
SET p.admin = '{entity_admin}'
'''

conn.query(query_string)

return("Success")
return jsonify({"status": "Success", "admin": entity_admin}), 200
else:
return jsonify({"error": "No mail or admin fields"}), 400

Expand Down
40 changes: 40 additions & 0 deletions frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"@angular/platform-browser": "^19.0.0",
"@angular/platform-browser-dynamic": "^19.0.0",
"@angular/router": "^19.0.0",
"chart.js": "^4.4.7",
"file-saver": "^2.0.5",
"rxjs": "~7.8.0",
"save-as": "^0.1.8",
Expand Down
35 changes: 33 additions & 2 deletions frontend/src/app/add-dialog/add-dialog.component.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<div mat-dialog-content>
<div mat-dialog-content #dialogContent>
<h1>Добавление {{ dict[data.type] }}</h1>
<form #addForm="ngForm">
<div *ngIf="data.type === 'patients'">
Expand Down Expand Up @@ -52,10 +52,40 @@ <h1>Добавление {{ dict[data.type] }}</h1>
<p>*Обязательно к заполнению</p>
</div>
</div>
<div class="form-group">
<label for="appeal_mail">Почта пациента</label>
<input id="appeal_mail" [(ngModel)]="data.fields.appeal_mail" name="appeal_mail" required>
<div *ngIf="addForm.controls['appeal_mail']?.invalid">
<p>*Обязательно к заполнению</p>
</div>
</div>
<div class="form-group">
<label for="appeal_complaints">Жалобы</label>
<input id="appeal_complaints" [(ngModel)]="data.fields.appeal_complaints" name="appeal_complaints">
</div>
<div class="form-group">
<label for="appeal_symptoms">Симптомы</label>
<input id="appeal_symptoms" [(ngModel)]="data.fields.appeal_symptoms" name="appeal_symptoms" [ngClass]="{'activate': data.fields.appeal_symptoms}" (input)="OnInputChange($event)" (focus)="OnInputFocus()" (blur)="OnInputBlur()">
<div *ngIf="data.fields.chosen_symptoms && data.fields.chosen_symptoms.length == 0">
<p>*Обязательно к заполнению</p>
</div>
<div id="labelsaver">
<div *ngFor="let sympt of data.fields.chosen_symptoms" class="label">
<p>{{ sympt }}</p>
<mat-icon id="close_icon" (click)="RemoveItem(sympt)">close</mat-icon>
</div>
</div>
<div class="list-container" *ngIf="IsEmpty()">
<ul class="list">
<li id="header">Симптомы по запросу <i>{{data.fields.appeal_symptoms}}</i></li>
<ng-container *ngFor="let item of symptoms">
<li *ngIf="!IsTaken(item['symptom_name'])" (mousedown)="OnItemMouseDown()" (click)="ChooseTheSympt(item['symptom_name'])">
{{ item['symptom_name'] }}
</li>
</ng-container>
</ul>
</div>
</div>
</div>
<div *ngIf="data.type === 'sympts'">
<div class="form-group">
Expand Down Expand Up @@ -103,5 +133,6 @@ <h1>Добавление {{ dict[data.type] }}</h1>
</div>
<div mat-dialog-actions>
<button mat-button (click)="onNoClick()">Выйти</button>
<button mat-button (click)="onAddClick(addForm)" [disabled]="addForm.invalid">Добавить</button>
<button mat-button (click)="onAddClick(addForm)" [disabled]="addForm.invalid || (data.type === 'appeals' && data.fields.chosen_symptoms.length == 0)">Добавить</button>
</div>

Loading

0 comments on commit 231126d

Please sign in to comment.