asd
This commit is contained in:
@@ -3,6 +3,7 @@ package socialrating
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
@@ -26,10 +27,79 @@ type ChangeResponse struct {
|
||||
CurrentRating models.UserSocialRating `json:"currentRating"`
|
||||
}
|
||||
|
||||
type UsersResponse struct {
|
||||
Users []UserWithRating `json:"users"`
|
||||
}
|
||||
|
||||
type UserRatingResponse struct {
|
||||
User UserWithRating `json:"user"`
|
||||
}
|
||||
|
||||
type HistoryResponse struct {
|
||||
Operations []models.SocialRatingOperation `json:"operations"`
|
||||
}
|
||||
|
||||
func NewHandler(service Service) Handler {
|
||||
return Handler{Service: service}
|
||||
}
|
||||
|
||||
func (h Handler) ListUsers(ctx *gin.Context) {
|
||||
limit := parsePositiveLimit(ctx.Query("limit"), 50)
|
||||
|
||||
users, err := h.Service.ListUsersWithRatings(limit)
|
||||
if err != nil {
|
||||
ctx.JSON(http.StatusInternalServerError, gin.H{"error": "failed to load users"})
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(http.StatusOK, UsersResponse{Users: users})
|
||||
}
|
||||
|
||||
func (h Handler) GetUser(ctx *gin.Context) {
|
||||
userID, err := parseUintParam(ctx.Param("userId"))
|
||||
if err != nil {
|
||||
ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
user, err := h.Service.GetUserRating(userID)
|
||||
if err != nil {
|
||||
handleApplyChangeError(ctx, err)
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(http.StatusOK, UserRatingResponse{User: user})
|
||||
}
|
||||
|
||||
func (h Handler) GetUserHistory(ctx *gin.Context) {
|
||||
userID, err := parseUintParam(ctx.Param("userId"))
|
||||
if err != nil {
|
||||
ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
limit := parsePositiveLimit(ctx.Query("limit"), 50)
|
||||
operations, err := h.Service.GetUserHistory(userID, limit)
|
||||
if err != nil {
|
||||
handleApplyChangeError(ctx, err)
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(http.StatusOK, HistoryResponse{Operations: operations})
|
||||
}
|
||||
|
||||
func (h Handler) GetRecentOperations(ctx *gin.Context) {
|
||||
limit := parsePositiveLimit(ctx.Query("limit"), 50)
|
||||
|
||||
operations, err := h.Service.GetRecentOperations(limit)
|
||||
if err != nil {
|
||||
ctx.JSON(http.StatusInternalServerError, gin.H{"error": "failed to load operations"})
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(http.StatusOK, HistoryResponse{Operations: operations})
|
||||
}
|
||||
|
||||
func (h Handler) Increase(ctx *gin.Context) {
|
||||
h.applySignedChange(ctx, "increase", 1)
|
||||
}
|
||||
@@ -97,3 +167,12 @@ func handleApplyChangeError(ctx *gin.Context, err error) {
|
||||
ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
}
|
||||
}
|
||||
|
||||
func parseUintParam(raw string) (uint, error) {
|
||||
value, err := strconv.ParseUint(raw, 10, 64)
|
||||
if err != nil || value == 0 {
|
||||
return 0, errors.New("invalid user id")
|
||||
}
|
||||
|
||||
return uint(value), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user