diff options
Diffstat (limited to 'graphql/schema.graphql')
| -rw-r--r-- | graphql/schema.graphql | 181 |
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! +} |
