119 lines
2.9 KiB
Go
119 lines
2.9 KiB
Go
package dolar
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.maximotejeda.com/maximo/dolar/proto/golang/dolar"
|
|
"git.maximotejeda.com/maximo/us-dop-bot/internal/application/domain"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
type Adapter struct {
|
|
dolar dolar.DollarClient
|
|
conn *grpc.ClientConn
|
|
}
|
|
|
|
func NewAdapter(conn *grpc.ClientConn) (*Adapter, error) {
|
|
client := dolar.NewDollarClient(conn)
|
|
return &Adapter{dolar: client, conn: conn}, nil
|
|
}
|
|
func (a *Adapter) GetLatest(name string) (*domain.History, error) {
|
|
hr, err := a.dolar.GetLatest(context.Background(), &dolar.GetLatestRequest{Name: name})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
history := &domain.History{
|
|
ID: hr.Actual.Id,
|
|
Institution: domain.Institution{
|
|
Name: hr.Actual.Name,
|
|
},
|
|
Compra: float64(hr.Actual.Compra),
|
|
Venta: float64(hr.Actual.Venta),
|
|
Parser: hr.Actual.Parser,
|
|
Parsed: hr.Actual.Parsed,
|
|
}
|
|
return history, nil
|
|
}
|
|
|
|
func (a Adapter) GetSince(name string, duration int64) (list []*domain.History, err error) {
|
|
hrl, err := a.dolar.GetSince(context.Background(), &dolar.GetSinceRequest{
|
|
Name: name,
|
|
Duration: duration,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
list = []*domain.History{}
|
|
for _, hr := range hrl.Histories {
|
|
hist := &domain.History{
|
|
ID: hr.Id,
|
|
Institution: domain.Institution{
|
|
Name: hr.Name,
|
|
},
|
|
Compra: float64(hr.Compra),
|
|
Venta: float64(hr.Venta),
|
|
Parser: hr.Parser,
|
|
Parsed: hr.Parsed,
|
|
}
|
|
list = append(list, hist)
|
|
}
|
|
return list, nil
|
|
}
|
|
|
|
func (a Adapter) GetInstByType(name string) (list []string, err error) {
|
|
hrl, err := a.dolar.GetInstByType(context.Background(), &dolar.GetInstByTypeRequest{
|
|
Name: name,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
list = []string{}
|
|
|
|
list = append(list, hrl.InstList...)
|
|
return list, nil
|
|
}
|
|
|
|
func (a Adapter) Subscribe(tgbid int64, instName string) (bool, error) {
|
|
ctx := context.Background()
|
|
_, err := a.dolar.TGBSubscribe(ctx, &dolar.TGBSubscribeRequest{TgbId: tgbid, InstName: instName})
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return true, nil
|
|
}
|
|
|
|
func (a Adapter) Unsubscribe(tgbid int64, instName string) (bool, error) {
|
|
ctx := context.Background()
|
|
_, err := a.dolar.TGBUnsubscribe(ctx, &dolar.TGBUnsubscribeRequest{TgbId: tgbid, InstName: instName})
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return true, nil
|
|
|
|
}
|
|
func (a Adapter) GetSubscribedUsers(instName string) ([]int64, error) {
|
|
ctx := context.Background()
|
|
users, err := a.dolar.TGBGetSubscribedUsers(ctx, &dolar.TGBGetSubscribedUsersRequest{InstName: instName})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
list := []int64{}
|
|
list = append(list, users.TgbIds...)
|
|
|
|
return list, nil
|
|
|
|
}
|
|
func (a Adapter) GetSubscribedInsts(tgbid int64) ([]string, error) {
|
|
ctx := context.Background()
|
|
insts, err := a.dolar.TGBGetSubscribedInsts(ctx, &dolar.TGBGetSubscribedInstRequest{TgbId: tgbid})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
list := []string{}
|
|
|
|
list = append(list, insts.InstName...)
|
|
return list, nil
|
|
}
|