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 = {
2025-07-15 13:54:40 +07:00
" items " : [
{ " id " : 1 , " name " : " Kopi " , " price " : 200.00 , " qty " : 10 } ,
{ " id " : 2 , " name " : " Teh " , " price " : 200.00 , " qty " : 20 } ,
{ " id " : 3 , " name " : " Susu " , " price " : 300.00 , " qty " : 30 }
2025-07-15 13:27:55 +07:00
]
}
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 " ]
2025-07-15 13:54:40 +07:00
price = payload [ " price " ]
qty = payload [ " qty " ]
2025-07-15 13:27:55 +07:00
2025-07-15 13:54:40 +07:00
if not name or not price or not qty :
2025-07-15 13:27:55 +07:00
result [ " status " ] = " error "
2025-07-15 13:54:40 +07:00
result [ " message " ] = " Name, price, and quantity are required. "
2025-07-15 13:27:55 +07:00
return json . dumps ( result , indent = 2 ) . encode ( )
2025-07-15 13:54:40 +07:00
data_id = cursor . execute ( " INSERT INTO `items` (name, price, qty) VALUES ( %s , %s , %s ); " , ( name , price , qty ) )
2025-07-15 13:27:55 +07:00
result [ " status " ] = " success "
result [ " message " ] = f ' { payload [ " name " ] } is added to the list. '
result [ " data " ] = {
" name " : name ,
2025-07-15 13:54:40 +07:00
" price " : price ,
" qty " : qty
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:54:40 +07:00
cursor . execute ( " SELECT * FROM `items`; " )
items = cursor . fetchall ( )
2025-07-15 13:27:55 +07:00
2025-07-15 13:54:40 +07:00
if not items :
2025-07-15 13:27:55 +07:00
result [ " status " ] = " error "
2025-07-15 13:54:40 +07:00
result [ " message " ] = " No items found. "
2025-07-15 13:27:55 +07:00
return json . dumps ( result , indent = 2 ) . encode ( )
result [ " status " ] = " success "
2025-07-15 13:54:40 +07:00
result [ " message " ] = " Items collected. "
result [ " data " ] = items
2025-07-15 13:27:55 +07:00
2025-07-15 13:23:28 +07:00
elif crud == " update " :
2025-07-15 13:54:40 +07:00
item_id = payload [ " id " ]
2025-07-15 13:27:55 +07:00
name = payload [ " name " ]
2025-07-15 13:54:40 +07:00
price = payload [ " price " ]
qty = payload [ " qty " ]
2025-07-15 13:27:55 +07:00
2025-07-15 13:54:40 +07:00
cursor . execute ( " UPDATE `items` SET `name` = %s , `price` = %s , `qty` = %s WHERE `id` = %s ; " , ( name , price , qty , item_id ) )
2025-07-15 13:27:55 +07:00
db_main . commit ( )
2025-07-15 13:54:40 +07:00
cursor . execute ( " SELECT * FROM `items` WHERE `id` = %s ; " , ( item_id , ) )
item = cursor . fetchone ( )
2025-07-15 13:27:55 +07:00
2025-07-15 13:54:40 +07:00
if not item :
2025-07-15 13:27:55 +07:00
result [ " status " ] = " error "
2025-07-15 13:54:40 +07:00
result [ " message " ] = f ' Item with ID { item_id } not found. '
return json . dumps ( result , indent = 2 ) . encode ( )
2025-07-15 13:27:55 +07:00
result [ " status " ] = " success "
2025-07-15 13:54:40 +07:00
result [ " message " ] = f ' Item with ID { item_id } is updated. '
2025-07-15 13:27:55 +07:00
result [ " data " ] = {
2025-07-15 13:54:40 +07:00
" id " : item [ " id " ] ,
" name " : item [ " name " ] ,
" price " : item [ " price " ] ,
" qty " : item [ " qty " ]
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:54:40 +07:00
item_id = payload [ " id " ]
cursor . execute ( " SELECT * FROM `items` WHERE `id` = %s ; " , ( item_id , ) )
item = cursor . fetchone ( )
if not item :
2025-07-15 13:27:55 +07:00
result [ " status " ] = " error "
2025-07-15 13:54:40 +07:00
result [ " message " ] = f ' Item with ID { item_id } not found. '
2025-07-15 13:27:55 +07:00
return json . dumps ( result , indent = 2 ) . encode ( )
2025-07-15 13:54:40 +07:00
cursor . execute ( " DELETE FROM `items` WHERE `id` = %s ; " , ( item_id , ) )
2025-07-15 13:27:55 +07:00
result [ " status " ] = " success "
2025-07-15 13:54:40 +07:00
result [ " message " ] = f ' Item with ID { item_id } is deleted. '
2025-07-15 13:27:55 +07:00
result [ " data " ] = {
2025-07-15 13:54:40 +07:00
" id " : item [ " id " ] ,
" name " : item [ " name " ] ,
" price " : item [ " price " ] ,
" qty " : item [ " qty " ]
2025-07-15 13:27:55 +07:00
}
return json . dumps ( result , indent = 2 ) . encode ( )