add list of blocked users

This commit is contained in:
Umputun
2018-02-05 03:27:31 -06:00
parent 339ee71642
commit 3ff25d1c3c
6 changed files with 58 additions and 5 deletions
+12
View File
@@ -33,6 +33,7 @@ func (a *admin) routes() chi.Router {
router.Get("/export", a.exportCtrl)
router.Post("/import", a.importCtrl)
router.Put("/pin/{id}", a.setPinCtrl)
router.Get("/blocked", a.blockedUsersCtrl)
return router
}
@@ -67,6 +68,17 @@ func (a *admin) setBlockCtrl(w http.ResponseWriter, r *http.Request) {
render.JSON(w, r, JSON{"user_id": userID, "site_id": siteID, "block": blockStatus})
}
// GET /blocked?site=siteID - list blocked users
func (a *admin) blockedUsersCtrl(w http.ResponseWriter, r *http.Request) {
siteID := r.URL.Query().Get("site")
users, err := a.dataService.Blocked(siteID)
if err != nil {
common.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't get blocked users")
return
}
render.JSON(w, r, users)
}
// PUT /pin/{id}?site=siteID&url=post-url&pin=1
// mark/unmark comment as a special
func (a *admin) setPinCtrl(w http.ResponseWriter, r *http.Request) {
+22
View File
@@ -311,6 +311,28 @@ func (b *BoltDB) IsBlocked(siteID string, userID string) (blocked bool) {
return blocked
}
// Blocked get lists of blocked users for given site
func (b *BoltDB) Blocked(siteID string) (userIDs []string, err error) {
userIDs = []string{}
bdb, err := b.db(siteID)
if err != nil {
return nil, err
}
err = bdb.View(func(tx *bolt.Tx) error {
bucket := tx.Bucket([]byte(blocksBucketName))
if bucket == nil {
return nil
}
return bucket.ForEach(func(k []byte, v []byte) error {
userIDs = append(userIDs, string(k))
return nil
})
})
return userIDs, err
}
// List returns list of buckets, which is list of all commented posts
func (b BoltDB) List(siteID string) (list []PostInfo, err error) {
+12
View File
@@ -127,7 +127,19 @@ func TestBoltDB_BlockUser(t *testing.T) {
assert.NoError(t, b.SetBlock("radio-t", "user1", false))
assert.False(t, b.IsBlocked("radio-t", "user1"), "user1 unblocked")
}
func TestBoltDB_BlockList(t *testing.T) {
defer os.Remove(testDb)
b := prep(t)
assert.NoError(t, b.SetBlock("radio-t", "user1", true))
assert.NoError(t, b.SetBlock("radio-t", "user2", true))
assert.NoError(t, b.SetBlock("radio-t", "user3", false))
ids, err := b.Blocked("radio-t")
assert.NoError(t, err)
assert.Equal(t, []string{"user1", "user2"}, ids)
}
func TestBoltDB_List(t *testing.T) {
+1
View File
@@ -30,6 +30,7 @@ type Admin interface {
Delete(locator Locator, commentID string) error // delete comment by id
SetBlock(siteID string, userID string, status bool) error // block or unblock user
IsBlocked(siteID string, userID string) bool // check if user blocked
Blocked(siteID string) (userIDs []string, err error) // get list of blocked users
}
func sortComments(comments []Comment, sortFld string) []Comment {