feat: initial commit

This commit is contained in:
2025-03-31 16:17:35 +01:00
commit 6719f8a61a
91 changed files with 7119 additions and 0 deletions
+70
View File
@@ -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
}