2025-10-01 16:30:27 +00:00
|
|
|
package usecase
|
|
|
|
|
|
|
|
|
|
import (
|
2025-11-04 09:47:36 +00:00
|
|
|
errs "backend/pkg/library/errors"
|
2025-10-01 16:30:27 +00:00
|
|
|
"context"
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
"backend/pkg/member/domain/member"
|
|
|
|
|
"backend/pkg/member/domain/usecase"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func (use *MemberUseCase) GenerateRefreshCode(ctx context.Context, param usecase.GenerateRefreshCodeRequest) (usecase.GenerateRefreshCodeResponse, error) {
|
|
|
|
|
checkType, status := member.GetCodeNameByCode(param.CodeType)
|
|
|
|
|
if !status {
|
2025-11-04 09:47:36 +00:00
|
|
|
e := errs.ResNotFoundError(fmt.Sprintf("failed to get verify code type: %d", param.CodeType))
|
2025-10-01 16:30:27 +00:00
|
|
|
|
|
|
|
|
return usecase.GenerateRefreshCodeResponse{}, e
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
vc, err := use.VerifyCodeModel.IsVerifyCodeExist(ctx, param.LoginID, checkType)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return usecase.GenerateRefreshCodeResponse{}, err
|
|
|
|
|
}
|
|
|
|
|
// 找不到,故要產生
|
|
|
|
|
if vc == "" {
|
|
|
|
|
vc, err = generateVerifyCode(6)
|
|
|
|
|
if err != nil {
|
2025-11-04 09:47:36 +00:00
|
|
|
return usecase.GenerateRefreshCodeResponse{}, errs.SysInternalError(err.Error())
|
2025-10-01 16:30:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = use.VerifyCodeModel.SetVerifyCode(ctx, param.LoginID, checkType, vc)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return usecase.GenerateRefreshCodeResponse{},
|
2025-11-04 09:47:36 +00:00
|
|
|
errs.DBErrorError("failed to set verify code")
|
2025-10-01 16:30:27 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return usecase.GenerateRefreshCodeResponse{
|
|
|
|
|
Data: usecase.VerifyCode{
|
|
|
|
|
VerifyCode: vc,
|
|
|
|
|
},
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (use *MemberUseCase) VerifyRefreshCode(ctx context.Context, param usecase.VerifyRefreshCodeRequest) error {
|
|
|
|
|
err := use.CheckRefreshCode(ctx, param)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 因為 CheckRefreshCde 中也有驗證一次,這次就讓他不報錯直接過,因為如果有錯誤,上面那個就會報錯了
|
|
|
|
|
checkType, _ := member.GetCodeNameByCode(param.CodeType)
|
|
|
|
|
// todo: 刪不掉看要用什麼方法補刪除,而不是報錯
|
|
|
|
|
_ = use.VerifyCodeModel.DelVerifyCode(ctx, param.LoginID, checkType)
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (use *MemberUseCase) CheckRefreshCode(ctx context.Context, param usecase.VerifyRefreshCodeRequest) error {
|
|
|
|
|
checkType, status := member.GetCodeNameByCode(param.CodeType)
|
|
|
|
|
if !status {
|
2025-11-04 09:47:36 +00:00
|
|
|
return errs.ResNotFoundError(fmt.Sprintf("failed to get verify code type: %d", param.CodeType))
|
2025-10-01 16:30:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get, err := use.VerifyCodeModel.IsVerifyCodeExist(ctx, param.LoginID, checkType)
|
|
|
|
|
if err != nil {
|
2025-11-04 09:47:36 +00:00
|
|
|
return errs.DBErrorErrorL(
|
|
|
|
|
use.Logger,
|
|
|
|
|
[]errs.LogField{
|
|
|
|
|
{Key: "err", Val: err.Error()},
|
|
|
|
|
},
|
2025-10-01 16:30:27 +00:00
|
|
|
"failed to set verify code",
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
if get == "" {
|
2025-11-04 09:47:36 +00:00
|
|
|
return errs.ResNotFoundError("failed to get data", param.LoginID, checkType)
|
2025-10-01 16:30:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if get != param.VerifyCode {
|
2025-11-04 09:47:36 +00:00
|
|
|
return errs.AuthForbiddenError("failed to verify code")
|
2025-10-01 16:30:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (use *MemberUseCase) VerifyPlatformAuthResult(ctx context.Context, param usecase.VerifyAuthResultRequest) (usecase.VerifyAuthResultResponse, error) {
|
|
|
|
|
account, err := use.Account.FindOneByAccount(ctx, param.Account)
|
|
|
|
|
if err != nil {
|
2025-11-04 09:47:36 +00:00
|
|
|
return usecase.VerifyAuthResultResponse{}, errs.ResNotFoundError(fmt.Sprintf("failed to find account: %s", param.Account))
|
2025-10-01 16:30:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return usecase.VerifyAuthResultResponse{
|
|
|
|
|
Status: CheckPasswordHash(param.Token, account.Token),
|
|
|
|
|
}, nil
|
|
|
|
|
}
|