diff options
Diffstat (limited to 'day9')
| -rw-r--r-- | day9/task5_vue/backend/database/wrappers.py | 34 | ||||
| -rw-r--r-- | day9/task5_vue/backend/views.py | 42 | ||||
| -rw-r--r-- | day9/task5_vue/src/components/EditFormBox.vue | 9 |
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/', |