package service import ( "context" "errors" "github.com/longjoy/micro-go-course/section31/model" ) var ( ErrClientNotExist = errors.New("clientId is not exist") ErrClientSecret = errors.New("invalid clientSecret") ) // Service Define a service interface type ClientDetailsService interface { GetClientDetailsByClientId(ctx context.Context, clientId string, clientSecret string)( model.ClientDetails, error) } type InMemoryClientDetailsService struct { clientDetailsDict map[string]*model.ClientDetails } func NewInMemoryClientDetailService(clientDetailsList []*model.ClientDetails ) *InMemoryClientDetailsService{ clientDetailsDict := make(map[string]*model.ClientDetails) if len(clientDetailsList) > 0 { for _, value := range clientDetailsList { clientDetailsDict[value.ClientId] = value } } return &InMemoryClientDetailsService{ clientDetailsDict:clientDetailsDict, } } func (service *InMemoryClientDetailsService)GetClientDetailsByClientId(ctx context.Context, clientId string, clientSecret string)(model.ClientDetails, error) { // 根据 clientId 获取 clientDetails clientDetails, ok := service.clientDetailsDict[clientId]; if ok{ // 比较 clientSecret 是否正确 if clientDetails.ClientSecret == clientSecret{ return *clientDetails, nil }else { return model.ClientDetails{}, ErrClientSecret } }else { return model.ClientDetails{}, ErrClientNotExist } }