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 }