From f49b42f70f902d4da1e0fa4080e99164b331b716 Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Sun, 29 Apr 2018 16:35:04 -0700 Subject: Use vanilla HTTP handlers (refactoring) --- storage/category.go | 3 ++- storage/entry.go | 14 ++++++++++++++ storage/user_session.go | 12 ++++-------- 3 files changed, 20 insertions(+), 9 deletions(-) (limited to 'storage') diff --git a/storage/category.go b/storage/category.go index 197b78b..bbb4c86 100644 --- a/storage/category.go +++ b/storage/category.go @@ -112,7 +112,8 @@ func (s *Storage) CategoriesWithFeedCount(userID int64) (model.Categories, error query := `SELECT c.id, c.user_id, c.title, (SELECT count(*) FROM feeds WHERE feeds.category_id=c.id) AS count - FROM categories c WHERE user_id=$1` + FROM categories c WHERE user_id=$1 + ORDER BY c.title ASC` rows, err := s.db.Query(query, userID) if err != nil { diff --git a/storage/entry.go b/storage/entry.go index d56d5de..fb1fb59 100644 --- a/storage/entry.go +++ b/storage/entry.go @@ -16,6 +16,20 @@ import ( "github.com/lib/pq" ) +// CountUnreadEntries returns the number of unread entries. +func (s *Storage) CountUnreadEntries(userID int64) int { + builder := s.NewEntryQueryBuilder(userID) + builder.WithStatus(model.EntryStatusUnread) + + n, err := builder.CountEntries() + if err != nil { + logger.Error("unable to count unread entries: %v", err) + return 0 + } + + return n +} + // NewEntryQueryBuilder returns a new EntryQueryBuilder func (s *Storage) NewEntryQueryBuilder(userID int64) *EntryQueryBuilder { return NewEntryQueryBuilder(s, userID) diff --git a/storage/user_session.go b/storage/user_session.go index e9e8ebe..990157d 100644 --- a/storage/user_session.go +++ b/storage/user_session.go @@ -47,24 +47,20 @@ func (s *Storage) UserSessions(userID int64) (model.UserSessions, error) { } // CreateUserSession creates a new sessions. -func (s *Storage) CreateUserSession(username, userAgent, ip string) (sessionID string, err error) { - var userID int64 - +func (s *Storage) CreateUserSession(username, userAgent, ip string) (sessionID string, userID int64, err error) { err = s.db.QueryRow("SELECT id FROM users WHERE username = LOWER($1)", username).Scan(&userID) if err != nil { - return "", fmt.Errorf("unable to fetch UserID: %v", err) + return "", 0, fmt.Errorf("unable to fetch user ID: %v", err) } token := crypto.GenerateRandomString(64) query := "INSERT INTO user_sessions (token, user_id, user_agent, ip) VALUES ($1, $2, $3, $4)" _, err = s.db.Exec(query, token, userID, userAgent, ip) if err != nil { - return "", fmt.Errorf("unable to create user session: %v", err) + return "", 0, fmt.Errorf("unable to create user session: %v", err) } - s.SetLastLogin(userID) - - return token, nil + return token, userID, nil } // UserSessionByToken finds a session by the token. -- cgit v1.2.3