Part 3 Script Aplikasi - Proyek Aplikasi manajemen aktivitas harian + keuangan personal terintegrasi

🔍 Cari Sesuatu?

Gunakan pencarian di bawah ini untuk hasil terbaik!

Part 3 Script Aplikasi - Proyek Aplikasi manajemen aktivitas harian + keuangan personal terintegrasi

Sury Mory Tech
0

Struktur aplikasi ini menunjukkan backend Flask yang dibuat sederhana dan terorganisir. Folder app memisahkan konfigurasi, database, model, dan routing agar kode mudah dibaca dan dirawat. config.py menyimpan pengaturan utama seperti koneksi PostgreSQL dan secret key. extensions.py dipakai untuk inisialisasi SQLAlchemy supaya tidak terjadi konflik impor.

models.py menjadi inti database, berisi tabel user, aktivitas, akun, transaksi keuangan, serta perencanaan dan pencatatan investasi. Relasi antar tabel dibuat langsung dengan foreign key, cukup untuk kebutuhan aplikasi keuangan dasar.

Folder routes berisi endpoint API yang dipisah berdasarkan fitur: aktivitas, keuangan, dan investasi. Setiap endpoint menerima data JSON, menyimpan ke database, lalu mengembalikan respons sederhana. Tidak ada logika rumit, fokusnya CRUD.

__init__.py berfungsi sebagai factory untuk membuat aplikasi Flask dan mendaftarkan blueprint. run.py menjadi titik awal menjalankan aplikasi sekaligus membuat tabel database.

⚙️ IoT, Embedded & Mikrokontroler

Intinya: desainnya simpel, modular, dan fungsional. Tidak berlebihan, tidak ribet, dan cukup rapi untuk aplikasi keuangan dasar.


1️⃣ Struktur Folder (final, jangan ditawar)

app/ ├── __init__.py ├── config.py ├── extensions.py ├── models.py ├── routes/ │ ├── auth.py │ ├── activity.py │ ├── finance.py │ └── investment.py ├── services/ │ ├── finance_service.py │ └── investment_service.py └── run.py

2️⃣ config.py

import os class Config: SQLALCHEMY_DATABASE_URI = os.getenv( "DATABASE_URL", "postgresql://postgres:password@localhost:5432/finance_app" ) SQLALCHEMY_TRACK_MODIFICATIONS = False SECRET_KEY = "dev-secret"

3️⃣ extensions.py

from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy()

4️⃣ models.py (INTI DATABASE)

from datetime import date from extensions import db class User(db.Model): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(120), unique=True, nullable=False) class Activity(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey("user.id")) date = db.Column(db.Date, default=date.today) description = db.Column(db.Text) class Account(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey("user.id")) name = db.Column(db.String(50)) class Category(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) type = db.Column(db.String(10)) # income / expense class Transaction(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey("user.id")) account_id = db.Column(db.Integer, db.ForeignKey("account.id")) category_id = db.Column(db.Integer, db.ForeignKey("category.id")) date = db.Column(db.Date) amount = db.Column(db.Numeric(14, 2)) note = db.Column(db.Text) class InvestmentPlan(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey("user.id")) name = db.Column(db.String(100)) target_amount = db.Column(db.Numeric(14, 2)) class InvestmentRecord(db.Model): id = db.Column(db.Integer, primary_key=True) plan_id = db.Column(db.Integer, db.ForeignKey("investment_plan.id")) date = db.Column(db.Date) amount = db.Column(db.Numeric(14, 2))

5️⃣ routes/activity.py

from flask import Blueprint, request, jsonify from extensions import db from models import Activity activity_bp = Blueprint("activity", __name__, url_prefix="/activities") @activity_bp.route("", methods=["POST"]) def create_activity(): data = request.json activity = Activity( user_id=data["user_id"], description=data["description"] ) db.session.add(activity) db.session.commit() return jsonify({"message": "Activity created"})

6️⃣ routes/finance.py

from flask import Blueprint, request, jsonify from extensions import db from models import Transaction finance_bp = Blueprint("finance", __name__, url_prefix="/finance") @finance_bp.route("/transactions", methods=["POST"]) def add_transaction(): data = request.json tx = Transaction( user_id=data["user_id"], account_id=data["account_id"], category_id=data["category_id"], date=data["date"], amount=data["amount"], note=data.get("note") ) db.session.add(tx) db.session.commit() return jsonify({"message": "Transaction added"})

7️⃣ routes/investment.py

from flask import Blueprint, request, jsonify from extensions import db from models import InvestmentPlan, InvestmentRecord investment_bp = Blueprint("investment", __name__, url_prefix="/investments") @investment_bp.route("/plans", methods=["POST"]) def create_plan(): data = request.json plan = InvestmentPlan( user_id=data["user_id"], name=data["name"], target_amount=data["target_amount"] ) db.session.add(plan) db.session.commit() return jsonify({"message": "Investment plan created"}) @investment_bp.route("/records", methods=["POST"]) def add_record(): data = request.json record = InvestmentRecord( plan_id=data["plan_id"], date=data["date"], amount=data["amount"] ) db.session.add(record) db.session.commit() return jsonify({"message": "Investment record added"})

8️⃣ app/init.py

from flask import Flask from config import Config from extensions import db from routes.activity import activity_bp from routes.finance import finance_bp from routes.investment import investment_bp def create_app(): app = Flask(__name__) app.config.from_object(Config) db.init_app(app) app.register_blueprint(activity_bp) app.register_blueprint(finance_bp) app.register_blueprint(investment_bp) return app

9️⃣ run.py

from app import create_app from extensions import db app = create_app() with app.app_context(): db.create_all() if __name__ == "__main__": app.run(debug=True)

10️⃣ Cara Menjalankan

pip install flask flask-sqlalchemy psycopg2-binary python run.py

Penilaian jujur (penting)

  • ✅ Ini bisa jalan

  • ✅ Struktur tidak memalukan

  • ❌ Belum ada auth, validation, migration, reporting

  • ❌ Belum async, belum security

Tapi ini fondasi yang benar, bukan demo abal-abal.

Posting Komentar

0 Komentar
Posting Komentar (0)
To Top