aboutsummaryrefslogtreecommitdiffstats
path: root/database
diff options
context:
space:
mode:
Diffstat (limited to 'database')
-rw-r--r--database/db.py12
-rw-r--r--database/models.py92
2 files changed, 104 insertions, 0 deletions
diff --git a/database/db.py b/database/db.py
new file mode 100644
index 0000000..ec8c146
--- /dev/null
+++ b/database/db.py
@@ -0,0 +1,12 @@
+"""
+Database
+"""
+# from flask_pymongo import PyMongo
+# mongo = PyMongo()
+
+from flask_mongoengine import MongoEngine
+db = MongoEngine()
+
+
+def initialize_db(app):
+ db.init_app(app)
diff --git a/database/models.py b/database/models.py
new file mode 100644
index 0000000..fe87e18
--- /dev/null
+++ b/database/models.py
@@ -0,0 +1,92 @@
+"""
+Models
+"""
+import mongoengine_goodjson as gj
+from mongoengine.fields import (
+ EmailField,
+ ListField,
+ StringField,
+ URLField
+)
+from mongoengine import (
+ BooleanField,
+ EmbeddedDocument,
+ EmbeddedDocumentField,
+ ReferenceField,
+ CASCADE,
+ PULL
+)
+from werkzeug.security import (
+ generate_password_hash,
+ check_password_hash
+)
+
+
+class PowerstatsModel(EmbeddedDocument):
+ intelligence = StringField(required=True, max_length=3)
+ strength = StringField(required=True, max_length=3)
+ speed = StringField(required=True, max_length=3)
+ durability = StringField(required=True, max_length=3)
+ power = StringField(required=True, max_length=3)
+ combat = StringField(required=True, max_length=3)
+
+
+class BiographyModel(EmbeddedDocument):
+ fullname = StringField(required=True, unique=True, max_length=100)
+ alteregos = StringField(required=True, max_length=100)
+ aliases = ListField(required=True, max_length=100)
+ placeofbirth = StringField(required=True, max_length=100)
+ firstappearance = StringField(required=True, max_length=100)
+ publisher = StringField(required=True, max_length=50)
+ alignment = StringField(required=True, max_length=10)
+
+
+class AppearanceModel(EmbeddedDocument):
+ gender = StringField(required=True, max_length=10)
+ race = StringField(required=True, max_length=20)
+ height = ListField(required=True, max_length=30)
+ weight = ListField(required=True, max_length=30)
+ eyecolor = StringField(required=True, max_length=20)
+ haircolor = StringField(required=True, max_length=20)
+
+
+class WorkModel(EmbeddedDocument):
+ occupation = StringField(required=True, max_length=100)
+ base = StringField(required=True, max_length=100)
+
+
+class ConnectionModel(EmbeddedDocument):
+ groupaffiliation = StringField(required=True, max_length=255)
+ relatives = StringField(required=True, max_length=255)
+
+
+class ImageModel(EmbeddedDocument):
+ url = URLField(required=True, max_length=255)
+
+
+class HeroeModel(gj.Document):
+ name = StringField(required=True, max_length=50)
+ powerstats = EmbeddedDocumentField(PowerstatsModel, required=True)
+ biography = EmbeddedDocumentField(BiographyModel, required=True)
+ appearance = EmbeddedDocumentField(AppearanceModel, required=True)
+ work = EmbeddedDocumentField(WorkModel, required=True)
+ connections = EmbeddedDocumentField(ConnectionModel, required=True)
+ image = EmbeddedDocumentField(ImageModel, required=True)
+ added_by = ReferenceField('UserModel')
+
+
+class UserModel(gj.Document):
+ username = StringField(required=True, unique=True, max_length=50)
+ email = EmailField(required=True, unique=True, max_length=50)
+ password = StringField(required=True)
+ admin = BooleanField(required=True)
+ heroes = ListField(ReferenceField('HeroeModel', reverse_delete_rule=PULL))
+
+ def hash_password(self):
+ self.password = generate_password_hash(self.password).decode('utf8')
+
+ def check_password(self, password):
+ return check_password_hash(self.password, password)
+
+
+UserModel.register_delete_rule(HeroeModel, 'added_by', CASCADE)