summaryrefslogtreecommitdiff
path: root/src/cardmarket/account.go
blob: 3baa747576ea152405ab06590c105f1fae2fbe50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package cardmarket

import (
	"context"
	"encoding/json"
	"io"
	"log/slog"
)

type Account struct{}

func (c *ApiClient) GetAccountInformation(ctx context.Context) (Account, error) {
	slog.DebugContext(ctx, "requesting account info...")
	resp, err := c.httpClient.GetWithContext(ctx, c.baseURL+"/account")
	if err != nil {
		slog.DebugContext(ctx, "failed to get account info from API")
		return Account{}, err
	}
	slog.DebugContext(ctx, "received account info")

	slog.DebugContext(ctx, "reading body...")
	respBodyBuf, err := io.ReadAll(resp.Body)
	if err != nil {
		slog.DebugContext(ctx, "failed to read body")
		return Account{}, err
	}
	defer resp.Body.Close()
	slog.DebugContext(ctx, "read body")

	slog.DebugContext(ctx, "parsing body...", "respBodyBuf", string(respBodyBuf))
	type responseBody struct {
		UserID            uint32 `json:"idUser"`
		Username          []byte `json:"username"`
		Country           []byte `json:"country"`
		Type              uint8  `json:"isCommercial"`
		SellerStatus      uint8  `json:"sellerActivation"`
		RiskGroup         uint8  `json:"riskGroup"`
		Reputation        uint8  `json:"reputation"`
		ShipsFast         uint8  `json:"shipsFast"`
		SalesCount        uint32 `json:"sellCount"`
		SoldItemCount     uint32 `json:"soldItems"`
		AvgShippingTime   uint8  `json:"avgShippingTime"`
		OnVacation        bool   `json:"onVacation"`
		DisplayLanguageID uint8  `json:"idDisplayLanguage"`
		Name              struct {
			First []byte `json:"firstName"`
			Last  []byte `json:"lastName"`
		} `json:"name"`
		HomeAddress struct {
			ReceiverName []byte `json:"name"`
			Extra        []byte `json:"extra"`
			Street       []byte `json:"street"`
			PostCode     []byte `json:"zip"`
			City         []byte `json:"city"`
			Country      []byte `json:"country"`
		} `json:"homeAddress"`
		Email            []byte `json:"email"`
		PhoneNumber      []byte `json:"phoneNumber"`
		VAT              []byte `json:"vat"`
		RegistrationDate []byte `json:"registerDate"`
		IsActivated      bool   `json:"isActivated"`
		Wallet           struct {
			TotalBalance           float32 `json:"totalBalance"`
			MoneyBalance           float32 `json:"moneyBalance"`
			BonusBalance           float32 `json:"bonusBalance"`
			UnpaidAmount           float32 `json:"unpaidAmount"`
			ProviderRechargeAmount float32 `json:"providerRechargeAmount"`
		} `json:"moneyDetails"`
		BankAccount struct {
			AccountOwner []byte `json:"accountOwner"`
			IBAN         []byte `json:"iban"`
			BIC          []byte `json:"bic"`
			BankName     []byte `json:"bankName"`
		} `json:"bankAccount"`
		ArticlesInShoppingCart uint16            `json:"articlesInShoppingCart"`
		UnreadMessages         uint16            `json:"unreadMessages"`
		MaySell                bool              `json:"maySell"`
		Links                  map[string]string `json:"links"`
	}
	respBody := new(responseBody)
	if err = json.Unmarshal(respBodyBuf, respBody); err != nil {
		slog.DebugContext(ctx, "failed to unmarshal body: "+string(respBodyBuf))
		return Account{}, err
	}
	slog.DebugContext(ctx, "parsed body")

	return Account{}, nil
}