Controllers/user.go

package controllers

import (
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/xxx/balance/models"
	"github.com/xxx/balance/utils"
)

func GetUserBalance(c *gin.Context) {
	authHeader := c.GetHeader('Authorization')
	if authHeader == '' {
		c.JSON(http.StatusBadRequest, gin.H{'message': 'Authorization header is missing'})
		return
	}

	data, err := utils.MakeRequestWithAuthHeader('GET', 'https://api.k.com/v2/p/', authHeader)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{'message': 'Failed to get user data from API'})
		return
	}

	username, err := utils.GetUsernameFromData(data)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{'message': 'Failed to get username from API response'})
		return
	}

	user, err := models.GetUserBalance(username)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{'message': 'Failed to get user balance from database'})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		'user':            user.User,
		'money':           user.Money,
		'record':          user.Record,
		'record_date':     user.RecordDate,
		'bot':             user.Bot,
		'bot_date':        user.BotDate,
		'm_record':        user.MRecord,
		'm_record_date':   user.MRecordDate,
		'm_record_package': user.MRecordPackage,
	})
}

Models/balance.go

package models

import (
	"github.com/xxx/balance/db"
)

type UserBalance struct {
	User            string `json:"user"`
	Money           int    `json:"money"`
	Record          int    `json:"record"`
	RecordDate      string `json:"record_date"`
	Bot             int    `json:"bot"`
	BotDate         string `json:"bot_date"`
	MRecord         int    `json:"m_record"`
	MRecordDate     string `json:"m_record_date"`
	MRecordPackage  int    `json:"m_record_package"`
}

func GetUserBalance(username string) (*UserBalance, error) {
	var user UserBalance

	err := db.Conn.QueryRow("SELECT user, money, record, record_date, bot, bot_date, m_record, m_record_date, m_record_package FROM balance WHERE user = ?", username).
		Scan(&user.User, &user.Money, &user.Record, &user.RecordDate, &user.Bot, &user.BotDate, &user.MRecord, &user.MRecordDate, &user.MRecordPackage)

	if err != nil {
		return nil, err
	}

	return &user, nil
}

Utils/api.go

package utils

import (
	"bytes"
	"encoding/json"
	"io/ioutil"
	"net/http"
)

func MakeRequestWithAuthHeader(method, url, authHeader string) ([]byte, error) {
	req, err := http.NewRequest(method, url, nil)
	if err != nil {
		return nil, err
	}

	req.Header.Set("Authorization", authHeader)

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

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

	return body, nil
}

type UserApiResponse struct {
	Data struct {
		User struct {
			Username string `json:"username"`
		} `json:"user"`
	} `json:"data"`
}

func GetUsernameFromData(data []byte) (string, error) {
	var apiResponse UserApiResponse

	err := json.Unmarshal(data, &apiResponse)
	if err != nil {
		return "", err
	}

	return apiResponse.Data.User.Username, nil
}
Golang Gin 框架 MVC API: 从外部 API 获取用户名并查询用户余额

原文地址: https://www.cveoy.top/t/topic/m6zE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录