362 lines
9.8 KiB
Go
362 lines
9.8 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
// Experiments represents experiments
|
|
type Experiments struct {
|
|
BaseModel
|
|
Experiments []ExperimentDetail `json:"experiments"`
|
|
Total int `json:"total"`
|
|
}
|
|
|
|
// DeJSON deserializes Experiments from JSON
|
|
func (e *Experiments) DeJSON(data []byte, client ClientInterface) (Model, error) {
|
|
var raw map[string]json.RawMessage
|
|
if err := json.Unmarshal(data, &raw); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
experiments := &Experiments{BaseModel: *NewBaseModel(client)}
|
|
|
|
if v, ok := raw["experiments"]; ok {
|
|
var items []ExperimentDetail
|
|
json.Unmarshal(v, &items)
|
|
experiments.Experiments = items
|
|
}
|
|
if v, ok := raw["total"]; ok {
|
|
json.Unmarshal(v, &experiments.Total)
|
|
}
|
|
|
|
return experiments, nil
|
|
}
|
|
|
|
// DeList deserializes a list of Experiments
|
|
func (e *Experiments) DeList(data []byte, client ClientInterface) ([]Model, error) {
|
|
var rawList []json.RawMessage
|
|
if err := json.Unmarshal(data, &rawList); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := make([]Model, 0, len(rawList))
|
|
for _, item := range rawList {
|
|
e := &Experiments{BaseModel: *NewBaseModel(client)}
|
|
if err := json.Unmarshal(item, e); err != nil {
|
|
continue
|
|
}
|
|
result = append(result, e)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// ExperimentDetail represents experiment details
|
|
type ExperimentDetail struct {
|
|
BaseModel
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
Status string `json:"status"`
|
|
Variant string `json:"variant"`
|
|
StartDate string `json:"start_date"`
|
|
EndDate string `json:"end_date"`
|
|
}
|
|
|
|
// DeJSON deserializes ExperimentDetail from JSON
|
|
func (e *ExperimentDetail) DeJSON(data []byte, client ClientInterface) (Model, error) {
|
|
var raw map[string]json.RawMessage
|
|
if err := json.Unmarshal(data, &raw); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
detail := &ExperimentDetail{BaseModel: *NewBaseModel(client)}
|
|
|
|
if v, ok := raw["id"]; ok {
|
|
json.Unmarshal(v, &detail.ID)
|
|
}
|
|
if v, ok := raw["name"]; ok {
|
|
json.Unmarshal(v, &detail.Name)
|
|
}
|
|
if v, ok := raw["description"]; ok {
|
|
json.Unmarshal(v, &detail.Description)
|
|
}
|
|
if v, ok := raw["status"]; ok {
|
|
json.Unmarshal(v, &detail.Status)
|
|
}
|
|
if v, ok := raw["variant"]; ok {
|
|
json.Unmarshal(v, &detail.Variant)
|
|
}
|
|
if v, ok := raw["start_date"]; ok {
|
|
json.Unmarshal(v, &detail.StartDate)
|
|
}
|
|
if v, ok := raw["end_date"]; ok {
|
|
json.Unmarshal(v, &detail.EndDate)
|
|
}
|
|
|
|
return detail, nil
|
|
}
|
|
|
|
// DeList deserializes a list of ExperimentDetails
|
|
func (e *ExperimentDetail) DeList(data []byte, client ClientInterface) ([]Model, error) {
|
|
var rawList []json.RawMessage
|
|
if err := json.Unmarshal(data, &rawList); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := make([]Model, 0, len(rawList))
|
|
for _, item := range rawList {
|
|
detail := &ExperimentDetail{BaseModel: *NewBaseModel(client)}
|
|
if err := json.Unmarshal(item, detail); err != nil {
|
|
continue
|
|
}
|
|
result = append(result, detail)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// Permissions represents user permissions
|
|
type Permissions struct {
|
|
BaseModel
|
|
CanPlay bool `json:"can_play"`
|
|
CanDownload bool `json:"can_download"`
|
|
CanLike bool `json:"can_like"`
|
|
CanCreatePlaylist bool `json:"can_create_playlist"`
|
|
CanSubscribe bool `json:"can_subscribe"`
|
|
CanUsePlus bool `json:"can_use_plus"`
|
|
CanUseRadio bool `json:"can_use_radio"`
|
|
CanUseYnison bool `json:"can_use_ynison"`
|
|
CanUseHighQuality bool `json:"can_use_high_quality"`
|
|
CanUseLossless bool `json:"can_use_lossless"`
|
|
}
|
|
|
|
// DeJSON deserializes Permissions from JSON
|
|
func (p *Permissions) DeJSON(data []byte, client ClientInterface) (Model, error) {
|
|
var raw map[string]json.RawMessage
|
|
if err := json.Unmarshal(data, &raw); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
perms := &Permissions{BaseModel: *NewBaseModel(client)}
|
|
|
|
if v, ok := raw["can_play"]; ok {
|
|
json.Unmarshal(v, &perms.CanPlay)
|
|
}
|
|
if v, ok := raw["can_download"]; ok {
|
|
json.Unmarshal(v, &perms.CanDownload)
|
|
}
|
|
if v, ok := raw["can_like"]; ok {
|
|
json.Unmarshal(v, &perms.CanLike)
|
|
}
|
|
if v, ok := raw["can_create_playlist"]; ok {
|
|
json.Unmarshal(v, &perms.CanCreatePlaylist)
|
|
}
|
|
if v, ok := raw["can_subscribe"]; ok {
|
|
json.Unmarshal(v, &perms.CanSubscribe)
|
|
}
|
|
if v, ok := raw["can_use_plus"]; ok {
|
|
json.Unmarshal(v, &perms.CanUsePlus)
|
|
}
|
|
if v, ok := raw["can_use_radio"]; ok {
|
|
json.Unmarshal(v, &perms.CanUseRadio)
|
|
}
|
|
if v, ok := raw["can_use_ynison"]; ok {
|
|
json.Unmarshal(v, &perms.CanUseYnison)
|
|
}
|
|
if v, ok := raw["can_use_high_quality"]; ok {
|
|
json.Unmarshal(v, &perms.CanUseHighQuality)
|
|
}
|
|
if v, ok := raw["can_use_lossless"]; ok {
|
|
json.Unmarshal(v, &perms.CanUseLossless)
|
|
}
|
|
|
|
return perms, nil
|
|
}
|
|
|
|
// DeList deserializes a list of Permissions
|
|
func (p *Permissions) DeList(data []byte, client ClientInterface) ([]Model, error) {
|
|
var rawList []json.RawMessage
|
|
if err := json.Unmarshal(data, &rawList); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := make([]Model, 0, len(rawList))
|
|
for _, item := range rawList {
|
|
perms := &Permissions{BaseModel: *NewBaseModel(client)}
|
|
if err := json.Unmarshal(item, perms); err != nil {
|
|
continue
|
|
}
|
|
result = append(result, perms)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// PermissionAlerts represents permission alerts
|
|
type PermissionAlerts struct {
|
|
BaseModel
|
|
Alerts []PermissionAlert `json:"alerts"`
|
|
Total int `json:"total"`
|
|
}
|
|
|
|
// DeJSON deserializes PermissionAlerts from JSON
|
|
func (p *PermissionAlerts) DeJSON(data []byte, client ClientInterface) (Model, error) {
|
|
var raw map[string]json.RawMessage
|
|
if err := json.Unmarshal(data, &raw); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
alerts := &PermissionAlerts{BaseModel: *NewBaseModel(client)}
|
|
|
|
if v, ok := raw["alerts"]; ok {
|
|
var items []PermissionAlert
|
|
json.Unmarshal(v, &items)
|
|
alerts.Alerts = items
|
|
}
|
|
if v, ok := raw["total"]; ok {
|
|
json.Unmarshal(v, &alerts.Total)
|
|
}
|
|
|
|
return alerts, nil
|
|
}
|
|
|
|
// DeList deserializes a list of PermissionAlerts
|
|
func (p *PermissionAlerts) DeList(data []byte, client ClientInterface) ([]Model, error) {
|
|
var rawList []json.RawMessage
|
|
if err := json.Unmarshal(data, &rawList); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := make([]Model, 0, len(rawList))
|
|
for _, item := range rawList {
|
|
alerts := &PermissionAlerts{BaseModel: *NewBaseModel(client)}
|
|
if err := json.Unmarshal(item, alerts); err != nil {
|
|
continue
|
|
}
|
|
result = append(result, alerts)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// PermissionAlert represents a permission alert
|
|
type PermissionAlert struct {
|
|
BaseModel
|
|
ID string `json:"id"`
|
|
Type string `json:"type"`
|
|
Title string `json:"title"`
|
|
Description string `json:"description"`
|
|
Action string `json:"action"`
|
|
IsRead bool `json:"is_read"`
|
|
CreatedAt string `json:"created_at"`
|
|
}
|
|
|
|
// DeJSON deserializes PermissionAlert from JSON
|
|
func (p *PermissionAlert) DeJSON(data []byte, client ClientInterface) (Model, error) {
|
|
var raw map[string]json.RawMessage
|
|
if err := json.Unmarshal(data, &raw); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
alert := &PermissionAlert{BaseModel: *NewBaseModel(client)}
|
|
|
|
if v, ok := raw["id"]; ok {
|
|
json.Unmarshal(v, &alert.ID)
|
|
}
|
|
if v, ok := raw["type"]; ok {
|
|
json.Unmarshal(v, &alert.Type)
|
|
}
|
|
if v, ok := raw["title"]; ok {
|
|
json.Unmarshal(v, &alert.Title)
|
|
}
|
|
if v, ok := raw["description"]; ok {
|
|
json.Unmarshal(v, &alert.Description)
|
|
}
|
|
if v, ok := raw["action"]; ok {
|
|
json.Unmarshal(v, &alert.Action)
|
|
}
|
|
if v, ok := raw["is_read"]; ok {
|
|
json.Unmarshal(v, &alert.IsRead)
|
|
}
|
|
if v, ok := raw["created_at"]; ok {
|
|
json.Unmarshal(v, &alert.CreatedAt)
|
|
}
|
|
|
|
return alert, nil
|
|
}
|
|
|
|
// DeList deserializes a list of PermissionAlerts
|
|
func (p *PermissionAlert) DeList(data []byte, client ClientInterface) ([]Model, error) {
|
|
var rawList []json.RawMessage
|
|
if err := json.Unmarshal(data, &rawList); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := make([]Model, 0, len(rawList))
|
|
for _, item := range rawList {
|
|
alert := &PermissionAlert{BaseModel: *NewBaseModel(client)}
|
|
if err := json.Unmarshal(item, alert); err != nil {
|
|
continue
|
|
}
|
|
result = append(result, alert)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// ContentRestrictions represents content restrictions
|
|
type ContentRestrictions struct {
|
|
BaseModel
|
|
HasExplicitContent bool `json:"has_explicit_content"`
|
|
RestrictedRegions []string `json:"restricted_regions"`
|
|
AgeRating int `json:"age_rating"`
|
|
BlockedTracks []string `json:"blocked_tracks"`
|
|
BlockedAlbums []string `json:"blocked_albums"`
|
|
BlockedArtists []string `json:"blocked_artists"`
|
|
}
|
|
|
|
// DeJSON deserializes ContentRestrictions from JSON
|
|
func (c *ContentRestrictions) DeJSON(data []byte, client ClientInterface) (Model, error) {
|
|
var raw map[string]json.RawMessage
|
|
if err := json.Unmarshal(data, &raw); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
restrictions := &ContentRestrictions{BaseModel: *NewBaseModel(client)}
|
|
|
|
if v, ok := raw["has_explicit_content"]; ok {
|
|
json.Unmarshal(v, &restrictions.HasExplicitContent)
|
|
}
|
|
if v, ok := raw["restricted_regions"]; ok {
|
|
json.Unmarshal(v, &restrictions.RestrictedRegions)
|
|
}
|
|
if v, ok := raw["age_rating"]; ok {
|
|
json.Unmarshal(v, &restrictions.AgeRating)
|
|
}
|
|
if v, ok := raw["blocked_tracks"]; ok {
|
|
json.Unmarshal(v, &restrictions.BlockedTracks)
|
|
}
|
|
if v, ok := raw["blocked_albums"]; ok {
|
|
json.Unmarshal(v, &restrictions.BlockedAlbums)
|
|
}
|
|
if v, ok := raw["blocked_artists"]; ok {
|
|
json.Unmarshal(v, &restrictions.BlockedArtists)
|
|
}
|
|
|
|
return restrictions, nil
|
|
}
|
|
|
|
// DeList deserializes a list of ContentRestrictions
|
|
func (c *ContentRestrictions) DeList(data []byte, client ClientInterface) ([]Model, error) {
|
|
var rawList []json.RawMessage
|
|
if err := json.Unmarshal(data, &rawList); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := make([]Model, 0, len(rawList))
|
|
for _, item := range rawList {
|
|
restrictions := &ContentRestrictions{BaseModel: *NewBaseModel(client)}
|
|
if err := json.Unmarshal(item, restrictions); err != nil {
|
|
continue
|
|
}
|
|
result = append(result, restrictions)
|
|
}
|
|
return result, nil
|
|
}
|