diff options
author | Julien Dessaux | 2025-02-14 00:14:15 +0100 |
---|---|---|
committer | Julien Dessaux | 2025-02-14 00:14:15 +0100 |
commit | d97985a694b218713ddf63ed684b6a509f931f3b (patch) | |
tree | 84609f4e242419bf89301e0ead4927f450d7bfe5 /golang/pkg/api/contracts.go | |
parent | [golang] Bootstrap contracting and refactor the agent code (diff) | |
download | spacetraders-d97985a694b218713ddf63ed684b6a509f931f3b.tar.gz spacetraders-d97985a694b218713ddf63ed684b6a509f931f3b.tar.bz2 spacetraders-d97985a694b218713ddf63ed684b6a509f931f3b.zip |
[golang] implement automation loop and add contract accepting
Diffstat (limited to '')
-rw-r--r-- | golang/pkg/api/contracts.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/golang/pkg/api/contracts.go b/golang/pkg/api/contracts.go index f82ee6d..9478d4f 100644 --- a/golang/pkg/api/contracts.go +++ b/golang/pkg/api/contracts.go @@ -3,10 +3,33 @@ package api import ( "fmt" "net/url" + "path" + "git.adyxax.org/adyxax/spacetraders/golang/pkg/database" "git.adyxax.org/adyxax/spacetraders/golang/pkg/model" ) +func (c *Client) Accept(contract *model.Contract, db *database.DB) error { + if contract.Accepted { + return nil + } + uriRef := url.URL{Path: path.Join("my/contracts", contract.Id, "accept")} + type acceptResponse struct { + Agent *model.Agent `json:"agent"` + Contract *model.Contract `json:"contract"` + } + var response acceptResponse + if err := c.Send("POST", &uriRef, nil, &response); err != nil { + return fmt.Errorf("failed to accept contract %s: %w", contract.Id, err) + } + if err := db.SaveAgent(response.Agent); err != nil { + return fmt.Errorf("failed to accept contract %s: %w", contract.Id, err) + } + contract.Accepted = response.Contract.Accepted + contract.Terms = response.Contract.Terms + return nil +} + func (c *Client) MyContracts() ([]model.Contract, error) { uriRef := url.URL{Path: "my/contracts"} var contracts []model.Contract |