Fix archiving and unarchiving functionality.
This commit is contained in:
@@ -76,7 +76,8 @@ func (s *Service) ListArchived(userID int64) ([]domain.Message, error) {
|
||||
defer cancel()
|
||||
|
||||
q := `
|
||||
SELECT id, senderId, recipientId, subject, body, is_read, is_archived, created_at
|
||||
SELECT id, senderId, recipientId, subject, body,
|
||||
is_read, is_archived, created_at, archived_at
|
||||
FROM user_messages
|
||||
WHERE recipientId = ? AND is_archived = TRUE
|
||||
ORDER BY created_at DESC`
|
||||
@@ -91,11 +92,32 @@ func (s *Service) ListArchived(userID int64) ([]domain.Message, error) {
|
||||
var out []domain.Message
|
||||
for rows.Next() {
|
||||
var m domain.Message
|
||||
if err := rows.Scan(&m.ID, &m.SenderId, &m.RecipientId, &m.Subject, &m.Body, &m.IsRead, &m.IsArchived, &m.CreatedAt); err != nil {
|
||||
var archived sql.NullTime
|
||||
|
||||
if err := rows.Scan(
|
||||
&m.ID,
|
||||
&m.SenderId,
|
||||
&m.RecipientId,
|
||||
&m.Subject,
|
||||
&m.Body,
|
||||
&m.IsRead,
|
||||
&m.IsArchived,
|
||||
&m.CreatedAt,
|
||||
&archived,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if archived.Valid {
|
||||
t := archived.Time
|
||||
m.ArchivedAt = &t
|
||||
} else {
|
||||
m.ArchivedAt = nil
|
||||
}
|
||||
|
||||
out = append(out, m)
|
||||
}
|
||||
|
||||
return out, rows.Err()
|
||||
}
|
||||
|
||||
@@ -233,3 +255,25 @@ func intToStr(n int) string {
|
||||
}
|
||||
return string(b[i:])
|
||||
}
|
||||
|
||||
func (s *Service) Unarchive(userID, id int64) error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), s.Timeout)
|
||||
defer cancel()
|
||||
|
||||
q := `
|
||||
UPDATE user_messages
|
||||
SET is_archived = 0, archived_at = NULL
|
||||
WHERE id = ? AND recipientId = ?
|
||||
`
|
||||
q = s.bind(q)
|
||||
|
||||
res, err := s.DB.ExecContext(ctx, q, id, userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
n, _ := res.RowsAffected()
|
||||
if n == 0 {
|
||||
return sql.ErrNoRows
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user