# CostaPy # Copyright (C) 2022 Dita Aji Pratama # # This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. # You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/. import json from bottle import Bottle, route, response, request from config import directory, database import mysql.connector as mariadb import templates.plain.main as template_public import modules.public.home as public_home app = Bottle() # Sample data to simulate a database # also serves as a model reminder data = { "member": [ { "id": 1, "name": "Syahdan", "phone": "081234567890" }, { "id": 2, "name": "Dita", "phone": "081234567891" }, { "id": 3, "name": "Aji", "phone": "081234567892" } ] } @app.route('/') def index(): params = { "mako":{ "website" : template_public.main(directory.page["public"], "home") } } return public_home.main().html(params) @app.route('/api/', method=['OPTIONS', 'GET', 'POST', 'PUT', 'DELETE']) def index(crud): response.content_type = 'application/json' result = { "status": "error", "message": f"API endpoint for /api/{crud} is not implemented yet." } db_main = mariadb.connect(**database.db_main) cursor = db_main.cursor(dictionary=True) payload = request.json if crud == "create": name = payload["name"] phone = payload["phone"] if not name or not phone: result["status"] = "error" result["message"] = "Name and phone are required." return json.dumps(result, indent = 2).encode() data_id = cursor.execute("INSERT INTO `member` (name, phone) VALUES (%s, %s);", (name, phone)) result["status"] = "success" result["message"] = f'{payload["name"]} is added to the list.' result["data"] = { "name": name, "phone": phone } elif crud == "read": cursor.execute("SELECT * FROM `member`;") members = cursor.fetchall() if not members: result["status"] = "error" result["message"] = "No members found." return json.dumps(result, indent = 2).encode() result["status"] = "success" result["message"] = "Members collected." result["data"] = members elif crud == "update": member_id = payload["id"] name = payload["name"] phone = payload["phone"] cursor.execute("UPDATE `member` SET `name` = %s, `phone` = %s WHERE `id` = %s ;" , (name, phone, member_id) ) db_main.commit() cursor.execute("SELECT * FROM `member` WHERE `id` = %s;", (member_id,)) member = cursor.fetchone() if not member: result["status"] = "error" result["message"] = f'Member with ID {member_id} not found.' return json.dumps(result, indent = 2).encode() result["status"] = "success" result["message"] = f'Member with ID {member_id} is updated.' result["data"] = { "id" : member["id"], "name" : member["name"], "phone": member["phone"] } elif crud == "delete": member_id = payload["id"] cursor.execute("SELECT * FROM `member` WHERE `id` = %s;", (member_id,)) member = cursor.fetchone() if not member: result["status"] = "error" result["message"] = f'Member with ID {member_id} not found.' return json.dumps(result, indent = 2).encode() cursor.execute("DELETE FROM `member` WHERE `id` = %s;", (member_id,)) result["status"] = "success" result["message"] = f'Member with ID {member_id} is deleted.' result["data"] = { "id" : member["id"], "name" : member["name"], "phone": member["phone"] } return json.dumps(result, indent = 2).encode()