Set default visibility in datastore.CreateCollection
instead of updating it later. This is more correct behavior, prevents an additional query, and ensures that potential collection-creation when claiming posts also respects the default (which it didn't before). Ref T675
This commit is contained in:
parent
df078c569d
commit
afadf6fdf6
@ -396,25 +396,12 @@ func newCollection(app *App, w http.ResponseWriter, r *http.Request) error {
|
||||
return impart.HTTPError{http.StatusPreconditionFailed, "Collection alias isn't valid."}
|
||||
}
|
||||
|
||||
coll, err := app.db.CreateCollection(c.Alias, c.Title, userID)
|
||||
coll, err := app.db.CreateCollection(app.cfg, c.Alias, c.Title, userID)
|
||||
if err != nil {
|
||||
// TODO: handle this
|
||||
return err
|
||||
}
|
||||
|
||||
// Set visibility to configured default
|
||||
vis := defaultVisibility(app.cfg)
|
||||
if vis != CollUnlisted {
|
||||
visInt := int(vis)
|
||||
err = app.db.UpdateCollection(&SubmittedCollection{
|
||||
OwnerID: uint64(userID),
|
||||
Visibility: &visInt,
|
||||
}, coll.Alias)
|
||||
if err != nil {
|
||||
log.Error("Unable to set default visibility: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
res := &CollectionObj{Collection: *coll}
|
||||
|
||||
if reqJSON {
|
||||
|
18
database.go
18
database.go
@ -83,8 +83,8 @@ type writestore interface {
|
||||
GetOwnedPost(id string, ownerID int64) (*PublicPost, error)
|
||||
GetPostProperty(id string, collectionID int64, property string) (interface{}, error)
|
||||
|
||||
CreateCollectionFromToken(string, string, string) (*Collection, error)
|
||||
CreateCollection(string, string, int64) (*Collection, error)
|
||||
CreateCollectionFromToken(*config.Config, string, string, string) (*Collection, error)
|
||||
CreateCollection(*config.Config, string, string, int64) (*Collection, error)
|
||||
GetCollectionBy(condition string, value interface{}) (*Collection, error)
|
||||
GetCollection(alias string) (*Collection, error)
|
||||
GetCollectionForPad(alias string) (*Collection, error)
|
||||
@ -103,7 +103,7 @@ type writestore interface {
|
||||
CanCollect(cpr *ClaimPostRequest, userID int64) bool
|
||||
AttemptClaim(p *ClaimPostRequest, query string, params []interface{}, slugIdx int) (sql.Result, error)
|
||||
DispersePosts(userID int64, postIDs []string) (*[]ClaimPostResult, error)
|
||||
ClaimPosts(userID int64, collAlias string, posts *[]ClaimPostRequest) (*[]ClaimPostResult, error)
|
||||
ClaimPosts(cfg *config.Config, userID int64, collAlias string, posts *[]ClaimPostRequest) (*[]ClaimPostResult, error)
|
||||
|
||||
GetPostsCount(c *CollectionObj, includeFuture bool)
|
||||
GetPosts(c *Collection, page int, includeFuture, forceRecentFirst, includePinned bool) (*[]PublicPost, error)
|
||||
@ -239,13 +239,13 @@ func (db *datastore) UpdateEncryptedUserEmail(userID int64, encEmail []byte) err
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *datastore) CreateCollectionFromToken(alias, title, accessToken string) (*Collection, error) {
|
||||
func (db *datastore) CreateCollectionFromToken(cfg *config.Config, alias, title, accessToken string) (*Collection, error) {
|
||||
userID := db.GetUserID(accessToken)
|
||||
if userID == -1 {
|
||||
return nil, ErrBadAccessToken
|
||||
}
|
||||
|
||||
return db.CreateCollection(alias, title, userID)
|
||||
return db.CreateCollection(cfg, alias, title, userID)
|
||||
}
|
||||
|
||||
func (db *datastore) GetUserCollectionCount(userID int64) (uint64, error) {
|
||||
@ -262,13 +262,13 @@ func (db *datastore) GetUserCollectionCount(userID int64) (uint64, error) {
|
||||
return collCount, nil
|
||||
}
|
||||
|
||||
func (db *datastore) CreateCollection(alias, title string, userID int64) (*Collection, error) {
|
||||
func (db *datastore) CreateCollection(cfg *config.Config, alias, title string, userID int64) (*Collection, error) {
|
||||
if db.PostIDExists(alias) {
|
||||
return nil, impart.HTTPError{http.StatusConflict, "Invalid collection name."}
|
||||
}
|
||||
|
||||
// All good, so create new collection
|
||||
res, err := db.Exec("INSERT INTO collections (alias, title, description, privacy, owner_id, view_count) VALUES (?, ?, ?, ?, ?, ?)", alias, title, "", CollUnlisted, userID, 0)
|
||||
res, err := db.Exec("INSERT INTO collections (alias, title, description, privacy, owner_id, view_count) VALUES (?, ?, ?, ?, ?, ?)", alias, title, "", defaultVisibility(cfg), userID, 0)
|
||||
if err != nil {
|
||||
if db.isDuplicateKeyErr(err) {
|
||||
return nil, impart.HTTPError{http.StatusConflict, "Collection already exists."}
|
||||
@ -1325,7 +1325,7 @@ func (db *datastore) DispersePosts(userID int64, postIDs []string) (*[]ClaimPost
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
func (db *datastore) ClaimPosts(userID int64, collAlias string, posts *[]ClaimPostRequest) (*[]ClaimPostResult, error) {
|
||||
func (db *datastore) ClaimPosts(cfg *config.Config, userID int64, collAlias string, posts *[]ClaimPostRequest) (*[]ClaimPostResult, error) {
|
||||
postClaimReqs := map[string]bool{}
|
||||
res := []ClaimPostResult{}
|
||||
postCollAlias := collAlias
|
||||
@ -1382,7 +1382,7 @@ func (db *datastore) ClaimPosts(userID int64, collAlias string, posts *[]ClaimPo
|
||||
// This is a new collection
|
||||
// TODO: consider removing this. This seriously complicates this
|
||||
// method and adds another (unnecessary?) logic path.
|
||||
coll, err = db.CreateCollection(postCollAlias, "", userID)
|
||||
coll, err = db.CreateCollection(cfg, postCollAlias, "", userID)
|
||||
if err != nil {
|
||||
if err, ok := err.(impart.HTTPError); ok {
|
||||
r.Code = err.Status
|
||||
|
2
posts.go
2
posts.go
@ -869,7 +869,7 @@ func addPost(app *App, w http.ResponseWriter, r *http.Request) error {
|
||||
collAlias := vars["alias"]
|
||||
|
||||
// Update all given posts
|
||||
res, err := app.db.ClaimPosts(ownerID, collAlias, claims)
|
||||
res, err := app.db.ClaimPosts(app.cfg, ownerID, collAlias, claims)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user