feat: Introduce Nullable type for optional fields and update user DTOs accordingly

This commit is contained in:
2025-03-12 08:56:44 +00:00
parent da115dc3f6
commit 233f3cdb5c
9 changed files with 145 additions and 26 deletions
+48
View File
@@ -0,0 +1,48 @@
package types
import (
"encoding/json"
"fmt"
)
// Nullable[T] - Generischer Typ für optionale Werte (nullable fields)
type Nullable[T any] struct {
Value *T // Der tatsächliche Wert (kann nil sein)
Valid bool // Gibt an, ob der Wert gesetzt wurde
}
// NewNullable erstellt eine gültige Nullable-Instanz
func NewNullable[T any](value T) Nullable[T] {
return Nullable[T]{Value: &value, Valid: true}
}
// Null erstellt eine leere Nullable-Instanz (ungesetzt)
func Null[T any]() Nullable[T] {
return Nullable[T]{Valid: false}
}
// MarshalJSON - Serialisiert `Nullable[T]` korrekt ins JSON-Format
func (n Nullable[T]) MarshalJSON() ([]byte, error) {
if !n.Valid {
return []byte("null"), nil // Wenn nicht valid, dann NULL
}
return json.Marshal(n.Value) // Serialisiert den tatsächlichen Wert
}
// UnmarshalJSON - Deserialisiert JSON in `Nullable[T]`
func (n *Nullable[T]) UnmarshalJSON(data []byte) error {
if string(data) == "null" {
n.Valid = true // Wert wurde gesetzt, aber auf NULL
n.Value = nil // Explizit NULL setzen
return nil
}
var v T
if err := json.Unmarshal(data, &v); err != nil {
return fmt.Errorf("invalid JSON for Nullable: %w", err)
}
n.Value = &v
n.Valid = true
return nil
}