1、立项背景和目标
本项目为打卡娱乐系统,旨在将打卡任务与宠物养成相结合,解决用户坚持打卡动力不足的问题。用户通过完成打卡任务获取积分,用积分喂养和照顾虚拟宠物。项目目标包括:提供简单易用的打卡任务管理功能;通过宠物养成机制增加用户粘性;帮助用户养成良好的打卡习惯。
2、软件功能、核心功能模块的介绍
系统包含四大核心模块。用户模块:支持注册与登录,用户名唯一,通过Token保持登录状态。宠物模块:用户可领取猫、狗、兔子等Q版宠物,拥有血量、魔法、攻击、防御四项属性,随等级增长;宠物分幼年、成长、成熟、强化、巅峰五个进化阶段,体型、光晕、装饰随阶段变化;状态含开心、正常、饥饿、脏了、饿死、臭死,喂食和洗澡各消耗10积分并增加1点经验,升级所需经验为当前等级的3倍;支持消耗10积分更换宠物或改名,死亡后可重新领养;装备系统含铁剑、皮甲、生命腰带、魔力项链,各20积分,支持兑换、穿戴与卸下。打卡任务模块:支持创建任务并自定义积分,可查看、编辑、删除,手动标记完成获得积分,每任务每天限一次,今日任务可撤回并扣除积分、回收经验。积分模块:完成打卡任务获取积分,喂食、洗澡、更换宠物、改名、兑换装备等消耗积分,支持查询余额及收支记录。
3、业务流程、功能路径描述
用户首先注册并登录系统,进入后领取一只宠物。随后创建打卡任务,完成任务获得积分。积分可用于喂食、洗澡以维持宠物状态并获取经验,推动宠物升级进化;也可用于更换宠物、改名或兑换装备。宠物属性受等级和装备加成影响,状态随喂养和洗澡时间变化,超时未照顾会饥饿、脏乱甚至死亡,死亡后可重新领养。任务完成后可撤回,系统同步扣除积分并回收经验。积分不足时无法执行消耗操作。整体形成“打卡—积分—养成”的闭环流程。
1、整体架构和设计思路,不同模块使用的技术栈:
本项目为打卡娱乐系统,采用前后端分离架构。后端基于 Go 1.25 与 Gin 框架,数据库为 SQLite,认证采用 JWT,密码用 bcrypt(cost 14)哈希。模块名 `checkin-pet-system`,代码集中于 `src/`,分为 config、database、handlers、middleware、models、routes、utils 和 frontend。handlers 为单体 `handlers.go`(约 1400 行),承载全部业务逻辑;middleware 负责 JWT 与 CORS;routes 定义路由并实现 SPA 回退;frontend 为 Bootstrap 5 单页应用。整体思路是以打卡任务获取积分,积分用于宠物养成,形成“任务—积分—宠物”闭环。宠物属性公式由前端 JS 计算,后端仅返回等级与装备数据;宠物状态依据喂养、洗澡时间动态计算并同步。
2、我负责的模块和结果:
我主要负责宠物与装备模块后端开发。宠物模块实现类型列表、领养、信息查询、喂食、洗澡、更换、改名等接口:喂食与洗澡各消耗 10 积分并加 1 经验,喂食每日限 3 次、洗澡每日限 1 次;更换宠物与改名各消耗 10 积分,更换保留等级,死亡后可重新领养。装备模块实现类型查询、背包、宠物已装备、兑换、穿戴与卸下:武器加攻击、衣服加防御、腰带加生命、项链加魔法,每件 20 积分起。所有积分变动写入 points_records,类型含 earn、feed、bath、undo、change_pet、rename_pet、exchange_equip;任务完成写入 task_records 并做每日限制。接口统一 POST,成功返回 code 200 与 data。经测试,宠物与装备接口均正常,积分扣减与记录准确,装备加成正确反映在前端。
3、我遇到的难点、坑和解决方案:
主要难点:其一,服务器必须在 `src/` 目录下运行,数据库与前端资源路径均相对工作目录,从根目录启动会失败,解决方案是统一在 src 下运行并在 Docker 中固定工作目录。其二,测试脚本硬编码端口 8080,而服务默认 8888,解决方案是启动时用 `PORT=8080` 覆盖或修改脚本。其三,宠物状态需实时计算且可能与数据库不一致,解决方案是在 GetPetInfo 中比对并同步更新。其四,JWT 使用旧版 `dgrijalva/jwt-go`,Token 有效期硬编码 24 小时,解决方案是明确依赖版本,并计划迁移新库、将密钥与有效期改为环境变量。其五,bcrypt 成本因子 14 导致哈希较慢,高并发下影响登录,解决方案是评估性能后调整因子或引入缓存。通过以上措施,系统运行稳定。