diff --git a/internal/db/postgres.go b/internal/db/postgres.go index a5c4024de..a66b1364a 100644 --- a/internal/db/postgres.go +++ b/internal/db/postgres.go @@ -103,8 +103,22 @@ func newPostgresService(ctx context.Context, c *config.Config, log *logrus.Entry acc := model.StubAccount() if _, err := conn.Model(acc).Returning("id").Insert(); err != nil { cancel() - return nil, errors.New("db insert error") + return nil, fmt.Errorf("db insert error: %s", err) } + log.Infof("created account with id %s", acc.ID) + + note := &model.Note{ + Visibility: &model.Visibility{ + Local: true, + }, + CreatedAt: time.Now(), + UpdatedAt: time.Now(), + } + if _, err := conn.Model(note).Returning("id").Insert(); err != nil { + cancel() + return nil, fmt.Errorf("db insert error: %s", err) + } + log.Infof("created note with id %s", note.ID) // we can confidently return this useable postgres service now return &postgresService{ @@ -300,6 +314,7 @@ func (ps *postgresService) Stop(ctx context.Context) error { func (ps *postgresService) CreateSchema(ctx context.Context) error { models := []interface{}{ (*model.Account)(nil), + (*model.Note)(nil), } ps.log.Info("creating db schema") diff --git a/internal/model/account.go b/internal/model/account.go index 360d0de28..6d8d04954 100644 --- a/internal/model/account.go +++ b/internal/model/account.go @@ -27,32 +27,30 @@ import ( type Account struct { Avatar Header - ID int `pg:"type:uuid,default:gen_random_uuid(),pk,notnull"` + URI string + URL string + ID string `pg:"type:uuid,default:gen_random_uuid(),pk,notnull"` Username string Domain string Secret string PrivateKey string PublicKey string - RemoteURL *url.URL `pg:"type:text"` - SalmonURL *url.URL `pg:"type:text"` - HubURL *url.URL `pg:"type:text"` + RemoteURL string CreatedAt time.Time `pg:"type:timestamp,notnull"` UpdatedAt time.Time `pg:"type:timestamp,notnull"` Note string DisplayName string - URI *url.URL `pg:"type:text"` - URL *url.URL `pg:"type:text"` SubscriptionExpiresAt time.Time `pg:"type:timestamp"` Locked bool LastWebfingeredAt time.Time `pg:"type:timestamp"` - InboxURL *url.URL `pg:"type:text"` - OutboxURL *url.URL `pg:"type:text"` - SharedInboxURL *url.URL `pg:"type:text"` - FollowersURL *url.URL `pg:"type:text"` + InboxURL string + OutboxURL string + SharedInboxURL string + FollowersURL string Protocol int Memorial bool MovedToAccountID int - FeaturedCollectionURL *url.URL `pg:"type:text"` + FeaturedCollectionURL string Fields map[string]string ActorType string Discoverable bool @@ -61,7 +59,6 @@ type Account struct { SuspendedAt time.Time `pg:"type:timestamp"` TrustLevel int HideCollections bool - DevicesURL *url.URL `pg:"type:text"` SensitizedAt time.Time `pg:"type:timestamp"` SuspensionOrigin int } @@ -85,13 +82,10 @@ type Header struct { } func StubAccount() *Account { - - remoteURL, _ := url.Parse("https://example.org/@someuser") - return &Account{ Username: "some_user", Domain: "example.org", - RemoteURL: remoteURL, + RemoteURL: "https://example.org/@someuser", CreatedAt: time.Now(), UpdatedAt: time.Now(), } diff --git a/internal/model/note.go b/internal/model/note.go new file mode 100644 index 000000000..69242cfa7 --- /dev/null +++ b/internal/model/note.go @@ -0,0 +1,44 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package model + +import "time" + +type Note struct { + ID string `pg:"type:uuid,default:gen_random_uuid(),pk,notnull"` + URI string + URL string + Content string + CreatedAt time.Time `pg:"type:timestamp,notnull"` + UpdatedAt time.Time `pg:"type:timestamp,notnull"` + Local bool + AccountID string + InReplyToID string + BoostOfID string + ContentWarning string + Visibility *Visibility +} + +type Visibility struct { + Direct bool + Followers bool + Local bool + Unlisted bool + Public bool +}