2024-12-18 11:08:21 -04:00

191 lines
4.5 KiB
Go

package cedulados
import (
"context"
"fmt"
"git.maximotejeda.com/maximo/cedulados-bot/internal/application/domain"
ced "git.maximotejeda.com/maximo/cedulados/proto/golang/cedulados"
"google.golang.org/grpc"
)
// Adapter
type Adapter struct {
cedulados ced.QueryCeduladoClient
conn *grpc.ClientConn
}
// NewAdapter
func NewAdapter(conn *grpc.ClientConn) (*Adapter, error){
client := ced.NewQueryCeduladoClient(conn)
if client == nil{
fmt.Println("error creating client, cant be nil" )
}
return &Adapter{cedulados: client, conn: conn}, nil
}
// CeduladoByCedula
func(a Adapter) CeduladoByCedula(ctx context.Context, c *domain.Cedula)(resp *domain.Info, err error){
cReq := &ced.QueryByCedulaRequest{
Cedula: &ced.Cedula{
MunCed: c.MunCed,
SeqCed: c.SeqCed,
VerCed: c.VerCed,
},
}
r, err := a.cedulados.CeduladosByCedula(ctx, cReq)
if err != nil {
return nil, err
}
resp = mapLocalDomain (r.Cedulado)
return
}
// CeduladoGetByNameLastName
func(a Adapter) CeduladoGetByNameLastName(ctx context.Context, params domain.Info, page int64)(info *domain.MultipleResults, err error){
cReq := &ced.QueryByNameLastNameRequest{
Name: params.Nombres,
Apellido_1: params.Apellido1,
Apellido_2: params.Apellido2,
Page: page,
}
r, err := a.cedulados.CeduladosByNameLastName(ctx, cReq)
if err != nil {
return nil, err
}
info = &domain.MultipleResults{
Page: r.Page,
Total: r.Total,
}
for _, val := range r.Cedulados{
info.Data = append(info.Data, mapLocalDomain (val))
}
return
}
// CeduladoByFTS
func(a Adapter) CeduladoByFTS(ctx context.Context, params string, page int64)(info *domain.MultipleResults, err error){
cReq := &ced.QueryByFTSRequest{
Name: params,
Page: page,
}
r, err := a.cedulados.CeduladosByFTS(ctx, cReq)
if err != nil {
return nil, err
}
info = &domain.MultipleResults{
Page: r.Page,
Total: r.Total,
}
for _, val := range r.Cedulados{
info.Data = append(info.Data, mapLocalDomain ( val))
}
return
}
// CeduladoByNameAndLocation
func(a Adapter) CeduladoByNameAndLocation(ctx context.Context, params domain.Info, page int64, municipio string)(info *domain.MultipleResults, err error){
cReq := &ced.QueryByNamesLocationRequest{
Name: params.Nombres,
Apellido_1: params.Apellido1,
Apellido_2: params.Apellido2,
Municipio: municipio,
Page: page,
}
r, err := a.cedulados.CeduladosByNameAndLocation(ctx, cReq)
if err != nil {
return nil, err
}
info = &domain.MultipleResults{
Page: r.Page,
Total: r.Total,
}
for _, val := range r.Cedulados{
info.Data = append(info.Data, mapLocalDomain ( val))
}
return
}
// QueryFotoByCedula
func(a Adapter) QueryFotoByCedula(ctx context.Context, c *domain.Cedula)(info *domain.Foto, err error){
cReq := &ced.QueryFotoByCedulaRequest{
Cedula: &ced.Cedula{
MunCed: c.MunCed,
SeqCed: c.SeqCed,
VerCed: c.VerCed,
},
}
r, err := a.cedulados.QueryFotoByCedula(ctx, cReq)
if err != nil {
return nil, err
}
// here should be a photo
info = &domain.Foto{}
info.Imagen = r.Foto.Foto
info.MunCed = c.MunCed
info.SeqCed = c.SeqCed
info.VerCed = c.VerCed
info.ID = r.Foto.Id
return
}
// QueryFotoByID
func(a Adapter) QueryFotoByID(ctx context.Context, id int64)(info *domain.Foto, err error){
r, err := a.cedulados.QueryFotoById(ctx, &ced.QueryFotoByIdRequest{Id: id})
if err != nil {
return nil, err
}
info = &domain.Foto{}
info.Imagen = r.Foto.Foto
info.ID = r.Foto.Id
info.MunCed = r.Foto.MunCed
info.VerCed = r.Foto.VerCed
info.SeqCed = r.Foto.SeqCed
return
}
// QueryFotoAllCedulas
func(a Adapter) QueryFotoAllCedulas(ctx context.Context, ceds []*domain.Cedula)(fotos []*domain.Foto, err error){
for _, c := range ceds {
foto := &domain.Foto{}
cReq := &ced.QueryFotoByCedulaRequest{
Cedula: &ced.Cedula{
MunCed: c.MunCed,
SeqCed: c.SeqCed,
VerCed: c.VerCed,
},
}
r, err := a.cedulados.QueryFotoByCedula(ctx, cReq)
if err != nil {
fmt.Println("err on ced: ", c)
continue
}
// here should be a photo
foto.Imagen = r.Foto.Foto
foto.MunCed = c.MunCed
foto.SeqCed = c.SeqCed
foto.VerCed = c.VerCed
foto.ID = r.Foto.Id
fotos = append(fotos, foto)
}
return
}
func mapLocalDomain(info *ced.Cedulado)(ifo *domain.Info){
if info == nil {
fmt.Println("nil info ")
return nil
}
ifo = &domain.Info{
Cedula: domain.Cedula{
VerCed: info.Cedula.VerCed,
MunCed: info.Cedula.MunCed,
SeqCed: info.Cedula.SeqCed,
},
ID: info.Id,
Nombres: info.Nombres,
Apellido1: info.Apellido_1,
Apellido2: info.Apellido_2,
Sexo: info.Sexo,
Direccion: info.Direccion,
Telefono: info.Telefono,
}
return
}