class Post(db.Document): page_id = db.StringField() author = db.ReferenceField(User, reverse_delete_rule=db.CASCADE) creation_date = db.DateTimeField(default=datetime.utcnow()) published = db.BooleanField(default=False) weight = db.IntField(min_value=0, default=0) slug = db.StringField(max_length=128, unique=True) category = db.ReferenceField(Category) title = db.StringField(max_length=128, required=True, unique=True) description = db.StringField(max_length=1024) featured_image = db.EmbeddedDocumentField(Image) detail_images = db.ListField(db.EmbeddedDocumentField(Image)) meta = {'collection': 'post'} def __repr__(self): return f'<Post | Title: {self.title} \ Author:{self.author.username} Slug: {self.slug}>' def set_title(self, title): self.title = str(title).strip() def set_slug(self, title): self.slug = slugify(title) def set_category(self, id): self.category = Category.objects.filter(id=id).first() def set_author(self, id): self.author = User.objects.filter(id=id).first()
class User(db.Document): username = db.StringField(max_length=64, required=True, unique=True) email = db.EmailField(max_length=128, required=True, unique=True) password_hash = db.StringField(max_length=128, required=True) slug = db.StringField(max_length=128) role = db.ReferenceField(Role, reverse_delete_rule=db.CASCADE) creation_date = db.DateTimeField(default=datetime.utcnow()) meta = {'collection': 'user'} def __repr__(self) -> str: return f'<User | username: {self.username}, email: {self.email}>' def set_password(self, password): self.password_hash = generate_password_hash(password) def check_password(self, password) -> bool: return check_password_hash(self.password_hash, password) def set_slug(self, username): self.slug = slugify(username) def set_username(self, username): self.username = (str(username).replace(' ', '')).lower() def set_email(self, email): self.email = str(email).lower()
class Role(db.Document): name = db.StringField(max_length=64, required=True, unique=True) description = db.StringField(max_length=128) meta = {'collection': 'role'} def __repr__(self) -> str: return f'<Role | name: {self.name}, description: {self.description}>' def set_name(self, name): self.name = (str(name).replace(' ', '')).upper()
class Category(db.Document): name = db.StringField(max_length=128, required=True, unique=True) slug = db.StringField(max_length=128, unique=True) description = db.StringField(max_length=512) creation_date = db.DateTimeField(default=datetime.utcnow()) meta = {'collection': 'category'} def __repr__(self): return f'<Category | Name: {self.name} Slug: {self.slug}>' def set_slug(self, name): self.slug = slugify(name)
class Tasks(db.Document): task = db.StringField(max_length=64, required=True) creation_date = db.DateTimeField(default=datetime.utcnow()) meta = {'collection': 'tasks', 'indexes': ['task', '-creation_date']} def __repr__(self) -> str: return f'<Task: {self.task}, Date: {self.creation_date}>'
class Post(db.Document): author = db.ReferenceField(User, reverse_delete_rule=db.CASCADE) title = db.StringField(max_length=128, required=True) slug = db.StringField(max_length=128) description = db.StringField(max_length=1024) creation_date = db.DateTimeField(default=datetime.utcnow()) weight = db.IntField(min_value=0) category = db.ListField( db.ReferenceField(Category, reverse_delete_rule=db.CASCADE)) meta = {'collection': 'post', 'indexes': ['title', 'slug']} def __repr__(self): return f'<Post | Title: {self.title} Author:{self.author} \ Slug: {self.slug}>' def set_slug(self, title): return slugify(title)
class User(db.Document): username = db.StringField(max_length=128) email = db.EmailField(max_length=128, required=True, unique=True) password_hash = db.StringField(max_length=128, required=True) creation_date = db.DateTimeField(default=datetime.utcnow()) meta = { 'collection': 'user', 'indexes': ['username', 'email', '-creation_date'] } def __repr__(self) -> str: return f'<User: username:{self.username}, emal:{self.email}>' def set_password(self, password) -> None: self.password_hash = generate_password_hash(password) def get_password(self, password) -> bool: return check_password_hash(self.password_hash, password)
class Role(db.Document): name = db.StringField(max_length=64, required=True, unique=True) description = db.StringField() meta = {'collection': 'role'}
class Image(db.EmbeddedDocument): name = db.StringField(max_length=128, required=True) path = db.StringField(max_length=256, required=True)
class Comment(db.Document): author = db.ReferenceField(User, reverse_delete_rule=db.CASCADE) comment = db.StringField(max_length=1024) creation_date = db.DateTimeField(default=datetime.utcnow()) meta = {'collection': 'comment'}