/* * Copyright 2026 Oleg Borodin * * This work is published and licensed under a Creative Commons * Attribution-NonCommercial-NoDerivatives 4.0 International License. * * Distribution of this work is permitted, but commercial use and * modifications are strictly prohibited. */ package accntcli import ( "context" "encoding/json" "errors" "mstore/app/accoper" "mstore/app/handler" "mstore/pkg/descr" ) func (cli *Client) CreateAccount(ctx context.Context, host, user, pass string) (string, error) { var err error var res string params := accoper.CreateAccountParams{ Username: user, Password: pass, } reqdata, err := json.Marshal(params) if err != nil { return res, err } respdata, err := cli.doHTTPCall(ctx, host, "accont", "create", reqdata) if err != nil { return res, err } response := handler.NewResponse[accoper.CreateAccountResult]() err = json.Unmarshal(respdata, response) if err != nil { return res, err } if response.Error { err = errors.New(response.Message) return res, err } res = response.Result.AccountID return res, err } func (cli *Client) GetAccountByID(ctx context.Context, host, accountID string) (*descr.AccountShort, error) { var err error res := &descr.AccountShort{} params := accoper.GetAccountParams{ AccountID: accountID, } reqdata, err := json.Marshal(params) if err != nil { return res, err } resdata, err := cli.doHTTPCall(ctx, host, "account", "get", reqdata) if err != nil { return res, err } response := handler.NewResponse[accoper.GetAccountResult]() err = json.Unmarshal(resdata, response) if err != nil { return res, err } if response.Error { err = errors.New(response.Message) return res, err } res = response.Result.Account return res, err } func (cli *Client) GetAccountByName(ctx context.Context, host, username string) (*descr.AccountShort, error) { var err error res := &descr.AccountShort{} params := accoper.GetAccountParams{ Username: username, } reqdata, err := json.Marshal(params) if err != nil { return res, err } resdata, err := cli.doHTTPCall(ctx, host, "account", "get", reqdata) if err != nil { return res, err } response := handler.NewResponse[accoper.GetAccountResult]() err = json.Unmarshal(resdata, response) if err != nil { return res, err } if response.Error { err = errors.New(response.Message) return res, err } res = response.Result.Account return res, err } func (cli *Client) UpdateAccountByID(ctx context.Context, host string, accountID, newUsername, newPassword string) error { var err error params := accoper.UpdateAccountParams{ AccountID: accountID, NewUsername: newUsername, NewPassword: newPassword, } reqdata, err := json.Marshal(params) if err != nil { return err } resdata, err := cli.doHTTPCall(ctx, host, "account", "update", reqdata) if err != nil { return err } response := handler.NewResponse[accoper.UpdateAccountResult]() err = json.Unmarshal(resdata, response) if err != nil { return err } if response.Error { err = errors.New(response.Message) return err } return err } func (cli *Client) UpdateAccountByName(ctx context.Context, host, username, newUsername, newPassword string) error { var err error params := accoper.UpdateAccountParams{ Username: username, NewUsername: newUsername, NewPassword: newPassword, } reqdata, err := json.Marshal(params) if err != nil { return err } resdata, err := cli.doHTTPCall(ctx, host, "account", "update", reqdata) if err != nil { return err } response := handler.NewResponse[accoper.UpdateAccountResult]() err = json.Unmarshal(resdata, response) if err != nil { return err } if response.Error { err = errors.New(response.Message) return err } return err } func (cli *Client) DeleteAccountByName(ctx context.Context, host, username string) error { var err error params := accoper.DeleteAccountParams{ Username: username, } reqdata, err := json.Marshal(params) if err != nil { return err } resdata, err := cli.doHTTPCall(ctx, host, "account", "delete", reqdata) if err != nil { return err } response := handler.NewResponse[accoper.DeleteAccountResult]() err = json.Unmarshal(resdata, response) if err != nil { return err } if response.Error { err = errors.New(response.Message) return err } return err } func (cli *Client) DeleteAccountByID(ctx context.Context, host, accountID string) error { var err error params := accoper.DeleteAccountParams{ AccountID: accountID, } reqdata, err := json.Marshal(params) if err != nil { return err } resdata, err := cli.doHTTPCall(ctx, host, "account", "delete", reqdata) if err != nil { return err } response := handler.NewResponse[accoper.DeleteAccountResult]() err = json.Unmarshal(resdata, response) if err != nil { return err } if response.Error { err = errors.New(response.Message) return err } return err } func (cli *Client) ListAccounts(ctx context.Context, host string) ([]descr.AccountShort, error) { var err error res := make([]descr.AccountShort, 0) params := accoper.ListAccountsParams{} reqdata, err := json.Marshal(params) if err != nil { return res, err } resdata, err := cli.doHTTPCall(ctx, host, "accounts", "list", reqdata) if err != nil { return res, err } response := handler.NewResponse[accoper.ListAccountsResult]() err = json.Unmarshal(resdata, response) if err != nil { return res, err } if response.Error { err = errors.New(response.Message) return res, err } res = response.Result.Accounts return res, err }