219 lines
5.3 KiB
Go
219 lines
5.3 KiB
Go
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",
|
|
},
|
|
}
|