from datetime import datetime from app.extensions import db from slugify import slugify import random import string class Article(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(200), nullable=False) content = db.Column(db.Text, nullable=False) summary = db.Column(db.Text) slug = db.Column(db.String(200), unique=True, nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) def __init__(self, *args, **kwargs): if not kwargs.get('slug') and kwargs.get('title'): base_slug = slugify(kwargs.get('title')) slug = base_slug counter = 1 # Keep trying until we find a unique slug while Article.query.filter_by(slug=slug).first() is not None: # Add random string for uniqueness random_string = ''.join(random.choices(string.ascii_lowercase + string.digits, k=4)) slug = f"{base_slug}-{random_string}" kwargs['slug'] = slug super().__init__(*args, **kwargs) class Image(db.Model): id = db.Column(db.Integer, primary_key=True) filename = db.Column(db.String(200), nullable=False) data = db.Column(db.LargeBinary, nullable=False) # Store actual image data mime_type = db.Column(db.String(100), nullable=False) # Store MIME type created_at = db.Column(db.DateTime, default=datetime.utcnow)