2025-07-15 13:23:28 +07:00
# 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/.
2025-07-15 13:27:55 +07:00
import json
from bottle import Bottle , route , response , request
2025-07-15 13:23:28 +07:00
from config import directory , database
2025-07-15 13:27:55 +07:00
import mysql . connector as mariadb
2025-07-15 13:23:28 +07:00
import templates . plain . main as template_public
import modules . public . home as public_home
app = Bottle ( )
2025-07-15 13:27:55 +07:00
# 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 "
}
]
}
2025-07-15 13:23:28 +07:00
@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 ' ] )
2025-07-15 13:27:55 +07:00
def index ( crud ) :
2025-07-15 13:23:28 +07:00
response . content_type = ' application/json '
2025-07-15 13:27:55 +07:00
result = {
" status " : " error " ,
" message " : f " API endpoint for /api/ { crud } is not implemented yet. "
2025-07-15 13:23:28 +07:00
}
db_main = mariadb . connect ( * * database . db_main )
2025-07-15 13:27:55 +07:00
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
2025-07-15 13:23:28 +07:00
}
2025-07-15 13:27:55 +07:00
2025-07-15 13:23:28 +07:00
elif crud == " read " :
2025-07-15 13:27:55 +07:00
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
2025-07-15 13:23:28 +07:00
elif crud == " update " :
2025-07-15 13:27:55 +07:00
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 " ]
2025-07-15 13:23:28 +07:00
}
2025-07-15 13:27:55 +07:00
2025-07-15 13:23:28 +07:00
elif crud == " delete " :
2025-07-15 13:27:55 +07:00
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 ( )