aboutsummaryrefslogtreecommitdiffhomepage
path: root/graphql
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-12-07 04:28:35 +0900
committernsfisis <nsfisis@gmail.com>2025-12-07 04:28:35 +0900
commit985e4540ce0be0345069a60a287a3f923a3ff47b (patch)
treec94059fcead06eea4c48a50f8976b9236a0b8542 /graphql
parent211a00e9b7d1d5f503dd62412b837d68cd9ee7f5 (diff)
downloadfeedaka-985e4540ce0be0345069a60a287a3f923a3ff47b.tar.gz
feedaka-985e4540ce0be0345069a60a287a3f923a3ff47b.tar.zst
feedaka-985e4540ce0be0345069a60a287a3f923a3ff47b.zip
refactor(graphql): change directory structure
Diffstat (limited to 'graphql')
-rw-r--r--graphql/schema.graphql181
1 files changed, 181 insertions, 0 deletions
diff --git a/graphql/schema.graphql b/graphql/schema.graphql
new file mode 100644
index 0000000..e37d729
--- /dev/null
+++ b/graphql/schema.graphql
@@ -0,0 +1,181 @@
+scalar DateTime
+
+"""
+Represents a feed subscription in the system
+"""
+type Feed {
+ """
+ Unique identifier for the feed
+ """
+ id: ID!
+
+ """
+ URL of the RSS/Atom feed
+ """
+ url: String!
+
+ """
+ Title of the feed (extracted from feed metadata)
+ """
+ title: String!
+
+ """
+ Timestamp when the feed was last fetched
+ """
+ fetchedAt: DateTime!
+
+ """
+ Whether the user is currently subscribed to this feed
+ """
+ isSubscribed: Boolean!
+
+ """
+ Articles belonging to this feed
+ """
+ articles: [Article!]!
+}
+
+"""
+Represents an individual article/post from a feed
+"""
+type Article {
+ """
+ Unique identifier for the article
+ """
+ id: ID!
+
+ """
+ ID of the feed this article belongs to
+ """
+ feedId: ID!
+
+ """
+ GUID from the RSS/Atom feed (unique identifier from feed)
+ """
+ guid: String!
+
+ """
+ Title of the article
+ """
+ title: String!
+
+ """
+ URL/link to the original article
+ """
+ url: String!
+
+ """
+ Whether the article has been marked as read
+ """
+ isRead: Boolean!
+
+ """
+ The feed this article belongs to
+ """
+ feed: Feed!
+}
+
+"""
+Represents a user in the system
+"""
+type User {
+ """
+ Unique identifier for the user
+ """
+ id: ID!
+
+ """
+ Username of the user
+ """
+ username: String!
+}
+
+"""
+Authentication payload returned from login mutation
+"""
+type AuthPayload {
+ """
+ The authenticated user
+ """
+ user: User!
+}
+
+"""
+Root query type for reading data
+"""
+type Query {
+ """
+ Get all feeds with their metadata
+ """
+ feeds: [Feed!]!
+
+ """
+ Get all unread articles across all feeds
+ """
+ unreadArticles: [Article!]!
+
+ """
+ Get all read articles across all feeds
+ """
+ readArticles: [Article!]!
+
+ """
+ Get a specific feed by ID
+ """
+ feed(id: ID!): Feed
+
+ """
+ Get a specific article by ID
+ """
+ article(id: ID!): Article
+
+ """
+ Get the currently authenticated user
+ """
+ currentUser: User
+}
+
+"""
+Root mutation type for modifying data
+"""
+type Mutation {
+ """
+ Add a new feed subscription
+ """
+ addFeed(url: String!): Feed!
+
+ """
+ Unsubscribe from a feed (preserves feed and article data)
+ """
+ unsubscribeFeed(id: ID!): Boolean!
+
+ """
+ Mark an article as read
+ """
+ markArticleRead(id: ID!): Article!
+
+ """
+ Mark an article as unread
+ """
+ markArticleUnread(id: ID!): Article!
+
+ """
+ Mark all articles in a feed as read
+ """
+ markFeedRead(id: ID!): Feed!
+
+ """
+ Mark all articles in a feed as unread
+ """
+ markFeedUnread(id: ID!): Feed!
+
+ """
+ Login with username and password. Creates a session cookie.
+ """
+ login(username: String!, password: String!): AuthPayload!
+
+ """
+ Logout the current user and destroy the session
+ """
+ logout: Boolean!
+}