refactor: ♻️ 重命名部分接口接收器以避免与 dao 层包名冲突 - 调整部分接口接收器命名,避免与 dao 层包名重名 🧩 feat: 📅 新增获取用户今日日程接口并完成实现 fix: 🐛 修复现实日期与相对日期转换逻辑中的初始化时序问题 - 修复 conv/time.go 中日期转换函数的一个 bug ⏱️ - 解决 viper 在包级变量初始化时机过早的问题 - 避免因过早初始化导致无法读取配置中的学期开学/结束时间 📆
88 lines
2.0 KiB
Go
88 lines
2.0 KiB
Go
package dao
|
||
|
||
import (
|
||
"errors"
|
||
"time"
|
||
|
||
"github.com/LoveLosita/smartflow/backend/model"
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
// UserDAO 用户数据访问对象
|
||
// 负责用户相关的数据库操作
|
||
type UserDAO struct {
|
||
// 这是一个口袋,用来装数据库连接实例
|
||
db *gorm.DB
|
||
}
|
||
|
||
// NewUserDAO 创建UserDAO实例
|
||
// NewUserDAO 接收一个 *gorm.DB,并把它塞进结构体的口袋里
|
||
func NewUserDAO(db *gorm.DB) *UserDAO {
|
||
return &UserDAO{
|
||
db: db,
|
||
}
|
||
}
|
||
|
||
func (r *UserDAO) WithTx(tx *gorm.DB) *UserDAO {
|
||
return &UserDAO{db: tx}
|
||
}
|
||
|
||
// Create 创建新用户
|
||
// 插入新用户信息到数据库
|
||
func (r *UserDAO) Create(username, phoneNumber, password string) (*model.User, error) {
|
||
// 创建User实例
|
||
user := &model.User{
|
||
Username: username,
|
||
PhoneNumber: phoneNumber,
|
||
Password: password, // 注意:实际项目中应该对密码进行加密处理
|
||
TokenLimit: 100000, // 默认值
|
||
TokenUsage: 0, // 初始使用量为0
|
||
LastResetAt: time.Now(), // 设置为当前时间
|
||
}
|
||
|
||
// 插入数据
|
||
if err := r.db.Create(user).Error; err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return user, nil
|
||
}
|
||
|
||
func (r *UserDAO) IfUsernameExists(name string) (bool, error) {
|
||
err := r.db.Where("username = ?", name).First(&model.User{}).Error
|
||
if err != nil {
|
||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||
return false, nil
|
||
}
|
||
return true, err
|
||
}
|
||
return true, nil
|
||
}
|
||
|
||
func (r *UserDAO) GetUserHashedPasswordByName(name string) (string, error) {
|
||
var user model.User
|
||
err := r.db.Where("username = ?", name).First(&user).Error
|
||
if err != nil {
|
||
return "", err
|
||
}
|
||
return user.Password, nil
|
||
}
|
||
|
||
func (r *UserDAO) GetUserIDByName(name string) (int, error) {
|
||
var user model.User
|
||
err := r.db.Where("username = ?", name).First(&user).Error
|
||
if err != nil {
|
||
return -1, err
|
||
}
|
||
return int(user.ID), nil
|
||
}
|
||
|
||
func (r *UserDAO) GetUserByID(id int) (*model.User, error) {
|
||
var user model.User
|
||
err := r.db.Where("id = ?", id).First(&user).Error
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return &user, nil
|
||
}
|