Skip to content

Instantly share code, notes, and snippets.

@Gattermeier
Last active October 27, 2023 16:25
Show Gist options
  • Save Gattermeier/e4c3d71f8023eaacd79e126c42735ee3 to your computer and use it in GitHub Desktop.
Save Gattermeier/e4c3d71f8023eaacd79e126c42735ee3 to your computer and use it in GitHub Desktop.
go structs from oak schema
// GO STRUCTS FROM OAK SCHEMA https://scoop.stg.nyt.net/oak/v1/spec/#
// OakAsset schema: https://scoop.stg.nyt.net/oak/v1/spec/#/schemas/OakAsset
type OakAsset struct {
ID string `json:"id"`
URI string `json:"uri"`
EditorLink string `json:"editorLink"`
Documents Documents `json:"documents"`
Metadata OakMetadata `json:"metadata"`
}
// CreateOakAssetBody Schema: https://scoop.stg.nyt.net/oak/v1/spec/#/schemas/CreateOakAssetBody
type CreateOakAssetBody struct {
Documents Documents `json:"documents"`
Metadata OakMetadata `json:"metadata"`
}
type Documents struct {
Body Body `json:"body"`
Scratchpads []Scratchpad `json:"scratchpads,omitempty"`
}
// Body Structs
type Body struct {
Type string `json:"type"`
Content []InnerContent `json:"content"`
}
type InnerContent struct {
Type string `json:"type"`
Content []Content `json:"content"`
Attributes Attributes `json:"attrs,omitempty"` // for instance for related links
}
// Main content structs
type Content struct {
Type string `json:"type"`
Text string `json:"text,omitempty"`
Marks []Marks `json:"marks,omitempty"`
}
type Marks struct {
Type string `json:"type"`
}
type Attributes struct {
DisplayStyle string `json:"display_style,omitempty"`
Related []string `json:"related,omitempty"` // related links: array of source ids
}
// Scratchpad Structs
type Scratchpad struct {
Name string `json:"name"`
Doc Doc `json:"doc"`
}
type Doc struct {
Type string `json:"type"`
Content []DocContent `json:"content"`
}
type DocContent struct {
Type string `json:"type"`
Content []Content `json:"content"`
}
// OakMetadata schema: https://scoop.stg.nyt.net/oak/v1/spec/#/schemas/OakMetadata
// Note: select 4th "object" in dropdown
type OakMetadata struct {
NewsletterMetaDataType
}
type NewsletterProductData struct {
DefaultTemplateID int `json:"default_template_id"`
SubjectPrefix string `json:"subjectPrefix"`
URI string `json:"uri"`
}
type NewsletterProduct struct {
Data NewsletterProductData `json:"data"`
Code string `json:"code"`
AudienceEnabled bool `json:"audienceEnabled"`
IsChangeInProgress bool `json:"isChangeInProgress"`
Label string `json:"label"`
Value string `json:"value"`
}
type NewsletterMetaDataType struct {
PublishAs string `json:"publishAs"` // allowed value: "Newsletter". required.
Template bool `json:"template,omitempty"`
TemplateID int `json:"templateId,omitempty"` // null or number
Slug string `json:"slug,omitempty"`
NewsletterPreviewText string `json:"newsletterPreviewText,omitempty"` // null or string
NewsletterSubject string `json:"newsletterSubject,omitempty"` // null or string
NewsletterProduct NewsletterProduct `json:"newsletterProduct"` // required
SubjectPrefix string `json:"subjectPrefix,omitempty"` // required
AudienceEnabled bool `json:"audienceEnabled,omitempty"`
AudienceType int `json:"audienceType,omitempty"` // null or number
Audience int `json:"audience,omitempty"` // null or number
NewsletterCancel bool `json:"newsletterCancel,omitempty"`
DedupeMemoAudience struct{} `json:"dedupeMemoAudience,omitempty"`
ExcludeNewsletter []string `json:"excludeNewsletter,omitempty"`
NewsletterSendTime string `json:"newsletterSendTime,omitempty"` // null or string
// See mappings for desk:
// https://scoop.stg.nyt.net/resources/app/content/common/bootstrap/application/map/desks
Desk int `json:"desk,omitempty"` // null or number
// ExcludeURI int `json:"excludeURI,omitempty"` // null or number
// // MemoAudience struct {
// // ID int `json:"id,omitempty"` // null or number
// // Name string `json:"name,omitempty"` // null or string
// // Body struct{} `json:"body,omitempty"` // null or object
// // } `json:"memoAudience"` // object
// ABTest struct {
// ID int `json:"id"` // required
// Name string `json:"name"` // required
// CreatedTime int `json:"createdTime"` // required
// DisplayName string `json:"displayName"` // required
// ProductID int `json:"productId"` // required
// Type int `json:"type"` // required
// VariantCopyNumber int `json:"variantCopyNumber"` // required
// Variants []struct {
// VariantID int `json:"variantId"` // required
// VariantName string `json:"variantName"` // required
// Weight int `json:"weight"` // required
// ContentID int `json:"contentId"` // required
// PreviewText string `json:"previewText"`
// Subject string `json:"subject"`
// } `json:"variants"` // required
// } `json:"abTest"` // object
// NewsletterSendTest struct {
// EmailsPerUser struct {
// // ?? => ^[0-9]+$ null or string (pattern property)
// } `json:"emailsPerUser"` // required
// LastStepIDTestSent int `json:"lastStepIdTestSent,omitempty"` // null or number
// } `json:"newsletterSendTest"` // object
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment