This commit is contained in:
2026-02-11 17:46:22 +03:00
commit eacfacb13b
266 changed files with 51337 additions and 0 deletions

120
svc/models/null_uuid.go Normal file
View File

@@ -0,0 +1,120 @@
package models
import (
"database/sql/driver"
"encoding/json"
"strings"
)
// ============================================================
// 🔹 NullUUID — MSSQL UNIQUEIDENTIFIER için nullable tip
// ============================================================
type NullUUID struct {
UUID string `json:"UUID"`
Valid bool `json:"Valid"`
}
// ------------------------------------------------------------
//
// SQL Valuer (INSERT/UPDATE parametresi)
//
// ------------------------------------------------------------
func (n NullUUID) Value() (driver.Value, error) {
if !n.Valid || strings.TrimSpace(n.UUID) == "" {
return nil, nil
}
return n.UUID, nil
}
// ------------------------------------------------------------
//
// SQL Scanner (SELECT sonucu)
//
// ------------------------------------------------------------
func (n *NullUUID) Scan(value interface{}) error {
if value == nil {
n.UUID = ""
n.Valid = false
return nil
}
switch v := value.(type) {
case string:
n.UUID = v
n.Valid = true
case []byte:
n.UUID = string(v)
n.Valid = true
default:
n.UUID = ""
n.Valid = false
}
return nil
}
// ------------------------------------------------------------
//
// JSON Marshal — Go → JSON
// Null ise: null
// Değer varsa: "guid-string"
//
// ------------------------------------------------------------
func (n NullUUID) MarshalJSON() ([]byte, error) {
if !n.Valid || strings.TrimSpace(n.UUID) == "" {
return []byte("null"), nil
}
return json.Marshal(n.UUID)
}
// ------------------------------------------------------------
//
// JSON Unmarshal — JSON → Go
// Kabul ettiği formatlar:
// • null
// • "guid-string"
// • {"UUID":"...","Valid":true} (ileride istersen)
//
// ------------------------------------------------------------
func (n *NullUUID) UnmarshalJSON(data []byte) error {
s := strings.TrimSpace(string(data))
// null veya boş
if s == "null" || s == "" {
n.UUID = ""
n.Valid = false
return nil
}
// Önce string gibi dene: "guid"
var str string
if err := json.Unmarshal(data, &str); err == nil {
str = strings.TrimSpace(str)
if str == "" {
n.UUID = ""
n.Valid = false
} else {
n.UUID = str
n.Valid = true
}
return nil
}
// Objeyse: { "UUID":"...", "Valid":true }
var aux struct {
UUID string `json:"UUID"`
Valid bool `json:"Valid"`
}
if err := json.Unmarshal(data, &aux); err != nil {
return err
}
aux.UUID = strings.TrimSpace(aux.UUID)
if aux.UUID == "" || !aux.Valid {
n.UUID = ""
n.Valid = false
} else {
n.UUID = aux.UUID
n.Valid = true
}
return nil
}