Skip to content
Snippets Groups Projects
database.py 4.27 KiB
from flask import Flask
from flask_mongoengine import MongoEngine
from bson import json_util
from datetime import datetime
import json

mongo = MongoEngine()

class User(mongo.Document):
    user_id = mongo.StringField(required=True, primary_key=True)
    username = mongo.StringField(required=True, unique=True)
    password = mongo.StringField(required=True)
    name = mongo.StringField(required=True)
    role = mongo.IntField(required=True)
    page_list = mongo.ListField(mongo.ReferenceField("VizData"))

    def to_json(self):
        data = self.to_mongo()
        data["page_list"] = [str(page.id) for page in self.page_list]
        return json_util.dumps(data)

class Reply(mongo.EmbeddedDocument):
    replier_id = mongo.StringField(max_length=20, required =True)
    replier_name = mongo.StringField(required=True)
    reply_text = mongo.StringField(required=True)
    date = mongo.DateTimeField(default= datetime.utcnow)

class Comment(mongo.Document):
    commenter_id = mongo.StringField(max_length=20, required=True)
    commenter_name = mongo.StringField(required=True)
    comment_text = mongo.StringField(required=True)
    page = mongo.ReferenceField('VizData', required=True)
    date = mongo.DateTimeField(default = datetime.utcnow)
    reply = mongo.EmbeddedDocumentField('Reply')

class VizData(mongo.Document):
    name = mongo.StringField(required = True)
    level = mongo.IntField(required= True)
    value = mongo.LongField(required = True)
    year = mongo.IntField(required=True)
    subdata = mongo.ListField(mongo.ReferenceField("VizData"))
    value = mongo.IntField(required = True)
    percentage = mongo.FloatField()
    categories = mongo.ListField(mongo.StringField(), default=[])
    detail = mongo.StringField()

class Page(mongo.Document):
    level = mongo.IntField(required=True)
    data = mongo.ListField(mongo.ReferenceField("Data", required=True))
    comments = mongo.ListField(mongo.ReferenceField("Comment"), default=[])

# APBD Data
class Rekening(mongo.Document):
    id_kegiatan = mongo.IntField(required=True)
    kode_rekening = mongo.StringField(required=True)
    nama_rekening = mongo.StringField(required=True)
    jumlah_rincian = mongo.IntField(required=True)
    persentase = mongo.FloatField()

class Kegiatan(mongo.Document):
    id_program = mongo.IntField(required=True)
    id_kegiatan = mongo.IntField(required=True)
    nama_kegiatan = mongo.StringField(required=True)
    rekening = mongo.ListField(mongo.StringField(), default=[], required=True)
    jumlah_rincian = mongo.IntField(default = 0)
    persentase = mongo.FloatField()

class Program(mongo.Document):
    id_skpd = mongo.IntField(required=True)
    id_program = mongo.IntField(required=True)
    nama_program = mongo.StringField(required=True)
    kegiatan = mongo.ListField(mongo.IntField(), default=[], required=True)
    jumlah_rincian = mongo.IntField(default = 0)
    persentase = mongo.FloatField()

class SKPD(mongo.Document):
    id_urusan = mongo.IntField(required=True)
    id_skpd = mongo.IntField(required=True)
    nama_skpd = mongo.StringField(required=True)
    program = mongo.ListField(mongo.IntField(), default=[], required=True)
    jumlah_rincian = mongo.IntField(default = 0)
    persentase = mongo.FloatField()

class Urusan(mongo.Document):
    tahun = mongo.IntField(required=True)
    id_urusan = mongo.IntField(required=True)
    nama_urusan = mongo.StringField(required=True)
    skpd = mongo.ListField(mongo.IntField(), default=[], required=True)
    jumlah_rincian = mongo.IntField(default = 0)
    persentase = mongo.FloatField()

if __name__ == "__main__":
    app = Flask(__name__)
    app.config["MONGODB_DB"] = "viz-masy"
    mongo.init_app(app)
    # data = Data(name="dummy", value=5)
    # data.save()
    # test_page = Page(level=1, data=[data])
    # test_page.save()
    # print(test_page.id)
    # print(test_page.data)
    # test = User(user_id="123456789", username="dsfdasfd", password="asdf", name="dichi", address="behind you", role=1, page_list=[test_page])

    test = User.objects.get(user_id="123456789", username="dsfdasfd", password="asdf", name="dichi", address="behind you", role=1)

    #print(test.id)
    #test.save()
    #print(test.id)
    user_dict = json.loads(test.to_json())
    page = Page.objects.with_id(user_dict['page_list'][0])
    print(page.data[0].name)