Changeset 0.19.0 (#81)
This commit is contained in:
@@ -98,60 +98,7 @@ func writeTagsArg(tags []string) interface{} {
|
||||
return pq.Array(tags)
|
||||
}
|
||||
|
||||
// ── JSON scanner (settings column) ──────────
|
||||
// SQLite returns TEXT for JSON columns; json.RawMessage ([]byte) can't scan
|
||||
// from a string with modernc.org/sqlite. This wrapper handles both dialects.
|
||||
|
||||
type jsonScanner struct{ dest *json.RawMessage }
|
||||
|
||||
func scanJSON(dest *json.RawMessage) *jsonScanner { return &jsonScanner{dest: dest} }
|
||||
|
||||
func (s *jsonScanner) Scan(src interface{}) error {
|
||||
switch v := src.(type) {
|
||||
case []byte:
|
||||
*s.dest = json.RawMessage(v)
|
||||
case string:
|
||||
*s.dest = json.RawMessage(v)
|
||||
case nil:
|
||||
*s.dest = json.RawMessage("{}")
|
||||
default:
|
||||
*s.dest = json.RawMessage("{}")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// tagsScanner wraps a *[]string so rows.Scan can populate it on both dialects.
|
||||
type tagsScanner struct {
|
||||
dest *[]string
|
||||
}
|
||||
|
||||
func scanTags(dest *[]string) *tagsScanner {
|
||||
return &tagsScanner{dest: dest}
|
||||
}
|
||||
|
||||
func (s *tagsScanner) Scan(src interface{}) error {
|
||||
if database.IsSQLite() {
|
||||
var raw string
|
||||
switch v := src.(type) {
|
||||
case string:
|
||||
raw = v
|
||||
case []byte:
|
||||
raw = string(v)
|
||||
case nil:
|
||||
*s.dest = []string{}
|
||||
return nil
|
||||
}
|
||||
var arr []string
|
||||
if err := json.Unmarshal([]byte(raw), &arr); err != nil {
|
||||
*s.dest = []string{}
|
||||
return nil
|
||||
}
|
||||
*s.dest = arr
|
||||
return nil
|
||||
}
|
||||
// Postgres: delegate to pq
|
||||
return pq.Array(s.dest).Scan(src)
|
||||
}
|
||||
// scanJSON, scanTags, SafeJSON → safe_json.go
|
||||
|
||||
// ── Helpers ─────────────────────────────────
|
||||
|
||||
@@ -281,7 +228,7 @@ func (h *ChannelHandler) ListChannels(c *gin.Context) {
|
||||
channels = append(channels, ch)
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, paginatedResponse{
|
||||
SafeJSON(c, http.StatusOK, paginatedResponse{
|
||||
Data: channels,
|
||||
Page: page,
|
||||
PerPage: perPage,
|
||||
@@ -399,7 +346,7 @@ func (h *ChannelHandler) CreateChannel(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(http.StatusCreated, ch)
|
||||
SafeJSON(c, http.StatusCreated, ch)
|
||||
}
|
||||
|
||||
// ── Get Channel ─────────────────────────────
|
||||
@@ -441,7 +388,7 @@ func (h *ChannelHandler) GetChannel(c *gin.Context) {
|
||||
}
|
||||
ch.Tags = tags
|
||||
|
||||
c.JSON(http.StatusOK, ch)
|
||||
SafeJSON(c, http.StatusOK, ch)
|
||||
}
|
||||
|
||||
// ── Update Channel ──────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user