summaryrefslogtreecommitdiff
path: root/src/stores
diff options
context:
space:
mode:
authorDaniel Andreas Wang <danielaw@tilde.club>2026-03-12 19:01:51 +0100
committerDaniel Andreas Wang <danielaw@tilde.club>2026-03-12 19:01:51 +0100
commit2c46000979b2c9906c5066821c43ddf0ae7ff090 (patch)
tree57c685eb8913fdebf2ba9f4de441f0263e33be27 /src/stores
parentad9c2429def17cd73d0cc22837ef278abcd4f64a (diff)
set up news fetching
Diffstat (limited to 'src/stores')
-rw-r--r--src/stores/news.ts46
1 files changed, 45 insertions, 1 deletions
diff --git a/src/stores/news.ts b/src/stores/news.ts
index 31866ba..c84b005 100644
--- a/src/stores/news.ts
+++ b/src/stores/news.ts
@@ -1,5 +1,49 @@
-import { ref, computed } from 'vue'
+import { ref } from 'vue'
import { defineStore } from 'pinia'
+export interface Article {
+ source: { id: string | null; name: string }
+ author: string | null
+ title: string
+ description: string | null
+ url: string
+ urlToImage: string | null
+ publishedAt: string
+ content: string | null
+}
+
export const useNewsStore = defineStore('news', () => {
+ const articles = ref<Article[]>([])
+ const loading = ref(false)
+ const error = ref<string | null>(null)
+
+ async function fetchTopHeadlines(params: Record<string, string> = {}) {
+ loading.value = true
+ error.value = null
+ const query = new URLSearchParams(params)
+ const response = await fetch(`/api/top-headlines?${query}`)
+ const data = await response.json()
+ if (!response.ok) {
+ error.value = data.message ?? 'Failed to fetch top headlines'
+ } else {
+ articles.value = data.articles
+ }
+ loading.value = false
+ }
+
+ async function fetchEverything(params: Record<string, string> = {}) {
+ loading.value = true
+ error.value = null
+ const query = new URLSearchParams(params)
+ const response = await fetch(`/api/everything?${query}`)
+ const data = await response.json()
+ if (!response.ok) {
+ error.value = data.message ?? 'Failed to fetch articles'
+ } else {
+ articles.value = data.articles
+ }
+ loading.value = false
+ }
+
+ return { articles, loading, error, fetchTopHeadlines, fetchEverything }
})