feat(wxapp): 实现分享功能并优化用户信息相关操作

- 新增分享功能处理逻辑,包括获取设置、记录分享次数和更新用户积分
- 优化用户信息获取和更新操作,提高代码复用性和可维护性
- 添加错题收藏功能,支持用户对错题进行收藏和取消收藏
- 重构部分代码,提高可读性和性能
This commit is contained in:
Basyc 2025-03-07 21:13:18 +08:00
parent 7ace7db5c5
commit 97a61189ea
3 changed files with 445 additions and 161 deletions

File diff suppressed because it is too large Load Diff

View File

@ -111,6 +111,7 @@ class CRUDPaperTest(CRUDBase[PaperTest, PaperTestCreate, PaperTestUpdate]):
class CRUDPhonecode(CRUDBase[Phonecode, PhoneCodeCreate, PhoneCodeUpdate]): class CRUDPhonecode(CRUDBase[Phonecode, PhoneCodeCreate, PhoneCodeUpdate]):
def get_phonecode(self, db: Session, phonecode_id: int): def get_phonecode(self, db: Session, phonecode_id: int):
return self.get_by_field(db, "id", phonecode_id) return self.get_by_field(db, "id", phonecode_id)
def get_latest_by_phone(self, db: Session, phone: str, weid: int): def get_latest_by_phone(self, db: Session, phone: str, weid: int):
"""获取指定手机号的最新验证码记录""" """获取指定手机号的最新验证码记录"""
return db.query(self.model).filter( return db.query(self.model).filter(
@ -118,6 +119,7 @@ class CRUDPhonecode(CRUDBase[Phonecode, PhoneCodeCreate, PhoneCodeUpdate]):
self.model.weid == weid self.model.weid == weid
).order_by(self.model.createtime.desc()).first() ).order_by(self.model.createtime.desc()).first()
class CRUDQYear(CRUDBase[QYear, QYearCreate, QYearUpdate]): class CRUDQYear(CRUDBase[QYear, QYearCreate, QYearUpdate]):
def get_qyear(self, db: Session, qyear_id: int): def get_qyear(self, db: Session, qyear_id: int):
return self.get_by_field(db, "id", qyear_id) return self.get_by_field(db, "id", qyear_id)
@ -132,11 +134,70 @@ class CRUDSetting(CRUDBase[Setting, SettingCreate, SettingUpdate]):
def get_setting(self, db: Session, setting_id: int): def get_setting(self, db: Session, setting_id: int):
return self.get_by_field(db, "id", setting_id) return self.get_by_field(db, "id", setting_id)
def get_setting_1(self, session: Session, uniacid: int):
# 执行查询并获取第一条结果
result = session.query(
self.model.share_integral,
self.model.share_title,
self.model.shareupper
).filter(
self.model.weid == uniacid
).first()
# 将结果转换为字典格式
if result:
return {
"share_integral": result[0],
"share_title": result[1],
"shareupper": result[2]
}
return {}
class CRUDShareRecord(CRUDBase[ShareRecord, ShareRecordCreate, ShareRecordUpdate]): class CRUDShareRecord(CRUDBase[ShareRecord, ShareRecordCreate, ShareRecordUpdate]):
def get_share_record(self, db: Session, share_record_id: int): def get_share_record(self, db: Session, share_record_id: int):
return self.get_by_field(db, "id", share_record_id) return self.get_by_field(db, "id", share_record_id)
def get_share_record_1(self, session: Session, uniacid: int, uid: int):
# 生成当天日期字符串
current_day = datetime.now().strftime("%Y-%m-%d")
# 构建查询并获取结果
result = session.query(
self.model.id,
self.model.uid,
self.model.num
).filter(
self.model.weid == uniacid,
self.model.uid == uid,
self.model.day == current_day
).first()
# 转换结果类型
# return result._asdict() if result else {} # 适用于 SQLAlchemy 2.x 的 Row 对象
# 或者手动构建字典(兼容更多版本)
return dict(zip(['id', 'uid', 'num'], result)) if result else {}
def update_share_record(
self,
session: Session,
update_data: dict,
record_id: int,
user_id: int
) -> int:
try:
# 执行更新操作
affected_rows = session.query(self.model).filter(
self.model.id == record_id,
self.model.uid == user_id
).update(update_data)
session.commit()
return affected_rows
except Exception as e:
session.rollback()
print(f"更新失败: {str(e)}")
return 0
class CRUDsonSimple(CRUDBase[SonSimple, SonSimpleCreate, SonSimpleUpdate]): class CRUDsonSimple(CRUDBase[SonSimple, SonSimpleCreate, SonSimpleUpdate]):
def get_son_simple(self, db: Session, son_simple_id: int): def get_son_simple(self, db: Session, son_simple_id: int):

View File

