feat: initial commit
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
)
|
||||
|
||||
type Comment struct {
|
||||
ID int64 `json:"id"`
|
||||
PostID int64 `json:"post_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
Content string `json:"content"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
UpdatedAt string `json:"updated_at"`
|
||||
User User `json:"user"`
|
||||
}
|
||||
|
||||
type CommentStore struct {
|
||||
db *sql.DB
|
||||
}
|
||||
|
||||
func (s *CommentStore) Create(ctx context.Context, c *Comment) error {
|
||||
query := `INSERT INTO comments (post_id, user_id, content) VALUES ($1, $2, $3) RETURNING id, created_at, updated_at;`
|
||||
ctx, cancel := context.WithTimeout(ctx, QueryTimeout)
|
||||
defer cancel()
|
||||
|
||||
err := s.db.QueryRowContext(ctx, query, c.PostID, c.UserID, c.Content).Scan(&c.ID, &c.CreatedAt, &c.UpdatedAt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *CommentStore) GetByPostID(ctx context.Context, postID int64) ([]Comment, error) {
|
||||
query := `SELECT c.id, c.post_id, c.user_id, c.content, c.created_at, users.username, users.id FROM comments c
|
||||
JOIN users on c.user_id = users.id
|
||||
WHERE c.post_id = $1
|
||||
ORDER BY c.created_at DESC;
|
||||
`
|
||||
ctx, cancel := context.WithTimeout(ctx, QueryTimeout)
|
||||
defer cancel()
|
||||
|
||||
rows, err := s.db.QueryContext(ctx, query, postID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
comments := []Comment{}
|
||||
for rows.Next() {
|
||||
var comment Comment
|
||||
comment.User = User{}
|
||||
err := rows.Scan(
|
||||
&comment.ID,
|
||||
&comment.PostID,
|
||||
&comment.UserID,
|
||||
&comment.Content,
|
||||
&comment.CreatedAt,
|
||||
&comment.User.Username,
|
||||
&comment.User.ID,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
comments = append(comments, comment)
|
||||
}
|
||||
|
||||
return comments, nil
|
||||
}
|
||||
Reference in New Issue
Block a user