block-accounting/backend/internal/interface/rest/domain/dto.go

127 lines
3.0 KiB
Go
Raw Normal View History

2024-05-24 17:44:24 +00:00
package domain
import (
"encoding/json"
"fmt"
)
// Generic
type Collection[T any] struct {
Items []T `json:"items,omitempty"`
Pagination Pagination `json:"pagination,omitempty"`
}
type Pagination struct {
NextCursor string `json:"next_cursor,omitempty"`
TotalItems uint32 `json:"total_items,omitempty"`
}
// Auth related DTO's
type JoinRequest struct {
Name string `json:"name,omitempty"`
Credentals struct {
Email string `json:"email,omitempty"`
Phone string `json:"phone,omitempty"`
Telegram string `json:"telegram,omitempty"`
} `json:"credentals,omitempty"`
Mnemonic string `json:"mnemonic"`
}
type JoinResponse struct {
Token string `json:"token"`
}
type LoginRequest struct {
Mnemonic string `json:"mnemonic"`
}
type RefreshRequest struct {
Token string `json:"token"`
RefreshToken string `json:"refresh_token"`
}
type LoginResponse struct {
Token string `json:"token"`
ExpiredAt int64 `json:"token_expired_at"`
RefreshToken string `json:"refresh_token"`
RTExpiredAt int64 `json:"refresh_token_expired_at"`
}
// Organizations
type NewOrganizationRequest struct {
Name string `json:"name"`
Address string `json:"address"`
WalletMnemonic string `json:"wallet_mnemonic,omitempty"`
}
type ListOrganizationsRequest struct {
Cursor string `json:"cursor,omitempty"`
Limit uint8 `json:"limit,omitempty"` // Default: 50, Max: 50
}
// Transactions
type NewTransactionRequest struct {
Description string `json:"description,omitempty"`
Amount float64 `json:"amount,omitempty"`
ToAddr string `json:"to,omitempty"`
MaxFeeAllowed float64 `json:"max_fee_allowed,omitempty"`
Deadline int64 `json:"deadline,omitempty"`
}
type ListTransactionsRequest struct {
IDs []string `json:"ids,omitempty"`
CreatedBy string `json:"created_by,omitempty"`
To string `json:"to,omitempty"`
Cancelled bool `json:"cancelled,omitempty"`
Confirmed bool `json:"confirmed,omitempty"`
Commited bool `json:"commited,omitempty"`
Expired bool `json:"expired,omitempty"`
Pending bool `json:"pending,omitempty"`
Cursor string `json:"cursor,omitempty"`
Limit uint8 `json:"limit,omitempty"` // Default: 50, Max: 50
}
type UpdateTransactionStatusRequest struct {
Cancel bool `json:"cancel,omitempty"`
Confirm bool `json:"confirm,omitempty"`
}
// Participants
type ListParticipantsRequest struct {
IDs []string `json:"ids,omitempty"`
Cursor string `json:"cursor,omitempty"`
Limit uint8 `json:"limit,omitempty"`
}
type AddEmployeeRequest struct {
Name string `json:"name"`
Position string `json:"position"`
WalletAddress string `json:"wallet_address"`
}
type NewMultisigRequest struct {
Title string `json:"title"`
Owners []struct {
PublicKey string `json:"public_key"`
} `json:"owners"`
2024-05-25 20:38:47 +00:00
Confirmations int `json:confirmations`
2024-05-24 17:44:24 +00:00
}
func BuildRequest[T any](data []byte) (*T, error) {
var req T
if err := json.Unmarshal(data, &req); err != nil {
return nil, fmt.Errorf("error unmarshal request. %w", err)
}
return &req, nil
}