budget-bear/database.py
Sara Montecino d986461019 Add a bunch of fixes, categories
- Go through and update database
2022-10-31 00:57:57 -07:00

84 lines
2.9 KiB
Python
Executable File

import datetime
import uuid
from peewee import *
DATABASE = 'budget.db'
instance = SqliteDatabase(DATABASE, pragmas=[('foreign_keys', 'on')])
def create_tables():
"""Helper function to create database tables. Should be called manually."""
with instance:
instance.create_tables([User, TransactionCategory, Transaction])
def add_user():
# Make my user.
instance.connect()
User.create(username='ciphercules')
instance.close()
def add_default_categories():
"""Helper function to add default categories. Should be called manually."""
categories = [
("food", ["snacks", "fast_food", "groceries", "restaurant"]),
("clothing", []),
("event", ["event_food", "birthday", "movie_theater"]),
("finance", ["interest"]),
("hobby", ["gym", "game_development", "projects", "education"]),
("home_improvement", []),
("pet", ["dog_health", "dog_food"]),
("media", ["book", "music", "television", "video_game"]),
("health", ["medicine"]),
("transit", ["car_insurance", "car_registration", "gas", "parking", "taxi", "car_maintenance"]),
("utilities", ["electricity", "natural_gas", "laundry", "cell_phone", "trash", "water"]),
("rent", []),
]
instance.connect()
with instance.atomic():
for category in categories:
parent, children = category
parent_db = TransactionCategory.create(name=parent)
for child in children:
TransactionCategory.create(name=child, parent=parent_db)
def delete_transactions():
instance.connect()
# august_2022 = datetime.datetime(2022, 8, 18, 0)
# delete_query = Transaction.delete().where(Transaction.transaction_date > august_2022)
delete_query = Transaction.delete().where(Transaction.primary_key == 83)
delete_query.execute()
instance.close()
class BaseModel(Model):
class Meta:
database = instance
class User(BaseModel):
uuid = UUIDField(unique=True, primary_key=True, default=uuid.uuid4())
username = CharField(unique=True)
class TransactionCategory(BaseModel):
primary_key = AutoField(primary_key=True)
name = CharField(unique=True)
parent = ForeignKeyField('self', null=True, backref='children')
class Transaction(BaseModel):
# Metadata
primary_key = AutoField(primary_key=True)
created_date = DateTimeField(default=datetime.datetime.now)
source_file=CharField(null=True)
type = IntegerField()
user = ForeignKeyField(User, backref='transactions')
# Real data
transaction_date = DateTimeField()
description = CharField()
amount = FloatField()
subcategory = ForeignKeyField(TransactionCategory, backref='+', null=True)
notes = CharField(null=True)
if __name__ == "__main__":
create_tables()
add_user()
add_default_categories()