summaryrefslogtreecommitdiff
path: root/day9/task5_vue
diff options
context:
space:
mode:
Diffstat (limited to 'day9/task5_vue')
-rw-r--r--day9/task5_vue/backend/database/wrappers.py34
-rw-r--r--day9/task5_vue/backend/views.py42
-rw-r--r--day9/task5_vue/src/components/EditFormBox.vue9
3 files changed, 47 insertions, 38 deletions
diff --git a/day9/task5_vue/backend/database/wrappers.py b/day9/task5_vue/backend/database/wrappers.py
index 824d19e..30d34d9 100644
--- a/day9/task5_vue/backend/database/wrappers.py
+++ b/day9/task5_vue/backend/database/wrappers.py
@@ -16,7 +16,7 @@ class Wrapper(ABC):
pass
@abstractmethod
- def insert_one(self, table_name, row, field_names=None):
+ def insert_one(self, table_name, data_row: dict):
pass
@abstractmethod
@@ -58,32 +58,24 @@ class MySQLWrapper(Wrapper):
table_headers = [field[0] for field in table_structure]
return table_headers
- def insert_one(self, table_name, row, field_names=None):
+ def insert_one(self, table_name, data_row: dict):
cursor = self.connection.cursor()
+ scheme = self.schemes[table_name]
- if field_names is not None:
- field_names_formatted = []
- for name in field_names:
- if name != 'NULL' or not name.isnumeric():
- name = f'`{name}`'
- field_names_formatted.append(name)
- field_names_formatted = f'({",".join(field_names_formatted)})'
- else:
- field_names_formatted = ''
-
- row_formatted = []
- for value in row:
- if value == 'NULL' or value.isnumeric():
- row_formatted.append(value)
+ field_names = []
+ values = []
+
+ for field_name, value in data_row.items():
+ field_names.append(f'`{field_name}`')
+ if scheme.fields[field_name].data_type == str:
+ values.append(f'"{value}"')
else:
- row_formatted.append(f'"{value}"')
+ values.append(value)
- request = "START TRANSACTION; INSERT INTO `{}` {} VALUES ({}); COMMIT;".format(
- table_name, field_names_formatted, ",".join(row_formatted)
+ request = "START TRANSACTION; INSERT INTO `{}` ({}) VALUES ({}); COMMIT;".format(
+ table_name, ",".join(field_names), ",".join(values)
)
- print(request)
-
cursor.execute(request)
cursor.close()
diff --git a/day9/task5_vue/backend/views.py b/day9/task5_vue/backend/views.py
index ab8b628..5c39322 100644
--- a/day9/task5_vue/backend/views.py
+++ b/day9/task5_vue/backend/views.py
@@ -3,6 +3,7 @@ from backend.settings import STATIC_FILES_PATH
from backend.core.response_types import ErrorResponse, TextFileResponse, ImageResponse, HtmlResponse, JsonResponse
from backend.database.database import get_wrapper_for
+from backend.database.validators import ValidationError
import csv
@@ -49,9 +50,10 @@ def upload_file(query, *args):
scheme = wrapper.schemes['table_task1']
for row in data[1:]:
- validation_results = scheme.validate(dict(zip(data[0], row)))
+ insert_values = dict(zip(data[0], row))
+ validation_results = scheme.validate(insert_values)
if not validation_results['error']:
- wrapper.insert_one('table_task1', row, data[0])
+ wrapper.insert_one('table_task1', insert_values)
else:
return ErrorResponse(500)
@@ -80,31 +82,41 @@ def update_post(query, *args):
expressions[key] = value
wrapper.update('table_task1', expressions, {'service_id': query['service_id']})
- else:
- return ErrorResponse(500)
- return HtmlResponse('<a href="/">Return to main page</a><br><h1>Database Updated</h1>')
+ return JsonResponse(validation_results)
def delete_post(query, *args):
- get_wrapper_for('mysql').delete_from('table_task1', {'service_id': query['service_id']})
- return HtmlResponse('<a href="/">Return to main page</a><br><h1>Database Updated</h1>')
+ wrapper = get_wrapper_for('mysql')
+ scheme = wrapper.schemes['table_task1']
+
+ try:
+ scheme.fields['service_id'].validate(query['service_id'])
+ except ValidationError as e:
+ result = {'error': True, 'service_id': str(e)}
+ else:
+ result = {'error': False}
+ wrapper.delete_from('table_task1', {'service_id': query['service_id']})
+
+ return JsonResponse(result)
def add_post(query, *args):
wrapper = get_wrapper_for('mysql')
header_fields = wrapper.get_column_names()
- headers = []
- values = []
- for field_name in query:
+
+ insert_data = {}
+
+ for field_name, value in query.items():
if field_name in header_fields:
- headers.append(field_name)
- values.append(f'"{query[field_name]}"')
+ insert_data[field_name] = value
- if len(headers) == len(header_fields):
- wrapper.insert_one('table_task1', values, headers)
+ scheme = wrapper.schemes['table_task1']
+ validation_result = scheme.validate(query)
+ if not validation_result['error']:
+ wrapper.insert_one('table_task1', insert_data)
- return HtmlResponse('<a href="/">Return to main page</a><br><h1>Database Updated</h1>')
+ return JsonResponse(validation_result)
def db_get(query, *args):
diff --git a/day9/task5_vue/src/components/EditFormBox.vue b/day9/task5_vue/src/components/EditFormBox.vue
index 46438d4..861a82d 100644
--- a/day9/task5_vue/src/components/EditFormBox.vue
+++ b/day9/task5_vue/src/components/EditFormBox.vue
@@ -141,6 +141,11 @@
let creation_date = this.$refs.creation_request_sent_date.value;
let creation_time = this.$refs.creation_request_sent_time.value;
+ let creation_request_sent_date = null;
+
+ if (creation_date !== '' && creation_time !== '')
+ creation_request_sent_date = creation_date + ' ' + creation_time;
+
let formData = {
service_id: parseInt(this.$refs.service_id.value),
servtype: this.$refs.servtype.value,
@@ -150,7 +155,7 @@
state: this.$refs.state.value,
creation_date: this.$refs.creation_date.value,
creation_time: this.$refs.creation_time.value,
- creation_request_sent_date: (creation_date + ' ' + creation_time),
+ creation_request_sent_date: creation_request_sent_date,
notified_about_expiration: parseInt(this.$refs.notified_about_expiration.value)
};
@@ -165,7 +170,7 @@
this.validationResponse = response.data;
});
- if (this.validationResponse.error !== null) {
+ if (this.validationResponse.error === false) {
axios
.request({
url: '/api/update/',