@ -84,7 +84,7 @@ class CRUDUserSpequence(CRUDBase[UserSpequence, UserSpequenceCreate, UserSpequen
class CRUDUserMember(CRUDBase[UserMember, UserMemberCreate, UserMemberUpdate]): class CRUDUserMember(CRUDBase[UserMember, UserMemberCreate, UserMemberUpdate]):
def get_user_member(self, db: Session, user_member_id: int): def get_user_member(self, db: Session, user_member_id: int):
return self.get_by_field(db, "id", user_member_id) return self.get_by_field(db, "id", user_member_id)
def get_by_openid_and_weid(self, db: Session, openid: str, weid: int, istatus: int = 1): def get_by_openid_and_weid(self, db: Session, openid: str, weid: int, istatus: int = 1):
"""通过openid和weid获取用户""" """通过openid和weid获取用户"""
return db.query(self.model).filter( return db.query(self.model).filter(
@ -98,6 +98,47 @@ class CRUDUserCollectionPraction(
CRUDBase[UserCollectionPraction, UserCollectionPractionCreate, UserCollectionPractionUpdate]): CRUDBase[UserCollectionPraction, UserCollectionPractionCreate, UserCollectionPractionUpdate]):
def get_user_collection_praction(self, db: Session, user_collection_praction_id: int): def get_user_collection_praction(self, db: Session, user_collection_praction_id: int):
return self.get_by_field(db, "id", user_collection_praction_id) return self.get_by_field(db, "id", user_collection_praction_id)
def get_user_collection_praction_1(
self,
session: Session,
uniacid: int,
uid: int,
testid: int
) -> dict:
result = session.query(
self.model
).filter(
self.model.weid == uniacid,
self.model.istatus == 1,
self.model.uid == uid,
self.model.testid == testid
).first()
return result.__dict__ if result else {}
def delete_user_collection_praction(
self,
session: Session,
uniacid: int,
uid: int,
testid: int
) -> int:
try:
# 执行删除操作
affected_rows = session.query(
self.model
).filter(
self.model.weid == uniacid,
self.model.uid == uid,
self.model.testid == testid
).delete()
session.commit()
return affected_rows
except Exception as e:
session.rollback()
print(f"删除失败: {str(e)}")
return 0
class CRUDUserGift(CRUDBase[UserGift, UserGiftCreate, UserGiftUpdate]): class CRUDUserGift(CRUDBase[UserGift, UserGiftCreate, UserGiftUpdate]):
@ -134,10 +175,48 @@ class CRUDUserPool(CRUDBase[UserPool, UserPoolCreate, UserPoolUpdate]):
def get_user_pool(self, db: Session, user_pool_id: int): def get_user_pool(self, db: Session, user_pool_id: int):
return self.get_by_field(db, "id", user_pool_id) return self.get_by_field(db, "id", user_pool_id)
class CRUDFullExamUser(CRUDBase[FullExamUser, FullExamUserCreate, FullExamUserUpdate]): class CRUDFullExamUser(CRUDBase[FullExamUser, FullExamUserCreate, FullExamUserUpdate]):
def get_full_exam_user(self, db: Session, full_exam_user_id: int): def get_full_exam_user(self, db: Session, full_exam_user_id: int):
return self.get_by_field(db, "id", full_exam_user_id) return self.get_by_field(db, "id", full_exam_user_id)
def get_user_info(self, session: Session, uniacid: int, uid: int):
# 构建查询并获取第一条结果
result = session.query(
self.model.id,
self.model.integral,
self.model.status
).filter(
self.model.weid == uniacid,
self.model.id == uid
).first()
# 转换为字典格式
fields = ["id", "integral", "status"]
if result is not None:
return dict(zip(fields, result))
return {}
def update_user_info(
self,
session: Session,
update_data: dict,
user_id: int
) -> int:
try:
# 执行更新操作
affected_rows = session.query(self.model).filter(
self.model.id == user_id
).update(update_data)
session.commit()
return affected_rows
except Exception as e:
session.rollback()
print(f"更新失败: {str(e)}")
return 0
def get_by_openid_and_weid(self, db: Session, openid: str, weid: int, istatus: int = 1): def get_by_openid_and_weid(self, db: Session, openid: str, weid: int, istatus: int = 1):
"""通过openid和weid获取用户""" """通过openid和weid获取用户"""
return db.query(self.model).filter( return db.query(self.model).filter(
@ -145,7 +224,7 @@ class CRUDFullExamUser(CRUDBase[FullExamUser, FullExamUserCreate, FullExamUserUp
self.model.weid == weid, self.model.weid == weid,
self.model.istatus == istatus self.model.istatus == istatus
).first() ).first()
def get_by_id_and_weid(self, db: Session, id: int, weid: int, istatus: int = 1): def get_by_id_and_weid(self, db: Session, id: int, weid: int, istatus: int = 1):
"""通过id和weid获取用户""" """通过id和weid获取用户"""
return db.query(self.model).filter( return db.query(self.model).filter(
@ -154,6 +233,7 @@ class CRUDFullExamUser(CRUDBase[FullExamUser, FullExamUserCreate, FullExamUserUp
self.model.istatus == istatus self.model.istatus == istatus
).first() ).first()
# 创建实例 # 创建实例
user_doexam = CRUDUserDoexam(UserDoexam) user_doexam = CRUDUserDoexam(UserDoexam)
user_doother_exam_answer = CRUDUserDoOtherExamAnswer(UserDoOtherExamAnswer) user_doother_exam_answer = CRUDUserDoOtherExamAnswer(UserDoOtherExamAnswer)
@ -170,5 +250,3 @@ user_doother_exam = CRUDUserDoOtherExam(UserDootherExam)
user_wrong_praction = CRUDUserWrongPraction(UserWrongPraction) user_wrong_praction = CRUDUserWrongPraction(UserWrongPraction)
user_pool = CRUDUserPool(UserPool) user_pool = CRUDUserPool(UserPool)
full_exam_user = CRUDFullExamUser(FullExamUser) full_exam_user = CRUDFullExamUser(FullExamUser)