//we should pass in a pointer to a address map so that we can update the same memory location func GetAddressesByIds(addressMap map[int64]models.Address) (map[int32]models.Address, error) { db, err := GetPostgreSqlDB() retMap := make(map[int32]models.Address) if err != nil { return retMap, errors.New("Could not obtain DB connection.") } defer db.Close() //this is bad, need to add comma var addressIds string for k, _ := range addressMap { t := strconv.FormatInt(k, 10) addressIds = helpers.StringConcat(t) } rows, err := db.Query(`SELECT a.address_id, a.address_guid, a.line_1, a.line_2, a.line_3, a.city, a.postal_code, a.country_code_iso_3166 as country_code, a.state, a.latitude, a.longitude, s.description as address_status, a.created_by_user, a.created_timestamp, a.modified_by_user, a.modified_timestamp FROM contact.address a JOIN contact.address_status s on s.address_status_id = a.address_status_id where address_id in ($1)`, addressIds) if err == sql.ErrNoRows { return retMap, errors.New("No addresses found.") } if err != nil { log.Printf("%v", err.Error()) return retMap, errors.New("Could not query database.") } defer rows.Close() for rows.Next() { a := models.Address{} rows.Scan( &a.Address_Id, &a.Address_Guid, &a.Line_1, &a.Line_2, &a.Line_3, &a.City, &a.Postal_Code, &a.Country_Code, &a.State, &a.Latitude, &a.Longitude, &a.Address_Status, &a.Created_By_User, &a.Created_Timestamp, &a.Modified_By_User, &a.Modified_Timestamp) retMap[a.Address_Id] = a } return retMap, nil }
//GetUrl redirects to the longUrl given the passed in shortUrl. Also inserts a visit record. func GetDealByGuid(responseWriter http.ResponseWriter, request *http.Request, next http.HandlerFunc) { deal, err := repos.GetDealByGuid(mux.Vars(request)["dealGuid"]) if err != nil { http.Error(responseWriter, "Record not found", http.StatusNotFound) return } //geturl geturl := helpers.StringConcat("http://192.168.99.100:4900/account/", deal.Account_Guid.String) fmt.Print(geturl) //api call to get account by accountguid res, err := http.Get(geturl) //if err != nil { // what to do //} defer res.Body.Close() body, err := ioutil.ReadAll(res.Body) acct := models.AccountResponse{} err = json.Unmarshal(body, &acct) if err != nil { fmt.Println("error:", err) } contacts := []models.ContactResponse{} for _, ac := range acct.AccountContacts { acr := models.AccountContactResponse{ Contact_Guid: ac.Contact_Guid, First_Name: ac.First_Name, Middle_Name: ac.Middle_Name, Last_Name: ac.Last_Name, Email_Address: ac.Email_Address, Mobile_Phone: ac.Mobile_Phone, Other_Phone: ac.Other_Phone, Billing_Address_Id: ac.Billing_Address_Id, Mailing_Address_Id: ac.Mailing_Address_Id, } c := models.ContactResponseFromAccountContactResponse(acr) contacts = append(contacts, c) } addresses := []models.AddressResponse{} //todo how to check if object is present if acct.Billing_Address.Address_Id > 0 { a := acct.Billing_Address a.Address_Type = "Billing_Address" addresses = append(addresses, a) } if acct.Mailing_Address.Address_Id > 0 { a := acct.Mailing_Address a.Address_Type = "Mailing_Address" addresses = append(addresses, a) } if acct.System_Address.Address_Id > 0 { a := acct.System_Address a.Address_Type = "System_Address" addresses = append(addresses, a) } dealresponse := models.DealResponseFromDeal(deal) dealresponse.Contacts = contacts dealresponse.Addresses = addresses dealJson, err := json.Marshal(dealresponse) if err != nil { http.Error(responseWriter, "Could not marshall json", http.StatusInternalServerError) return } http.Error(responseWriter, string(dealJson), http.StatusOK) }