package orm import ( "fmt" "math/rand/v2" "strings" "time" "github.com/go-loremipsum/loremipsum" ) type chapter struct { ChapterID int64 `json:"chapterID" d:"pk:t;"` Title string `json:"chapterTitle" form:"chapterTitle"` Index int `json:"index" form:"index"` Words int `json:"words"` Notes string `json:"notes" form:"notes"` Genre []string `json:"genre" form:"genre" d:"type:text[]"` Bands []band `json:"bands" ref:"band,bands"` Characters []string `json:"characters" form:"characters" d:"type:text[]"` Relationships [][]string `json:"relationships" form:"relationships" d:"type:text[][]"` Adult bool `json:"adult" form:"adult"` Summary string `json:"summary" form:"summary"` Hidden bool `json:"hidden" form:"hidden"` LoggedInOnly bool `json:"loggedInOnly" form:"loggedInOnly"` Posted time.Time `json:"datePosted"` FileName string `json:"fileName" d:"-"` Text string `json:"text" d:"column:content" gridfs:"story_text,/stories/{{.ChapterID}}.txt"` } type band struct { Document `json:",inline" d:"table:bands"` ID int64 `json:"_id" d:"pk;"` Name string `json:"name" form:"name"` Locked bool `json:"locked" form:"locked"` Characters []string `json:"characters" form:"characters" d:"type:text[]"` } type user struct { Document `json:",inline" d:"table:users"` ID int64 `json:"_id" d:"pk;"` Username string `json:"username"` Favs favs `json:"favs" ref:"user"` Roles []role } type role struct { ID int64 `d:"pk"` Name string Users []user } type favs struct { Stories []story Authors []user } type story struct { Document `json:",inline" d:"table:stories"` ID int64 `json:"_id" d:"pk;"` Title string `json:"title" form:"title"` Author user `json:"author" ref:"user"` CoAuthor *user `json:"coAuthor" ref:"user"` Chapters []chapter `json:"chapters"` Recs int `json:"recs"` Favs int `json:"favs"` Views int `json:"views"` Completed bool `json:"completed" form:"completed"` Downloads int `json:"downloads"` } type somethingWithNestedChapters struct { ID int64 `json:"_id"` Document `json:",inline" coll:"nested_stuff"` Chapters []chapter `json:"chapters"` NestedText string `json:"text" gridfs:"nested_text,/nested/{{.ID}}.txt"` } var friend = user{ Username: "DarQuiel7", ID: 83378, } var author = user{ Username: "tablet.exe", ID: 85783, } func genChaps(single bool, aceil int) []chapter { var ret []chapter var ceil int if single { ceil = 1 } else { ceil = aceil } emptyRel := make([][]string, 0) emptyRel = append(emptyRel, make([]string, 0)) relMap := [][][]string{ { {"Sean Harris", "Brian Tatler"}, }, { {"Sean Harris", "Brian Tatler"}, {"Duncan Scott", "Colin Kimberley"}, }, { {"Duncan Scott", "Colin Kimberley"}, }, emptyRel, { {"Sean Harris", "Colin Kimberley", "Brian Tatler"}, }, } l := loremipsum.New() for i := 0; i < ceil; i++ { spf := fmt.Sprintf("%d.md", i+1) c := chapter{ ChapterID: int64(i + 1), Title: fmt.Sprintf("-%d-", i+1), Index: i + 1, Words: 50, Notes: "notenotenote !!!", Genre: []string{"Slash"}, Bands: []band{diamondHead}, Characters: []string{"Sean Harris", "Brian Tatler", "Duncan Scott", "Colin Kimberley"}, Relationships: relMap[i], Adult: true, Summary: l.Paragraph(), Hidden: false, LoggedInOnly: true, FileName: spf, Text: strings.Join(l.ParagraphList(10), "\n\n"), Posted: time.Now().Add(time.Hour * time.Duration(int64(24*7*i))), } { randMin := max(i+1, 1) randMax := min(i+1, randMin+1) mod1 := max(rand.IntN(randMin), 1) mod2 := max(rand.IntN(randMax+1), 1) if (mod1%mod2 == 0 || (mod1%mod2) == 2) && i > 0 { c.Bands = append(c.Bands, bodom) } } ret = append(ret, c) } return ret } func doSomethingWithNested() somethingWithNestedChapters { l := loremipsum.New() swnc := somethingWithNestedChapters{ Chapters: genChaps(false, 7), NestedText: strings.Join(l.ParagraphList(15), "\n\n"), } return swnc } func iti_single() *story { return &story{ Title: "title", Completed: true, Author: author, Chapters: genChaps(true, 0), } } func iti_multi() *story { return &story{ Title: "Brian Tatler Fucked and Abused Sean Harris", Completed: false, Author: author, Chapters: genChaps(false, 5), } } func iti_blank() *story { t := iti_single() t.Chapters = make([]chapter, 0) return t } var metallica = band{ ID: 1, Name: "Metallica", Characters: []string{ "James Hetfield", "Lars Ulrich", "Kirk Hammett", "Cliff Burton", }, Locked: false, } var diamondHead = band{ ID: 503, Name: "Diamond Head", Locked: false, Characters: []string{ "Brian Tatler", "Sean Harris", "Duncan Scott", "Colin Kimberley", }, } var bodom = band{ ID: 74, Name: "Children of Bodom", Locked: false, Characters: []string{ "Janne Wirman", "Alexi Laiho", "Jaska Raatikainen", "Henkka T. Blacksmith", "Roope Latvala", "Daniel Freyberg", "Alexander Kuoppala", }, }