add 站点图标缓存

This commit is contained in:
jxxghp
2023-06-12 11:16:37 +08:00
parent e10776cf1d
commit a111c1dea9
13 changed files with 110 additions and 65 deletions

View File

@ -46,4 +46,4 @@ def update_db():
alembic_cfg.set_main_option('sqlalchemy.url', f"sqlite:///{db_location}")
upgrade(alembic_cfg, 'head')
except Exception as e:
logger(f'数据库更新失败:{e}')
logger.error(f'数据库更新失败:{e}')

View File

@ -23,7 +23,6 @@ class Base:
for key, value in payload.items():
setattr(self, key, value)
db.commit()
db.refresh(self)
@classmethod
def delete(cls, db, rid):

View File

@ -35,18 +35,3 @@ class Site(Base):
@staticmethod
def get_actives(db: Session):
return db.query(Site).filter(Site.is_active == 1).all()
class SiteIcon(Base):
"""
站点图标表
"""
id = Column(Integer, Sequence('id'), primary_key=True, index=True)
name = Column(String, nullable=False)
domain = Column(String, index=True)
url = Column(String, nullable=False)
base64 = Column(String)
@staticmethod
def get_by_domain(db: Session, domain: str):
return db.query(SiteIcon).filter(SiteIcon.domain == domain).first()

19
app/db/models/siteicon.py Normal file
View File

@ -0,0 +1,19 @@
from sqlalchemy import Column, Integer, String, Sequence
from sqlalchemy.orm import Session
from app.db.models import Base
class SiteIcon(Base):
"""
站点图标表
"""
id = Column(Integer, Sequence('id'), primary_key=True, index=True)
name = Column(String, nullable=False)
domain = Column(String, index=True)
url = Column(String, nullable=False)
base64 = Column(String)
@staticmethod
def get_by_domain(db: Session, domain: str):
return db.query(SiteIcon).filter(SiteIcon.domain == domain).first()

42
app/db/siteicons.py Normal file
View File

@ -0,0 +1,42 @@
from typing import List
from sqlalchemy.orm import Session
from app.db import SessionLocal
from app.db.models.siteicon import SiteIcon
class SiteIcons:
"""
站点管理
"""
_db: Session = None
def __init__(self, _db=SessionLocal()):
self._db = _db
def list(self) -> List[SiteIcon]:
"""
获取站点图标列表
"""
return SiteIcon.list(self._db)
def get_by_domain(self, domain: str) -> SiteIcon:
"""
按域名获取站点图标
"""
return SiteIcon.get_by_domain(self._db, domain)
def update_icon(self, name: str, domain: str, icon_url: str, icon_base64: str) -> bool:
"""
更新站点图标
"""
siteicon = SiteIcon(name=name, domain=domain, url=icon_url, base64=icon_base64)
if not self.get_by_domain(domain):
siteicon.create(self._db)
elif icon_base64:
siteicon.update(self._db, {
"url": icon_url,
"base64": f"data:image/ico;base64,{icon_base64}"
})
return True

View File

@ -3,7 +3,7 @@ from typing import Tuple, List
from sqlalchemy.orm import Session
from app.db import SessionLocal
from app.db.models.site import Site, SiteIcon
from app.db.models.site import Site
class Sites:
@ -60,17 +60,3 @@ class Sites:
"cookie": cookies
})
return True, "更新站点Cookie成功"
def update_icon(self, name: str, domain: str, icon_url: str, icon_base64: str) -> bool:
"""
更新站点图标
"""
siteicon = SiteIcon(name=name, domain=domain, url=icon_url, base64=icon_base64)
if not siteicon.get_by_domain(self._db, domain):
siteicon.create(self._db)
elif icon_base64:
siteicon.update(self._db, {
"url": icon_url,
"base64": f"data:image/ico;base64,{icon_base64}"
})
return True