package webui import ( "context" "errors" "cmroubao/backend-api/internal/usecase" ) type AuthUsecaseAdapter struct { service *usecase.AuthService } func NewAuthUsecaseAdapter( service *usecase.AuthService, ) (*AuthUsecaseAdapter, error) { if service == nil { return nil, errors.New("admin auth use case is required") } return &AuthUsecaseAdapter{service: service}, nil } func (adapter *AuthUsecaseAdapter) LoginAdmin( ctx context.Context, input AdminLoginInput, ) (AdminLoginResult, error) { result, err := adapter.service.LoginAdmin( ctx, usecase.LoginAdminCommand{ Username: input.Username, Password: input.Password, }, ) if err != nil { return AdminLoginResult{}, mapAuthUsecaseError(err) } return AdminLoginResult{ Token: result.Token, ExpiresAt: result.ExpiresAt, }, nil } func (adapter *AuthUsecaseAdapter) LogoutAdmin( ctx context.Context, token string, ) error { if err := adapter.service.LogoutAdmin(ctx, token); err != nil { return mapAuthUsecaseError(err) } return nil } func mapAuthUsecaseError(err error) error { var typed *usecase.Error if !errors.As(err, &typed) { return err } var public error switch typed.Kind { case usecase.ErrorKindUnauthorized, usecase.ErrorKindForbidden, usecase.ErrorKindInvalid: public = ErrInvalidCredentials case usecase.ErrorKindUnavailable: public = ErrUnavailable default: return err } return &adapterError{ public: public, cause: err, } } var _ AdminSessionService = (*AuthUsecaseAdapter)(nil)