diff options
Diffstat (limited to 'database')
-rw-r--r-- | database/db.py | 12 | ||||
-rw-r--r-- | database/models.py | 92 |
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) |