Started the API Client
This commit is contained in:
parent
cf0795d77f
commit
75160e0704
16
apiclient/client.go
Normal file
16
apiclient/client.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package apiclient
|
||||||
|
|
||||||
|
const (
|
||||||
|
HeaderContentType = "Content-Type"
|
||||||
|
MIMEApplicationForm = "application/x-www-form-urlencoded"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ApiClient struct {
|
||||||
|
Users Users
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(serverAddress string) ApiClient {
|
||||||
|
return ApiClient{
|
||||||
|
Users: newUserService(serverAddress),
|
||||||
|
}
|
||||||
|
}
|
47
apiclient/users.go
Normal file
47
apiclient/users.go
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package apiclient
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
|
||||||
|
"git.jamestombleson.com/jtom38/newsbot-api/domain"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
UserLoginRoute = "api/v1/users/login"
|
||||||
|
UserRegisterRoute = "api/v1/users/register"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Users interface {
|
||||||
|
Login(username, password string) (domain.LoginResponse, 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", a.serverAddress, UserLoginRoute)
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
31
apiclient/util.go
Normal file
31
apiclient/util.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package apiclient
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
func PostUrlForm(client http.Client, endpoint string, param url.Values, t any) error {
|
||||||
|
payload := bytes.NewBufferString(param.Encode())
|
||||||
|
req, err := http.NewRequest(http.MethodPost, endpoint, payload)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Set(HeaderContentType, MIMEApplicationForm)
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
decoder := json.NewDecoder(resp.Body)
|
||||||
|
err = decoder.Decode(&t)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"git.jamestombleson.com/jtom38/newsbot-portal/apiclient"
|
||||||
"git.jamestombleson.com/jtom38/newsbot-portal/internal/config"
|
"git.jamestombleson.com/jtom38/newsbot-portal/internal/config"
|
||||||
"git.jamestombleson.com/jtom38/newsbot-portal/internal/handlers"
|
"git.jamestombleson.com/jtom38/newsbot-portal/internal/handlers"
|
||||||
)
|
)
|
||||||
@ -12,7 +13,8 @@ func main() {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
cfg := config.New()
|
cfg := config.New()
|
||||||
server := handlers.NewServer(ctx, cfg)
|
apiClient := apiclient.New(cfg.ServerAddress)
|
||||||
|
server := handlers.NewServer(ctx, cfg, apiClient)
|
||||||
|
|
||||||
fmt.Println("The server is online and waiting for requests.")
|
fmt.Println("The server is online and waiting for requests.")
|
||||||
fmt.Printf("http://%v:8082\r\n", cfg.ServerAddress)
|
fmt.Printf("http://%v:8082\r\n", cfg.ServerAddress)
|
||||||
|
Loading…
Reference in New Issue
Block a user