aboutsummaryrefslogtreecommitdiffstats
path: root/database/models.py
diff options
context:
space:
mode:
authorJesús <heckyel@hyperbola.info>2022-03-22 00:39:40 +0800
committerJesús <heckyel@hyperbola.info>2022-03-22 00:39:40 +0800
commit3fca03988b42adaf8e67cc7137dd1fdba327e197 (patch)
treead39a5bc12a03c82b9a4fd980c1b92ca0a1dac93 /database/models.py
downloadheroeapi-3fca03988b42adaf8e67cc7137dd1fdba327e197.tar.lz
heroeapi-3fca03988b42adaf8e67cc7137dd1fdba327e197.tar.xz
heroeapi-3fca03988b42adaf8e67cc7137dd1fdba327e197.zip
initial commit
Diffstat (limited to 'database/models.py')
-rw-r--r--database/models.py92
1 files changed, 92 insertions, 0 deletions
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)