Changeset 0.28.2.2 (#185)

This commit is contained in:
2026-03-13 16:09:16 +00:00
parent 7803ba8adf
commit 8c4cb9bbeb
9 changed files with 1199 additions and 91 deletions

View File

@@ -6,6 +6,7 @@ import (
"log"
"net/http"
"strings"
"time"
"github.com/gin-gonic/gin"
"golang.org/x/crypto/bcrypt"
@@ -34,7 +35,8 @@ type profileResponse struct {
Role string `json:"role"`
Avatar *string `json:"avatar,omitempty"`
Settings map[string]interface{} `json:"settings"`
CreatedAt string `json:"created_at"`
CreatedAt time.Time `json:"created_at"`
LastLoginAt *time.Time `json:"last_login_at,omitempty"`
}
// SettingsHandler manages user profile and preferences.
@@ -55,11 +57,14 @@ func (h *SettingsHandler) GetProfile(c *gin.Context) {
var p profileResponse
var settingsRaw string
err := database.DB.QueryRow(database.Q(`
SELECT id, username, email, display_name, role, avatar_url, settings::text, created_at
SELECT id, username, email, display_name, role, avatar_url,
COALESCE(NULLIF(settings::text, 'null'), '{}'),
created_at, last_login_at
FROM users WHERE id = $1
`), userID).Scan(
&p.ID, &p.Username, &p.Email, &p.DisplayName, &p.Role,
&p.Avatar, &settingsRaw, &p.CreatedAt,
&p.Avatar, &settingsRaw,
database.ST(&p.CreatedAt), database.SNT(&p.LastLoginAt),
)
if err == sql.ErrNoRows {
c.JSON(http.StatusNotFound, gin.H{"error": "user not found"})
@@ -185,7 +190,7 @@ func (h *SettingsHandler) GetSettings(c *gin.Context) {
settings := make(map[string]interface{})
_ = json.Unmarshal([]byte(settingsRaw), &settings)
c.JSON(http.StatusOK, settings)
c.JSON(http.StatusOK, gin.H{"settings": settings})
}
// ── Update User Settings (JSONB merge) ──────