135 lines
4.5 KiB
Python
135 lines
4.5 KiB
Python
# 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/<crud>', 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() |