mobilizon/schema.graphql

664 lines
17 KiB
GraphQL
Raw Normal View History

2019-05-31 17:58:03 +02:00
# This file was generated based on ".graphqlconfig.yaml". Do not edit manually.
2019-04-26 15:22:16 +02:00
schema {
2019-05-31 17:58:03 +02:00
query: RootQueryType
mutation: RootMutationType
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"An ActivityPub actor"
2019-04-26 15:22:16 +02:00
interface Actor {
2019-05-31 17:58:03 +02:00
"The actor's avatar picture"
avatar: Picture
"The actor's banner picture"
banner: Picture
"The actor's domain if (null if it's this instance)"
domain: String
"List of followers"
followers: [Follower]
"Number of followers for this actor"
followersCount: Int
"List of followings"
following: [Follower]
"Number of actors following this actor"
followingCount: Int
"Internal ID for this actor"
id: Int
"The actors RSA Keys"
keys: String
"If the actor is from this instance"
local: Boolean
"Whether the actors manually approves followers"
manuallyApprovesFollowers: Boolean
"The actor's displayed name"
name: String
"A list of the events this actor has organized"
organizedEvents: [Event]
"The actor's preferred username"
preferredUsername: String
"The actor's summary"
summary: String
"If the actor is suspended"
suspended: Boolean
"The type of Actor (Person, Group,…)"
type: ActorType
"The ActivityPub actor's URL"
url: String
2019-04-26 15:22:16 +02:00
}
type Address {
2019-05-31 17:58:03 +02:00
country: String
description: String
"The floor this event is at"
floor: String
"The geocoordinates for the point where this address is"
geom: Point
"The address's locality"
locality: String
postalCode: String
region: String
"The address's street name (with number)"
street: String
}
"A comment"
2019-04-26 15:22:16 +02:00
type Comment {
2019-05-31 17:58:03 +02:00
"Internal ID for this comment"
id: ID
local: Boolean
primaryLanguage: String
replies: [Comment]
text: String
threadLanguages: [String]!
url: String
uuid: UUID
visibility: CommentVisibility
}
"A config object"
2019-04-26 15:22:16 +02:00
type Config {
2019-05-31 17:58:03 +02:00
description: String
name: String
registrationsOpen: Boolean
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"Represents a deleted feed_token"
2019-04-26 15:22:16 +02:00
type DeletedFeedToken {
2019-05-31 17:58:03 +02:00
actor: DeletedObject
user: DeletedObject
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"Represents a deleted member"
2019-04-26 15:22:16 +02:00
type DeletedMember {
2019-05-31 17:58:03 +02:00
actor: DeletedObject
parent: DeletedObject
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"A struct containing the id of the deleted object"
2019-04-26 15:22:16 +02:00
type DeletedObject {
2019-05-31 17:58:03 +02:00
id: Int
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"Represents a deleted participant"
2019-04-26 15:22:16 +02:00
type DeletedParticipant {
2019-05-31 17:58:03 +02:00
actor: DeletedObject
event: DeletedObject
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"An event"
2019-04-26 15:22:16 +02:00
type Event {
2019-05-31 17:58:03 +02:00
"Who the event is attributed to (often a group)"
attributedTo: Actor
"Datetime for when the event begins"
beginsOn: DateTime
"The event's category"
category: String
"When the event was created"
createdAt: DateTime
"The event's description"
description: String
"Datetime for when the event ends"
endsOn: DateTime
"Internal ID for this event"
id: Int
"Whether the event is local or not"
local: Boolean
"Online address of the event"
onlineAddress: OnlineAddress
"The event's organizer (as a person)"
organizerActor: Actor
"The event's participants"
participants: [Participant]
"Phone address for the event"
phoneAddress: PhoneAddress
"The type of the event's address"
physicalAddress: Address
"The event's picture"
picture: Picture
"When the event was published"
publishAt: DateTime
"Events related to this one"
relatedEvents: [Event]
"The event's description's slug"
slug: String
"Status of the event"
status: EventStatus
"The event's tags"
tags: [Tag]
"The event's title"
title: String
"When the event was last updated"
updatedAt: DateTime
"The ActivityPub Event URL"
url: String
"The Event UUID"
uuid: UUID
"The event's visibility"
visibility: EventVisibility
}
"Search events result"
2019-04-26 15:22:16 +02:00
type Events {
2019-05-31 17:58:03 +02:00
"Event elements"
elements: [Event]!
"Total elements"
total: Int!
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"Represents a participant to an event"
2019-04-26 15:22:16 +02:00
type FeedToken {
2019-05-31 17:58:03 +02:00
"The event which the actor participates in"
actor: Actor
"The role of this actor at this event"
token: String
"The actor that participates to the event"
user: User
2019-04-26 15:22:16 +02:00
}
"""
Represents an actor's follower
"""
type Follower {
2019-05-31 17:58:03 +02:00
"Which profile follows"
actor: Actor
"Whether the follow has been approved by the target actor"
approved: Boolean
"What or who the profile follows"
targetActor: Actor
2019-04-26 15:22:16 +02:00
}
"""
Represents a group of actors
"""
type Group implements Actor {
2019-05-31 17:58:03 +02:00
"The actor's avatar picture"
avatar: Picture
"The actor's banner picture"
banner: Picture
"The actor's domain if (null if it's this instance)"
domain: String
"List of followers"
followers: [Follower]
"Number of followers for this actor"
followersCount: Int
"List of followings"
following: [Follower]
"Number of actors following this actor"
followingCount: Int
"Internal ID for this group"
id: Int
"The actors RSA Keys"
keys: String
"If the actor is from this instance"
local: Boolean
"Whether the actors manually approves followers"
manuallyApprovesFollowers: Boolean
"List of group members"
members: [Member]!
"The actor's displayed name"
name: String
"Whether the group is opened to all or has restricted access"
openness: Openness
"A list of the events this actor has organized"
organizedEvents: [Event]
"The actor's preferred username"
preferredUsername: String
"The actor's summary"
summary: String
"If the actor is suspended"
suspended: Boolean
"The type of Actor (Person, Group,…)"
type: ActorType
"The type of group : Group, Community,…"
types: GroupType
"The ActivityPub actor's URL"
url: String
}
"Search groups result"
2019-04-26 15:22:16 +02:00
type Groups {
2019-05-31 17:58:03 +02:00
"Group elements"
elements: [Group]!
"Total elements"
total: Int!
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"A JWT and the associated user ID"
2019-04-26 15:22:16 +02:00
type Login {
2019-05-31 17:58:03 +02:00
"A JWT Token for this session"
token: String!
"The user associated to this session"
user: User!
2019-04-26 15:22:16 +02:00
}
"""
Represents a member of a group
"""
type Member {
2019-05-31 17:58:03 +02:00
"Which profile is member of"
actor: Person
"Of which the profile is member"
parent: Group
"The role of this membership"
role: Int
2019-04-26 15:22:16 +02:00
}
type OnlineAddress {
2019-05-31 17:58:03 +02:00
info: String
url: String
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"Represents a participant to an event"
2019-04-26 15:22:16 +02:00
type Participant {
2019-05-31 17:58:03 +02:00
"The actor that participates to the event"
actor: Actor
"The event which the actor participates in"
event: Event
"The role of this actor at this event"
role: Int
2019-04-26 15:22:16 +02:00
}
"""
Represents a person identity
"""
type Person implements Actor {
2019-05-31 17:58:03 +02:00
"The actor's avatar picture"
avatar: Picture
"The actor's banner picture"
banner: Picture
"The actor's domain if (null if it's this instance)"
domain: String
"A list of the feed tokens for this person"
feedTokens: [FeedToken]
"List of followers"
followers: [Follower]
"Number of followers for this actor"
followersCount: Int
"List of followings"
following: [Follower]
"Number of actors following this actor"
followingCount: Int
"The list of events this person goes to"
goingToEvents: [Event]
"Internal ID for this person"
id: Int
"The actors RSA Keys"
keys: String
"If the actor is from this instance"
local: Boolean
"Whether the actors manually approves followers"
manuallyApprovesFollowers: Boolean
"The list of groups this person is member of"
memberOf: [Member]
"The actor's displayed name"
name: String
"A list of the events this actor has organized"
organizedEvents: [Event]
"The actor's preferred username"
preferredUsername: String
"The actor's summary"
summary: String
"If the actor is suspended"
suspended: Boolean
"The type of Actor (Person, Group,…)"
type: ActorType
"The ActivityPub actor's URL"
url: String
"The user this actor is associated to"
user: User
}
"Search persons result"
2019-04-26 15:22:16 +02:00
type Persons {
2019-05-31 17:58:03 +02:00
"Person elements"
elements: [Person]!
"Total elements"
total: Int!
2019-04-26 15:22:16 +02:00
}
type PhoneAddress {
2019-05-31 17:58:03 +02:00
info: String
phone: String
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"A picture"
type Picture {
2019-05-31 17:58:03 +02:00
"The picture's alternative text"
alt: String
"The picture's ID"
id: ID
"The picture's name"
name: String
"The picture's full URL"
url: String
}
2019-05-31 17:58:03 +02:00
type RootMutationType {
"Change default actor for user"
changeDefaultActor(preferredUsername: String!): User
"Create a comment"
createComment(actorUsername: String!, text: String!): Comment
"Create an event"
createEvent(
beginsOn: DateTime!,
category: String!,
description: String!,
endsOn: DateTime,
onlineAddress: String,
organizerActorId: ID!,
phoneAddress: String,
#The picture for the event, either as an object or directly the ID of an existing Picture
picture: PictureInput,
public: Boolean,
publishAt: DateTime,
state: Int,
status: Int,
title: String!,
visibility: EventVisibility = PRIVATE
): Event
"Create a Feed Token"
createFeedToken(actorId: Int): FeedToken
"Create a group"
createGroup(
#The actor's username which will be the admin (otherwise user's default one)
adminActorUsername: String,
#The avatar for the group, either as an object or directly the ID of an existing Picture
avatar: PictureInput,
#The banner for the group, either as an object or directly the ID of an existing Picture
banner: PictureInput,
#The summary for the group
description: String = "",
#The displayed name for the group
name: String,
#The name for the group
preferredUsername: String!
): Group
"Create a new person for user"
createPerson(
#The avatar for the profile, either as an object or directly the ID of an existing Picture
avatar: PictureInput,
#The banner for the profile, either as an object or directly the ID of an existing Picture
banner: PictureInput,
#The displayed name for the new profile
name: String = "",
preferredUsername: String!,
#The summary for the new profile
summary: String = ""
): Person
"Create an user"
createUser(email: String!, password: String!): User
"Delete an event"
deleteEvent(actorId: Int!, eventId: Int!): DeletedObject
"Delete a feed token"
deleteFeedToken(token: String!): DeletedFeedToken
"Delete a group"
deleteGroup(actorId: Int!, groupId: Int!): DeletedObject
"Join an event"
joinEvent(actorId: Int!, eventId: Int!): Participant
"Join a group"
joinGroup(actorId: Int!, groupId: Int!): Member
"Leave an event"
leaveEvent(actorId: Int!, eventId: Int!): DeletedParticipant
"Leave an event"
leaveGroup(actorId: Int!, groupId: Int!): DeletedMember
"Login an user"
login(email: String!, password: String!): Login
"Register a first profile on registration"
registerPerson(
#The avatar for the profile, either as an object or directly the ID of an existing Picture
avatar: PictureInput,
#The banner for the profile, either as an object or directly the ID of an existing Picture
banner: PictureInput,
#The email from the user previously created
email: String!,
#The displayed name for the new profile
name: String = "",
preferredUsername: String!,
#The summary for the new profile
summary: String = ""
): Person
"Resend registration confirmation token"
resendConfirmationEmail(email: String!, locale: String = "en"): String
"Reset user password"
resetPassword(locale: String = "en", password: String!, token: String!): Login
"Send a link through email to reset user password"
sendResetPassword(email: String!, locale: String = "en"): String
"Upload a picture"
uploadPicture(actorId: ID!, alt: String, file: Upload!, name: String!): Picture
"Validate an user after registration"
validateUser(token: String!): Login
}
2019-04-26 15:22:16 +02:00
"""
2019-05-31 17:58:03 +02:00
Root Query
2019-04-26 15:22:16 +02:00
"""
2019-05-31 17:58:03 +02:00
type RootQueryType {
"Get the instance config"
config: Config
"Get an event by uuid"
event(uuid: UUID!): Event
"Get all events"
events(limit: Int = 10, page: Int = 1): [Event]
"Get a group by it's preferred username"
group(preferredUsername: String!): Group
"Get all groups"
groups(limit: Int = 10, page: Int = 1): [Group]
"Get the persons for an user"
identities: [Person]
"Get the current actor for the logged-in user"
loggedPerson: Person
"Get the current user"
loggedUser: User
"Get all participants for an event uuid"
participants(limit: Int = 10, page: Int = 1, uuid: UUID!): [Participant]
"Get a person by it's preferred username"
person(preferredUsername: String!): Person
"Get a picture"
picture(id: String!): Picture
"Reverse geocode coordinates"
reverseGeocode(latitude: Float!, longitude: Float!): [Address]
"Search for an address"
searchAddress(query: String!): [Address]
"Search events"
searchEvents(limit: Int = 10, page: Int = 1, search: String!): Events
"Search groups"
searchGroups(limit: Int = 10, page: Int = 1, search: String!): Groups
"Search persons"
searchPersons(limit: Int = 10, page: Int = 1, search: String!): Persons
"Get the list of tags"
tags(limit: Int = 10, page: Int = 1): [Tag]!
"Get an user"
user(id: ID!): User
"List instance users"
users(direction: SortDirection = DESC, limit: Int = 10, page: Int = 1, sort: SortableUserField = ID): Users
}
"A tag"
type Tag {
"The tag's ID"
id: ID
"Related tags to this tag"
related: [Tag]
"The tags's slug"
slug: String
"The tag's title"
title: String
}
2019-05-31 17:58:03 +02:00
"A local user of Mobilizon"
type User {
"The datetime the last activation/confirmation token was sent"
confirmationSentAt: DateTime
"The account activation/confirmation token"
confirmationToken: String
"The datetime when the user was confirmed/activated"
confirmedAt: DateTime
"The user's default actor"
defaultActor: Person
"The user's email"
2019-04-26 15:22:16 +02:00
email: String!
2019-05-31 17:58:03 +02:00
"A list of the feed tokens for this user"
feedTokens: [FeedToken]
"The user's ID"
id: ID!
"The user's list of profiles (identities)"
profiles: [Person]!
"The datetime last reset password email was sent"
resetPasswordSentAt: DateTime
"The token sent when requesting password token"
resetPasswordToken: String
}
"Users list"
type Users {
"User elements"
elements: [User]!
"Total elements"
total: Int!
}
2019-04-26 15:22:16 +02:00
2019-05-31 17:58:03 +02:00
"The list of types an actor can be"
enum ActorType {
#An ActivityPub Application
APPLICATION
#An ActivityPub Group
GROUP
#An ActivityPub Organization
ORGANIZATION
#An ActivityPub Person
PERSON
#An ActivityPub Service
SERVICE
}
"The list of visibility options for a comment"
enum CommentVisibility {
#visible only to people invited
INVITE
#Visible only after a moderator accepted
MODERATED
#Visible only to people members of the group or followers of the person
PRIVATE
#Publically listed and federated. Can be shared.
PUBLIC
#Visible only to people with the link - or invited
UNLISTED
}
"The list of possible options for the event's status"
enum EventStatus {
#The event is cancelled
CANCELLED
#The event is confirmed
CONFIRMED
#The event is tentative
TENTATIVE
}
2019-05-31 17:58:03 +02:00
"The list of visibility options for an event"
enum EventVisibility {
#visible only to people invited
INVITE
#Visible only after a moderator accepted
MODERATED
#Visible only to people members of the group or followers of the person
PRIVATE
#Publically listed and federated. Can be shared.
PUBLIC
#Visible only to people with the link - or invited
UNLISTED
2019-04-26 15:22:16 +02:00
}
"""
2019-05-31 17:58:03 +02:00
The types of Group that exist
2019-04-26 15:22:16 +02:00
"""
2019-05-31 17:58:03 +02:00
enum GroupType {
#A public group of many actors
COMMUNITY
#A private group of persons
GROUP
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"""
Describes how an actor is opened to follows
"""
enum Openness {
#The actor can only be followed by invitation
INVITE_ONLY
#The actor needs to accept the following before it's effective
MODERATED
#The actor is open to followings
OPEN
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"Available sort directions"
2019-04-26 15:22:16 +02:00
enum SortDirection {
2019-05-31 17:58:03 +02:00
ASC
DESC
2019-04-26 15:22:16 +02:00
}
2019-05-31 17:58:03 +02:00
"The list of possible options for the event's status"
enum SortableUserField {
ID
}
2019-04-26 15:22:16 +02:00
2019-05-31 17:58:03 +02:00
"An attached picture or a link to a picture"
input PictureInput {
picture: PictureInputObject
pictureId: String
}
2019-04-26 15:22:16 +02:00
2019-05-31 17:58:03 +02:00
"An attached picture"
input PictureInputObject {
actorId: ID
alt: String
file: Upload!
name: String!
2019-04-26 15:22:16 +02:00
}
"""
2019-05-31 17:58:03 +02:00
The `Point` scalar type represents Point geographic information compliant string data,
represented as floats separated by a semi-colon. The geodetic system is WGS 84
"""
scalar Point
2019-04-26 15:22:16 +02:00
2019-05-31 17:58:03 +02:00
"""
The `DateTime` scalar type represents a date and time in the UTC
timezone. The DateTime appears in a JSON response as an ISO8601 formatted
string, including UTC timezone (\"Z\"). The parsed date and time string will
be converted to UTC and any UTC offset other than 0 will be rejected.
"""
scalar DateTime
2019-04-26 15:22:16 +02:00
"""
The `UUID` scalar type represents UUID4 compliant string data, represented as UTF-8
character sequences. The UUID4 type is most often used to represent unique
human-readable ID strings.
"""
scalar UUID
2019-05-31 17:58:03 +02:00
"""
Represents an uploaded file.
"""
scalar Upload