···602602603603 return nil
604604}
605605+func (t *Repo) MarshalCBOR(w io.Writer) error {
606606+ if t == nil {
607607+ _, err := w.Write(cbg.CborNull)
608608+ return err
609609+ }
610610+611611+ cw := cbg.NewCborWriter(w)
612612+ fieldCount := 5
613613+614614+ if t.AddedAt == nil {
615615+ fieldCount--
616616+ }
617617+618618+ if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil {
619619+ return err
620620+ }
621621+622622+ // t.Knot (string) (string)
623623+ if len("knot") > 1000000 {
624624+ return xerrors.Errorf("Value in field \"knot\" was too long")
625625+ }
626626+627627+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("knot"))); err != nil {
628628+ return err
629629+ }
630630+ if _, err := cw.WriteString(string("knot")); err != nil {
631631+ return err
632632+ }
633633+634634+ if len(t.Knot) > 1000000 {
635635+ return xerrors.Errorf("Value in field t.Knot was too long")
636636+ }
637637+638638+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Knot))); err != nil {
639639+ return err
640640+ }
641641+ if _, err := cw.WriteString(string(t.Knot)); err != nil {
642642+ return err
643643+ }
644644+645645+ // t.Name (string) (string)
646646+ if len("name") > 1000000 {
647647+ return xerrors.Errorf("Value in field \"name\" was too long")
648648+ }
649649+650650+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("name"))); err != nil {
651651+ return err
652652+ }
653653+ if _, err := cw.WriteString(string("name")); err != nil {
654654+ return err
655655+ }
656656+657657+ if len(t.Name) > 1000000 {
658658+ return xerrors.Errorf("Value in field t.Name was too long")
659659+ }
660660+661661+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Name))); err != nil {
662662+ return err
663663+ }
664664+ if _, err := cw.WriteString(string(t.Name)); err != nil {
665665+ return err
666666+ }
667667+668668+ // t.LexiconTypeID (string) (string)
669669+ if len("$type") > 1000000 {
670670+ return xerrors.Errorf("Value in field \"$type\" was too long")
671671+ }
672672+673673+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$type"))); err != nil {
674674+ return err
675675+ }
676676+ if _, err := cw.WriteString(string("$type")); err != nil {
677677+ return err
678678+ }
679679+680680+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("sh.tangled.repo"))); err != nil {
681681+ return err
682682+ }
683683+ if _, err := cw.WriteString(string("sh.tangled.repo")); err != nil {
684684+ return err
685685+ }
686686+687687+ // t.Owner (string) (string)
688688+ if len("owner") > 1000000 {
689689+ return xerrors.Errorf("Value in field \"owner\" was too long")
690690+ }
691691+692692+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("owner"))); err != nil {
693693+ return err
694694+ }
695695+ if _, err := cw.WriteString(string("owner")); err != nil {
696696+ return err
697697+ }
698698+699699+ if len(t.Owner) > 1000000 {
700700+ return xerrors.Errorf("Value in field t.Owner was too long")
701701+ }
702702+703703+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Owner))); err != nil {
704704+ return err
705705+ }
706706+ if _, err := cw.WriteString(string(t.Owner)); err != nil {
707707+ return err
708708+ }
709709+710710+ // t.AddedAt (string) (string)
711711+ if t.AddedAt != nil {
712712+713713+ if len("addedAt") > 1000000 {
714714+ return xerrors.Errorf("Value in field \"addedAt\" was too long")
715715+ }
716716+717717+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("addedAt"))); err != nil {
718718+ return err
719719+ }
720720+ if _, err := cw.WriteString(string("addedAt")); err != nil {
721721+ return err
722722+ }
723723+724724+ if t.AddedAt == nil {
725725+ if _, err := cw.Write(cbg.CborNull); err != nil {
726726+ return err
727727+ }
728728+ } else {
729729+ if len(*t.AddedAt) > 1000000 {
730730+ return xerrors.Errorf("Value in field t.AddedAt was too long")
731731+ }
732732+733733+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(*t.AddedAt))); err != nil {
734734+ return err
735735+ }
736736+ if _, err := cw.WriteString(string(*t.AddedAt)); err != nil {
737737+ return err
738738+ }
739739+ }
740740+ }
741741+ return nil
742742+}
743743+744744+func (t *Repo) UnmarshalCBOR(r io.Reader) (err error) {
745745+ *t = Repo{}
746746+747747+ cr := cbg.NewCborReader(r)
748748+749749+ maj, extra, err := cr.ReadHeader()
750750+ if err != nil {
751751+ return err
752752+ }
753753+ defer func() {
754754+ if err == io.EOF {
755755+ err = io.ErrUnexpectedEOF
756756+ }
757757+ }()
758758+759759+ if maj != cbg.MajMap {
760760+ return fmt.Errorf("cbor input should be of type map")
761761+ }
762762+763763+ if extra > cbg.MaxLength {
764764+ return fmt.Errorf("Repo: map struct too large (%d)", extra)
765765+ }
766766+767767+ n := extra
768768+769769+ nameBuf := make([]byte, 7)
770770+ for i := uint64(0); i < n; i++ {
771771+ nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 1000000)
772772+ if err != nil {
773773+ return err
774774+ }
775775+776776+ if !ok {
777777+ // Field doesn't exist on this type, so ignore it
778778+ if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil {
779779+ return err
780780+ }
781781+ continue
782782+ }
783783+784784+ switch string(nameBuf[:nameLen]) {
785785+ // t.Knot (string) (string)
786786+ case "knot":
787787+788788+ {
789789+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
790790+ if err != nil {
791791+ return err
792792+ }
793793+794794+ t.Knot = string(sval)
795795+ }
796796+ // t.Name (string) (string)
797797+ case "name":
798798+799799+ {
800800+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
801801+ if err != nil {
802802+ return err
803803+ }
804804+805805+ t.Name = string(sval)
806806+ }
807807+ // t.LexiconTypeID (string) (string)
808808+ case "$type":
809809+810810+ {
811811+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
812812+ if err != nil {
813813+ return err
814814+ }
815815+816816+ t.LexiconTypeID = string(sval)
817817+ }
818818+ // t.Owner (string) (string)
819819+ case "owner":
820820+821821+ {
822822+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
823823+ if err != nil {
824824+ return err
825825+ }
826826+827827+ t.Owner = string(sval)
828828+ }
829829+ // t.AddedAt (string) (string)
830830+ case "addedAt":
831831+832832+ {
833833+ b, err := cr.ReadByte()
834834+ if err != nil {
835835+ return err
836836+ }
837837+ if b != cbg.CborNull[0] {
838838+ if err := cr.UnreadByte(); err != nil {
839839+ return err
840840+ }
841841+842842+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
843843+ if err != nil {
844844+ return err
845845+ }
846846+847847+ t.AddedAt = (*string)(&sval)
848848+ }
849849+ }
850850+851851+ default:
852852+ // Field doesn't exist on this type, so ignore it
853853+ if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil {
854854+ return err
855855+ }
856856+ }
857857+ }
858858+859859+ return nil
860860+}
+27
api/tangled/tangledrepo.go
···11+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
22+33+package tangled
44+55+// schema: sh.tangled.repo
66+77+import (
88+ "github.com/bluesky-social/indigo/lex/util"
99+)
1010+1111+const (
1212+ RepoNSID = "sh.tangled.repo"
1313+)
1414+1515+func init() {
1616+ util.RegisterType("sh.tangled.repo", &Repo{})
1717+} //
1818+// RECORDTYPE: Repo
1919+type Repo struct {
2020+ LexiconTypeID string `json:"$type,const=sh.tangled.repo" cborgen:"$type,const=sh.tangled.repo"`
2121+ AddedAt *string `json:"addedAt,omitempty" cborgen:"addedAt,omitempty"`
2222+ // knot: knot where the repo was created
2323+ Knot string `json:"knot" cborgen:"knot"`
2424+ // name: name of the repo
2525+ Name string `json:"name" cborgen:"name"`
2626+ Owner string `json:"owner" cborgen:"owner"`
2727+}
+2-1
appview/db/db.go
···4646 did text not null,
4747 name text not null,
4848 knot text not null,
4949+ rkey text not null,
4950 created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
5050- unique(did, name, knot)
5151+ unique(did, name, knot, rkey)
5152 );
5253 create table if not exists collaborators (
5354 id integer primary key autoincrement,
+4-3
appview/db/repos.go
···1010 Name string
1111 Knot string
1212 Created *time.Time
1313+ Rkey string
1314}
14151516func (d *DB) GetAllReposByDid(did string) ([]Repo, error) {
···5253}
53545455func (d *DB) AddRepo(repo *Repo) error {
5555- _, err := d.db.Exec(`insert into repos (did, name, knot) values (?, ?, ?)`, repo.Did, repo.Name, repo.Knot)
5656+ _, err := d.db.Exec(`insert into repos (did, name, knot, rkey) values (?, ?, ?, ?)`, repo.Did, repo.Name, repo.Knot, repo.Rkey)
5657 return err
5758}
58595959-func (d *DB) RemoveRepo(did, name, knot string) error {
6060- _, err := d.db.Exec(`delete from repos where did = ? and name = ? and knot = ?`, did, name, knot)
6060+func (d *DB) RemoveRepo(did, name, rkey string) error {
6161+ _, err := d.db.Exec(`delete from repos where did = ? and name = ? and rkey = ?`, did, name, rkey)
6162 return err
6263}
6364