Untitled

mail@pastecode.io avatar
unknown
plain_text
12 days ago
2.4 kB
4
Indexable
Never

func FirstContactBuyerToSeller(sendBirdHandler http.HandlerFunc, proxyPrefix string, reqBody CreateChannelRequestBody) (channel.ChannelResponse, error) {
	for _, user := range reqBody.Users {
		userURL := fmt.Sprintf("%s/v3/users/%s", proxyPrefix, user.UserID)
		req, err := http.NewRequest(http.MethodGet, userURL, nil)
		if err != nil {
			return channel.ChannelResponse{}, err
		}

		w := httptest.NewRecorder()
		sendBirdHandler(w, req)

		resp := w.Result()
		if resp.Body != nil {
			defer resp.Body.Close()
		}

		if resp.StatusCode == http.StatusBadRequest {
			userCreateURL := fmt.Sprintf("%s/v3/users", proxyPrefix)
			userReqBodyBytes, err := json.Marshal(user)
			if err != nil {
				return channel.ChannelResponse{}, err
			}

			req, err = http.NewRequest(http.MethodPost, userCreateURL, bytes.NewBuffer(userReqBodyBytes))
			if err != nil {
				return channel.ChannelResponse{}, err
			}

			w = httptest.NewRecorder()
			sendBirdHandler(w, req)

			resp = w.Result()
			if resp.Body != nil {
				defer resp.Body.Close()
			}

			if resp.StatusCode != http.StatusOK {
				return channel.ChannelResponse{}, fmt.Errorf("failed to create user, status: %s", resp.Status)
			}
		} else if resp.StatusCode != http.StatusOK {
			return channel.ChannelResponse{}, fmt.Errorf("failed to check user, status: %s", resp.Status)
		}
	}

	channelURL := fmt.Sprintf("%s/v3/group_channels", proxyPrefix)
	reqBodyBytes, err := json.Marshal(reqBody)
	if err != nil {
		return channel.ChannelResponse{}, err
	}

	req, err := http.NewRequest(http.MethodPost, channelURL, bytes.NewBuffer(reqBodyBytes))
	if err != nil {
		return channel.ChannelResponse{}, err
	}

	w := httptest.NewRecorder()
	sendBirdHandler(w, req)

	resp := w.Result()
	if resp.Body != nil {
		defer resp.Body.Close()
	}

	if resp.StatusCode != http.StatusOK {
		return channel.ChannelResponse{}, fmt.Errorf("failed to create channel, status: %s", resp.Status)
	}

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return channel.ChannelResponse{}, err
	}

	var channelResponse channel.ChannelResponse
	err = json.Unmarshal(body, &channelResponse)
	if err != nil {
		return channel.ChannelResponse{}, err
	}

	message := reqBody.DefaultMessage

	channelResponse, err = channel.SendMessageToChannel(sendBirdHandler, proxyPrefix, channelResponse, message)
	if err != nil {
		return channel.ChannelResponse{}, err
	}

	return channelResponse, nil
}
Leave a Comment