diff --git a/serwer.py b/serwer.py new file mode 100644 index 0000000..df73b52 --- /dev/null +++ b/serwer.py @@ -0,0 +1,104 @@ +from wsgiref.simple_server import make_server +import json +import pyodbc + + +response_headers = [ + ('Content-Type', 'application/json'), + ('Access-Control-Allow-Origin', '*'), + ('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, DELETE'), + ('Access-Control-Allow-Headers', 'Content-Type') +] + +# Database connection +conn = pyodbc.connect( + 'DRIVER={ODBC Driver 17 for SQL Server};' + 'SERVER=mssql-2017.labs.wmi.amu.edu.pl;' + 'DATABASE=dbad_s490122;' + 'UID=dbad_s490122;' + 'PWD=c1Dp8y8iWJ' +) +cursor = conn.cursor() + + +def get_request_body(environ): + request_body_size = int(environ.get('CONTENT_LENGTH', 0)) + request_body = environ['wsgi.input'].read(request_body_size) + return json.loads(request_body) + +def parse_task_id_from_path(path): + try: + return int(path.split('/')[-1]) + except (IndexError, ValueError): + return None + +def create_response(start_response, status, response_body): + start_response(status, response_headers) + return [json.dumps(response_body).encode('utf-8')] + + +def add_task(environ, start_response): + data = get_request_body(environ) + task_description = data.get('task_description', '') + + format_description = lambda desc: desc.upper() + + if task_description: + formatted_description = format_description(task_description) + cursor.execute("INSERT INTO Tasks (task_description) OUTPUT INSERTED.id VALUES (?)", (formatted_description,)) + task_id = cursor.fetchone()[0] + conn.commit() + response_body = {'message': 'Task added successfully', 'id': task_id} + return create_response(start_response, '200 OK', response_body) + else: + response_body = {'message': 'Task description is required'} + return create_response(start_response, '400 Bad Request', response_body) + +def get_tasks(environ, start_response): + cursor.execute("SELECT id, task_description FROM Tasks") + tasks = cursor.fetchall() + tasks_list = [{'id': task[0], 'task_description': task[1]} for task in tasks] + return create_response(start_response, '200 OK', tasks_list) + +def delete_task(environ, start_response, task_id): + cursor.execute("DELETE FROM Tasks WHERE id = ?", (task_id,)) + conn.commit() + response_body = {'message': 'Task deleted successfully'} + return create_response(start_response, '200 OK', response_body) + + +def handle_request(environ, start_response): + path = environ.get('PATH_INFO', '') + method = environ.get('REQUEST_METHOD', '') + + if method == 'OPTIONS': + start_response('200 OK', response_headers) + return [b''] + + if method == 'POST' and path == '/add_task': + return add_task(environ, start_response) + elif method == 'GET' and path == '/get_tasks': + return get_tasks(environ, start_response) + elif method == 'DELETE' and path.startswith('/delete_task/'): + task_id = parse_task_id_from_path(path) + if task_id is not None: + return delete_task(environ, start_response, task_id) + else: + response_body = {'message': 'Invalid task ID'} + return create_response(start_response, '400 Bad Request', response_body) + else: + response_body = {'message': 'Not Found'} + return create_response(start_response, '404 Not Found', response_body) + + +def application(environ, start_response): + try: + return handle_request(environ, start_response) + except Exception as e: + response_body = {'message': str(e)} + return create_response(start_response, '500 Internal Server Error', response_body) + +if __name__ == "__main__": + httpd = make_server('', 8000, application) + print("Serving on port 8000...") + httpd.serve_forever()