aboutsummaryrefslogtreecommitdiffhomepage
path: root/graphql/schema.graphql
diff options
context:
space:
mode:
Diffstat (limited to 'graphql/schema.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!
+}