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."}
|
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 {
|
if err != nil {
|
||||||
// TODO: handle this
|
// TODO: handle this
|
||||||
return err
|
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}
|
res := &CollectionObj{Collection: *coll}
|
||||||
|
|
||||||
if reqJSON {
|
if reqJSON {
|
||||||
|
|
18
database.go
18
database.go
|
@ -83,8 +83,8 @@ type writestore interface {
|
||||||
GetOwnedPost(id string, ownerID int64) (*PublicPost, error)
|
GetOwnedPost(id string, ownerID int64) (*PublicPost, error)
|
||||||
GetPostProperty(id string, collectionID int64, property string) (interface{}, error)
|
GetPostProperty(id string, collectionID int64, property string) (interface{}, error)
|
||||||
|
|
||||||
CreateCollectionFromToken(string, string, string) (*Collection, error)
|
CreateCollectionFromToken(*config.Config, string, string, string) (*Collection, error)
|
||||||
CreateCollection(string, string, int64) (*Collection, error)
|
CreateCollection(*config.Config, string, string, int64) (*Collection, error)
|
||||||
GetCollectionBy(condition string, value interface{}) (*Collection, error)
|
GetCollectionBy(condition string, value interface{}) (*Collection, error)
|
||||||
GetCollection(alias string) (*Collection, error)
|
GetCollection(alias string) (*Collection, error)
|
||||||
GetCollectionForPad(alias string) (*Collection, error)
|
GetCollectionForPad(alias string) (*Collection, error)
|
||||||
|
@ -103,7 +103,7 @@ type writestore interface {
|
||||||
CanCollect(cpr *ClaimPostRequest, userID int64) bool
|
CanCollect(cpr *ClaimPostRequest, userID int64) bool
|
||||||
AttemptClaim(p *ClaimPostRequest, query string, params []interface{}, slugIdx int) (sql.Result, error)
|
AttemptClaim(p *ClaimPostRequest, query string, params []interface{}, slugIdx int) (sql.Result, error)
|
||||||
DispersePosts(userID int64, postIDs []string) (*[]ClaimPostResult, 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)
|
GetPostsCount(c *CollectionObj, includeFuture bool)
|
||||||
GetPosts(c *Collection, page int, includeFuture, forceRecentFirst, includePinned bool) (*[]PublicPost, error)
|
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
|
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)
|
userID := db.GetUserID(accessToken)
|
||||||
if userID == -1 {
|
if userID == -1 {
|
||||||
return nil, ErrBadAccessToken
|
return nil, ErrBadAccessToken
|
||||||
}
|
}
|
||||||
|
|
||||||
return db.CreateCollection(alias, title, userID)
|
return db.CreateCollection(cfg, alias, title, userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *datastore) GetUserCollectionCount(userID int64) (uint64, error) {
|
func (db *datastore) GetUserCollectionCount(userID int64) (uint64, error) {
|
||||||
|
@ -262,13 +262,13 @@ func (db *datastore) GetUserCollectionCount(userID int64) (uint64, error) {
|
||||||
return collCount, nil
|
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) {
|
if db.PostIDExists(alias) {
|
||||||
return nil, impart.HTTPError{http.StatusConflict, "Invalid collection name."}
|
return nil, impart.HTTPError{http.StatusConflict, "Invalid collection name."}
|
||||||
}
|
}
|
||||||
|
|
||||||
// All good, so create new collection
|
// 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 err != nil {
|
||||||
if db.isDuplicateKeyErr(err) {
|
if db.isDuplicateKeyErr(err) {
|
||||||
return nil, impart.HTTPError{http.StatusConflict, "Collection already exists."}
|
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
|
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{}
|
postClaimReqs := map[string]bool{}
|
||||||
res := []ClaimPostResult{}
|
res := []ClaimPostResult{}
|
||||||
postCollAlias := collAlias
|
postCollAlias := collAlias
|
||||||
|
@ -1382,7 +1382,7 @@ func (db *datastore) ClaimPosts(userID int64, collAlias string, posts *[]ClaimPo
|
||||||
// This is a new collection
|
// This is a new collection
|
||||||
// TODO: consider removing this. This seriously complicates this
|
// TODO: consider removing this. This seriously complicates this
|
||||||
// method and adds another (unnecessary?) logic path.
|
// 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 != nil {
|
||||||
if err, ok := err.(impart.HTTPError); ok {
|
if err, ok := err.(impart.HTTPError); ok {
|
||||||
r.Code = err.Status
|
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"]
|
collAlias := vars["alias"]
|
||||||
|
|
||||||
// Update all given posts
|
// 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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue