hiling_go/db/sqlc/news_events.go

88 lines
1.8 KiB
Go
Raw Normal View History

2023-10-11 16:31:52 +07:00
package db
import (
"context"
"fmt"
"time"
)
type GetNewsEventsListParams struct {
Limit int32
Offset int32
IsWithApproved string
}
type NewsEventRow struct {
ID int32 `json:"id"`
Title string `json:"title"`
Url string `json:"url"`
Source string `json:"source"`
Thumbnail string `json:"thumbnail"`
Description string `json:"description"`
IsDeleted bool `json:"is_deleted"`
SubmittedBy string `json:"submitted_by"`
ApprovedBy int32 `json:"approved_by"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
func (q *Queries) GetNewsEventsList(ctx context.Context, arg GetNewsEventsListParams) ([]NewsEventRow, error) {
getNewsEventsListQ := fmt.Sprintf(`
SELECT
n.id,
n.title,
n.url,
n.source,
COALESCE(n.thumbnail, '') as thumbnail,
COALESCE(n.description, '') as description,
n.is_deleted,
u.username as submitted_by,
COALESCE(n.approved_by, 0) as approved_by,
n.created_at,
n.updated_at
FROM news_events n
JOIN users u ON n.submitted_by = u.id
%s
ORDER BY n.created_at DESC
LIMIT $1
OFFSET $2
`, arg.IsWithApproved)
rows, err := q.db.QueryContext(ctx, getNewsEventsListQ, arg.Limit, arg.Offset)
if err != nil {
return nil, err
}
defer rows.Close()
items := []NewsEventRow{}
for rows.Next() {
var i NewsEventRow
if err := rows.Scan(
&i.ID,
&i.Title,
&i.Url,
&i.Source,
&i.Thumbnail,
&i.Description,
&i.IsDeleted,
&i.SubmittedBy,
&i.ApprovedBy,
&i.CreatedAt,
&i.UpdatedAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}