package model import ( "fmt" "strconv" "strings" ) type PoolCategory string type PoolOrder string type PoolIDs []int64 const ( Series PoolCategory = "series" Collection PoolCategory = "collection" ) const ( PoolName PoolOrder = "name" CreatedAt PoolOrder = "created_at" UpdatedAt PoolOrder = "updated_at" PostCount PoolOrder = "post_count" ) type Pool struct { ID int64 `json:"id" csv:"id"` Name string `json:"name" csv:"name"` CreatedAt string `json:"created_at" csv:"created_at"` UpdatedAt string `json:"updated_at" csv:"updated_at"` CreatorID int64 `json:"creator_id" csv:"creator_id"` Description string `json:"description" csv:"description"` IsActive bool `json:"is_active" csv:"is_active"` Category PoolCategory `json:"category" csv:"category"` PostIDS PoolIDs `json:"post_ids" csv:"post_ids"` CreatorName string `json:"creator_name" csv:"-"` PostCount int64 `json:"post_count" csv:"-"` } // UnmarshalCSV parses a CSV-formatted string containing pool IDs and populates the PoolIDs receiver. // // This method is designed to unmarshal a CSV-formatted string, where pool IDs are separated by commas. // It trims the surrounding curly braces and splits the string to extract individual pool IDs. // The parsed IDs are then converted to int64 and assigned to the PoolIDs receiver. // // Parameters: // - csv: The CSV-formatted string containing pool IDs. // // Returns: // - error: An error encountered during the unmarshaling process, if any. func (poolIDs *PoolIDs) UnmarshalCSV(csv string) error { // Trim the surrounding curly braces csv = strings.TrimPrefix(csv, "{") csv = strings.TrimSuffix(csv, "}") // Split the CSV string into individual pool IDs ids := strings.Split(csv, ",") var localPoolIDs PoolIDs // Iterate through each ID, parse it to int64, and append to the localPoolIDs for _, id := range ids { if id != "" { int64ID, err := strconv.ParseInt(id, 10, 64) if err != nil { return fmt.Errorf("failed to parse pool ID '%s': %v", id, err) } localPoolIDs = append(localPoolIDs, int64ID) } } // Assign the parsed IDs to the receiver *poolIDs = localPoolIDs return nil }