fix: memperbaiki predict tomat, feact:menambahkan file vercel

This commit is contained in:
muhamad fais aizat 2025-05-15 13:21:06 +07:00
parent cdf9a4ddb3
commit 6d38369c55
7 changed files with 162 additions and 106 deletions

View File

@ -1,7 +1,7 @@
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine, MetaData
engine = create_engine("mysql+pymysql://root@localhost:3306/predict")
engine = create_engine("mysql+pymysql://uupkixae2jbw2zse:1bFkfd8pfZ6EZhphAPQa@bdcaorplf9ct8apn6n5o-mysql.services.clever-cloud.com:3306/bdcaorplf9ct8apn6n5o")
meta = MetaData()
conn = engine.connect()

BIN
backend/requirements.txt Normal file

Binary file not shown.

View File

@ -24,13 +24,13 @@ async def read_data(db: Session = Depends(get_db)):
query = text("""
SELECT
(SELECT pt.tanggal
FROM predict.price_tomat AS pt
JOIN predict.result_predict AS rp ON pt.id = rp.id
FROM price_tomat AS pt
JOIN result_predict AS rp ON pt.id = rp.id
ORDER BY rp.id ASC
LIMIT 1 OFFSET 29) AS tanggal_old,
(SELECT tanggal
FROM predict.price_tomat
FROM price_tomat
ORDER BY tanggal DESC
LIMIT 1) AS tanggal_new;
""")
@ -50,6 +50,7 @@ async def read_data(db: Session = Depends(get_db)):
@predict_router.get("/price", response_model=dict, dependencies=[Depends(verify_token)])
def predict_price(db: Session = Depends(get_db)):
try:
existing_data = db.execute(select(resultPredict)).fetchone()
if existing_data:
db.execute(delete(resultPredict)) # Hapus semua data lama
@ -140,26 +141,61 @@ def predict_price(db: Session = Depends(get_db)):
jumlah_data_dikirim = 0
# Gabungkan hasil prediksi ke data uji
# for i in range(len(y_pred)):
# id_tomat = id_test[i]
# hasil = y_pred[i]
# # Invers hasil prediksi
# dummy_row = np.zeros((1, 5)) # [0, 0, 0, 0, 0, hasil_prediksi]
# dummy_row[0][4] = hasil
# prediksi_asli = float(scaler.inverse_transform(dummy_row)[0][4])
# existing = db.execute(select(resultPredict).where(resultPredict.c.id == id_tomat)).fetchone()
# if existing:
# db.execute(
# resultPredict.update()
# .where(resultPredict.c.id == id_tomat)
# .values(hasil_prediksi=prediksi_asli)
# )
# else:
# db.execute(insert(resultPredict).values(id=id_tomat, hasil_prediksi=prediksi_asli))
# jumlah_data_dikirim += 1
insert_data = []
update_data = []
for i in range(len(y_pred)):
id_tomat = id_test[i]
hasil = y_pred[i]
print("start prediction", id_tomat, hasil)
# Invers hasil prediksi
dummy_row = np.zeros((1, 5)) # [0, 0, 0, 0, 0, hasil_prediksi]
dummy_row = np.zeros((1, 5))
dummy_row[0][4] = hasil
prediksi_asli = float(scaler.inverse_transform(dummy_row)[0][4])
existing = db.execute(select(resultPredict).where(resultPredict.c.id == id_tomat)).fetchone()
if existing:
insert_data.append({
"id": id_tomat,
"hasil_prediksi": prediksi_asli
})
print("print data keseluruhan", insert_data)
# Bulk insert
if insert_data:
db.execute(insert(resultPredict), insert_data)
# Bulk update (looped, karena SQLAlchemy core tidak punya bulk update langsung)
for item in update_data:
db.execute(
resultPredict.update()
.where(resultPredict.c.id == id_tomat)
.values(hasil_prediksi=prediksi_asli)
.where(resultPredict.c.id == item["id"])
.values(hasil_prediksi=item["hasil_prediksi"])
)
else:
db.execute(insert(resultPredict).values(id=id_tomat, hasil_prediksi=prediksi_asli))
jumlah_data_dikirim += 1
jumlah_data_dikirim += len(insert_data) + len(update_data)
db.commit()
@ -170,6 +206,12 @@ def predict_price(db: Session = Depends(get_db)):
"Pesan": "Prediksi seluruh data berhasil disimpan ke database"
}
except Exception as e:
db.rollback() # penting!
print(f"Error: {e}")
finally:
db.close()

14
backend/vercel.json Normal file
View File

@ -0,0 +1,14 @@
{
"builds":[
{
"src": "index.py",
"use": "@vercel/python"
}
],
"routes": [
{
"src": "/(.*)",
"dest": "index.py"
}
]
}

View File

@ -71,7 +71,7 @@ const ViewGrafik = ({ date, setDate, dataYAxis, setDataYAxis, priceType, setPric
if (!!date && !!tempPriceType) {
if (!date && !tempPriceType) {
setTabelDataAktual([]);
setTabelDataPredict([]);