// SPDX-License-Identifier: MPL-2.0 package cmssqlite_test import ( "context" "database/sql" "fmt" "gamertan.com/web/cms" "gamertan.com/web/cmssqlite" _ "modernc.org/sqlite" ) func Example() { ctx := context.Background() db, err := sql.Open("sqlite", ":memory:?_pragma=foreign_keys(1)") if err != nil { panic(err) } defer db.Close() db.SetMaxOpenConns(1) tx, err := db.BeginTx(ctx, nil) if err != nil { panic(err) } defer tx.Rollback() if err = cmssqlite.CreateSchema(ctx, tx); err != nil { panic(err) } const scope = "my-site" if err = cmssqlite.PutTaxonomy(ctx, tx, scope, cms.Taxonomy{ID: "topics", Slug: "topics", Name: "Topics", Revision: 1, Active: true}, 0); err != nil { panic(err) } if err = cmssqlite.PutTerm(ctx, tx, scope, cms.Term{ID: "go", TaxonomyID: "topics", Slug: "go", Name: "Go", Revision: 1, Active: true}, 0); err != nil { panic(err) } ref := cms.Reference{Kind: "article", ID: "first-post"} // The application authorizes the writer and stores its content/audit in this // same transaction. Only publication advances the public association pointer. if err = cmssqlite.PutRevision(ctx, tx, scope, ref, 1, cms.Associations{Terms: []string{"go"}}); err != nil { panic(err) } if err = cmssqlite.SetPublished(ctx, tx, scope, ref, 1); err != nil { panic(err) } if err = tx.Commit(); err != nil { panic(err) } reader, err := cmssqlite.New(db, scope) if err != nil { panic(err) } page, err := reader.Members(ctx, "go", nil, 20) if err != nil { panic(err) } for _, item := range page.Items { fmt.Println(item.Kind, item.ID, item.Revision) } // Output: article first-post 1 }