2026-04-06 14:56:45 -04:00
|
|
|
import json
|
2026-04-06 15:22:38 -04:00
|
|
|
from datetime import datetime, timezone
|
2026-04-06 14:56:45 -04:00
|
|
|
from app import db
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Article(db.Model):
|
|
|
|
|
__tablename__ = "articles"
|
|
|
|
|
|
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
|
guid = db.Column(db.Text, unique=True, nullable=False)
|
|
|
|
|
title = db.Column(db.Text, nullable=False)
|
|
|
|
|
author = db.Column(db.Text, nullable=False)
|
|
|
|
|
pub_date = db.Column(db.DateTime, nullable=False)
|
|
|
|
|
categories = db.Column(db.Text, nullable=False, default="[]")
|
|
|
|
|
link = db.Column(db.Text, nullable=False)
|
|
|
|
|
content_html = db.Column(db.Text, nullable=False, default="")
|
|
|
|
|
fetched_at = db.Column(
|
|
|
|
|
db.DateTime, nullable=False, default=lambda: datetime.now(timezone.utc)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
images = db.relationship("Image", backref="article", lazy=True,
|
|
|
|
|
cascade="all, delete-orphan")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Image(db.Model):
|
|
|
|
|
__tablename__ = "images"
|
|
|
|
|
|
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
|
article_id = db.Column(db.Integer, db.ForeignKey("articles.id"), nullable=False)
|
|
|
|
|
original_url = db.Column(db.Text, nullable=False)
|
|
|
|
|
local_path = db.Column(db.Text, nullable=False)
|
|
|
|
|
width = db.Column(db.Integer, nullable=False)
|
|
|
|
|
height = db.Column(db.Integer, nullable=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Issue(db.Model):
|
|
|
|
|
__tablename__ = "issues"
|
|
|
|
|
|
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
|
week_start = db.Column(db.Date, nullable=False)
|
|
|
|
|
week_end = db.Column(db.Date, nullable=False)
|
|
|
|
|
cover_method = db.Column(db.Text, nullable=False)
|
|
|
|
|
cover_path = db.Column(db.Text, nullable=False)
|
|
|
|
|
epub_path = db.Column(db.Text, nullable=False)
|
|
|
|
|
article_ids = db.Column(db.Text, nullable=False, default="[]")
|
|
|
|
|
excluded_article_ids = db.Column(db.Text, nullable=False, default="[]")
|
|
|
|
|
created_at = db.Column(
|
|
|
|
|
db.DateTime, nullable=False, default=lambda: datetime.now(timezone.utc)
|
|
|
|
|
)
|
|
|
|
|
status = db.Column(db.Text, nullable=False, default="draft")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Setting(db.Model):
|
|
|
|
|
__tablename__ = "settings"
|
|
|
|
|
|
|
|
|
|
key = db.Column(db.Text, primary_key=True)
|
|
|
|
|
value = db.Column(db.Text, nullable=False)
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def get(key, default=None):
|
2026-04-06 15:22:38 -04:00
|
|
|
row = db.session.get(Setting, key)
|
2026-04-06 14:56:45 -04:00
|
|
|
if row is None:
|
|
|
|
|
return default
|
|
|
|
|
return json.loads(row.value)
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def set(key, value):
|
2026-04-06 15:22:38 -04:00
|
|
|
row = db.session.get(Setting, key)
|
2026-04-06 14:56:45 -04:00
|
|
|
if row is None:
|
|
|
|
|
row = Setting(key=key, value=json.dumps(value))
|
|
|
|
|
db.session.add(row)
|
|
|
|
|
else:
|
|
|
|
|
row.value = json.dumps(value)
|
|
|
|
|
db.session.commit()
|