package admin import ( "quyun/v2/app/http/dto" "quyun/v2/app/requests" "quyun/v2/app/services" "quyun/v2/database" "quyun/v2/database/models" "time" "github.com/gofiber/fiber/v3" ) // @provider type smsCodeSends struct{} type SmsCodeManualSetBody struct { Phone string `json:"phone"` Code string `json:"code"` } // List // // @Summary 短信验证码发送记录 // @Tags Admin SMS // @Produce json // @Param query query dto.SmsCodeSendListQuery false "筛选条件" // @Success 200 {object} requests.Pager{items=models.SmsCodeSend} "成功" // @Router /admin/v1/sms-code-sends [get] // @Bind query query func (ctl *smsCodeSends) List(ctx fiber.Ctx, query *dto.SmsCodeSendListQuery) (*requests.Pager, error) { if query.Pagination == nil { query.Pagination = &requests.Pagination{} } query.Pagination.Format() db := services.DB() if db == nil { return &requests.Pager{Pagination: *query.Pagination, Total: 0, Items: []*models.SmsCodeSend{}}, nil } q := db.WithContext(ctx.Context()).Model(&models.SmsCodeSend{}) if query.Phone != nil && *query.Phone != "" { q = q.Where("phone LIKE ?", database.WrapLike(*query.Phone)) } var total int64 if err := q.Count(&total).Error; err != nil { return nil, err } var items []*models.SmsCodeSend if err := q. Order("sent_at desc"). Limit(int(query.Pagination.Limit)). Offset(int(query.Pagination.Offset())). Find(&items).Error; err != nil { return nil, err } return &requests.Pager{ Pagination: *query.Pagination, Total: total, Items: items, }, nil } // ManualSet // // @Summary 手动设置短信验证码(用于短信认证) // @Tags Admin SMS // @Accept json // @Produce json // @Param body body SmsCodeManualSetBody true "请求体" // @Success 200 {object} models.SmsCodeSend "成功" // @Router /admin/v1/sms-code-sends/manual-set [post] // @Bind body body func (ctl *smsCodeSends) ManualSet(ctx fiber.Ctx, body *SmsCodeManualSetBody) (*models.SmsCodeSend, error) { return services.Users.SetPhoneCode(ctx.Context(), body.Phone, body.Code, 5*time.Minute) }