Post Mutations
Mutation operations for managing posts in your Loopwise school
The post mutations allow you to create, update, and delete posts within your Loopwise school. These operations enable you to programmatically manage your blog content and article publishing.
Available mutations:
createPost— Creates a new postupdatePost— Updates an existing postdeletePost— Deletes a post (soft delete)
All post mutations return an errors field in the response that will contain any validation or processing errors that occurred during the operation.
Post Access Types
Posts support different access types:
login_required— Users must be logged in to accesspaid— Users must have purchased accesspublic_access— Available to all users
Create a Post
The createPost mutation allows you to create a new post in your Loopwise school with the specified properties.
Input Parameters
| Field | Type | Description |
|---|---|---|
input | AdminPostInput! | Input object containing post creation details |
AdminPostInput Fields
| Field | Type | Required | Description |
|---|---|---|---|
title | String! | Yes | Post title |
subtitle | String | No | Post subtitle |
body | String! | Yes | Post body content |
excerpt | String | No | Post excerpt |
slug | String! | Yes | URL slug for the post. Must contain only lowercase letters, numbers, and hyphens |
accessType | String! | Yes | Access type for the post (login_required, paid, public_access) |
published | Boolean | No | Whether the post is published |
publishedAt | Int | No | Unix timestamp when the post should be published |
categoryId | String | No | ID of category to associate with this post |
tagList | [String!] | No | Tags to associate with this post |
userId | String | No | ID of the user (author) for this post |
Return Type
type AdminPostCreatePayload {
# Array of error messages, if any occurred during the operation
errors: [String!]
# The created post object, null if operation failed
post: AdminPost
}Example
mutation CreatePost {
createPost(input: {
title: "Getting Started with GraphQL"
subtitle: "A comprehensive guide for beginners"
body: "GraphQL is a query language for APIs..."
excerpt: "Learn the basics of GraphQL"
slug: "getting-started-with-graphql"
accessType: "public_access"
published: true
tagList: ["graphql", "tutorial", "api"]
}) {
post {
id
title
subtitle
slug
accessType
published
tags
}
errors
}
}Sample Response
{
"data": {
"createPost": {
"post": {
"id": "post_12345",
"title": "Getting Started with GraphQL",
"subtitle": "A comprehensive guide for beginners",
"slug": "getting-started-with-graphql",
"accessType": "public_access",
"published": true,
"tags": ["graphql", "tutorial", "api"]
},
"errors": []
}
}
}Common Errors
| Error | Description |
|---|---|
Title cannot be empty | The post title is required |
Body cannot be empty | The post body content is required |
Slug already exists | The provided slug is already in use |
Invalid access type | The accessType must be one of: login_required, paid, public_access |
Category not found | The specified category ID does not exist |
User not found | The specified user ID does not exist |
Update a Post
The updatePost mutation allows you to update an existing post with new properties in your Loopwise school.
Input Parameters
| Field | Type | Description |
|---|---|---|
id | String! | ID of the post to update |
input | AdminPostInput! | Input object containing post update details |
AdminPostInput Fields
| Field | Type | Required | Description |
|---|---|---|---|
title | String! | Yes | Post title |
subtitle | String | No | Post subtitle |
body | String! | Yes | Post body content |
excerpt | String | No | Post excerpt |
slug | String! | Yes | URL slug for the post. Must contain only lowercase letters, numbers, and hyphens |
accessType | String! | Yes | Access type for the post (login_required, paid, public_access) |
published | Boolean | No | Whether the post is published |
publishedAt | Int | No | Unix timestamp when the post should be published |
categoryId | String | No | ID of category to associate with this post |
tagList | [String!] | No | Tags to associate with this post |
userId | String | No | ID of the user (author) for this post |
Return Type
type AdminPostUpdatePayload {
# Array of error messages, if any occurred during the operation
errors: [String!]
# The updated post object, null if operation failed
post: AdminPost
}Example
mutation UpdatePost {
updatePost(
id: "post_12345"
input: {
title: "Advanced GraphQL Techniques"
subtitle: "Take your GraphQL skills to the next level"
body: "In this advanced guide, we'll explore..."
excerpt: "Master advanced GraphQL patterns"
slug: "advanced-graphql-techniques"
accessType: "paid"
published: true
tagList: ["graphql", "advanced", "optimization"]
}
) {
post {
id
title
subtitle
slug
accessType
published
publishedAt
tags
updatedAt
}
errors
}
}Sample Response
{
"data": {
"updatePost": {
"post": {
"id": "post_12345",
"title": "Advanced GraphQL Techniques",
"subtitle": "Take your GraphQL skills to the next level",
"slug": "advanced-graphql-techniques",
"accessType": "paid",
"published": true,
"publishedAt": 1687436400,
"tags": ["graphql", "advanced", "optimization"],
"updatedAt": 1687436500
},
"errors": []
}
}
}Common Errors
| Error | Description |
|---|---|
Post not found | The specified post ID does not exist |
Title cannot be empty | The post title is required |
Body cannot be empty | The post body content is required |
Slug already exists | The provided slug is already in use by another post |
Invalid access type | The accessType must be one of: login_required, paid, public_access |
Category not found | The specified category ID does not exist |
User not found | The specified user ID does not exist |
Delete a Post
The deletePost mutation allows you to delete a post from your Loopwise school. This is a soft delete operation, meaning the post data is retained but marked as deleted.
Input Parameters
| Field | Type | Description |
|---|---|---|
id | String! | ID of the post to delete |
Return Type
type AdminPostDeletePayload {
# Array of error messages, if any occurred during the operation
errors: [String!]
# Boolean indicating whether the deletion was successful
success: Boolean
}Example
mutation DeletePost {
deletePost(id: "post_12345") {
success
errors
}
}Sample Response
{
"data": {
"deletePost": {
"success": true,
"errors": []
}
}
}Error Response
If the deletion fails, you might receive a response like this:
{
"data": {
"deletePost": {
"success": false,
"errors": ["Post not found"]
}
}
}Common Errors
| Error | Description |
|---|---|
Post not found | The specified post ID does not exist |
Post already deleted | The post has already been deleted |
Insufficient permissions | You don't have permission to delete this post |
Important Notes
- This is a soft delete operation — the post data is retained in the system but marked as deleted
- Deleted posts will not appear in regular queries
- The post can potentially be restored by system administrators if needed
- All associated data (comments, ratings, etc.) will also be hidden when the post is deleted