65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package apiclient
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"git.jamestombleson.com/jtom38/newsbot-api/domain"
|
|
)
|
|
|
|
const (
|
|
UserBaseRoute = "api/v1/users"
|
|
)
|
|
|
|
type Users interface {
|
|
Login(username, password string) (domain.LoginResponse, error)
|
|
SignUp(username, password string) (domain.BaseResponse, error)
|
|
}
|
|
|
|
type userClient struct {
|
|
serverAddress string
|
|
client http.Client
|
|
}
|
|
|
|
func newUserService(serverAddress string) userClient {
|
|
return userClient{
|
|
serverAddress: serverAddress,
|
|
client: http.Client{},
|
|
}
|
|
}
|
|
|
|
func (a userClient) Login(username, password string) (domain.LoginResponse, error) {
|
|
endpoint := fmt.Sprintf("%s/%s/login", a.serverAddress, UserBaseRoute)
|
|
|
|
param := url.Values{}
|
|
param.Set("username", username)
|
|
param.Set("password", password)
|
|
|
|
// Create the struct we are expecting back from the API so we can have it populated
|
|
var bind = domain.LoginResponse{}
|
|
err := PostUrlForm(a.client, endpoint, param, &bind)
|
|
if err != nil {
|
|
return domain.LoginResponse{}, err
|
|
}
|
|
|
|
return bind, nil
|
|
}
|
|
|
|
func (a userClient) SignUp(username, password string) (domain.BaseResponse, error) {
|
|
endpoint := fmt.Sprintf("%s/%s/register", a.serverAddress, UserBaseRoute)
|
|
|
|
param := url.Values{}
|
|
param.Set("username", username)
|
|
param.Set("password", password)
|
|
|
|
// Create the struct we are expecting back from the API so we can have it populated
|
|
var bind = domain.BaseResponse{}
|
|
err := PostUrlForm(a.client, endpoint, param, &bind)
|
|
if err != nil {
|
|
return domain.BaseResponse{}, err
|
|
}
|
|
|
|
return bind, nil
|
|
}
|