Files
directus/docs/reference/system/activity.md
Bevis Halsey-Perry 60df20d780 Simplified generic examples and consolidated imports for sdk examples in docs. (#19370)
* Simplified generics and imports for items page snippets

* Simplified generics and imports for files page snippets

* Fixing simplified generic snippets in items page

* Simplified generics and imports for activity page snippets

* Simplified generics and imports for collections page snippets

* Simplified generics and imports for dashboards page snippets

* Simplified generics and imports for extensions page snippets

* Simplified generics and imports for fields page snippets

* Simplified generics and imports for flows page snippets

* Simplified generics and imports for folders page snippets

* Simplified generics and imports for notifications page snippets

* Simplified generics and imports for operations page snippets

* Simplified generics and imports for panels page snippets

* Simplified generics and imports for permissions page snippets

* Simplified generics and imports for presets page snippets

* Simplified generics and imports for relations page snippets

* Simplified generics and imports for relations page snippets

* Simplified generics and imports for revisions page snippets

* Simplified generics and imports for roles page snippets

* Consolidated imports for schema page snippets

* Simplified generics and imports for server page snippets

* Simplified generics and imports for settings page snippets

* Fixed mixed up snippets and simplified generics and imports for shares page snippets

* Simplified generics and imports for translation page snippets

* Fixed mixed up snippets and simplified generics and imports for user page snippets

* Simplified generics and imports fo uutilitie pages snippets

* Simplified generics and imports for webhook pages snippets

* Simplified generics and imports for authentication pages snippets

* Consolidated imports for query pages sdk snippets

* Format files

* Update lockfile

* Fix spelling

* Format snippets

* Aling `result` const

* Small clean-ups

- Align `SEARCH` snippets, move "Learn more..." next to other hint
- ids -> IDs
- Other alignments

---------

Co-authored-by: Bevis Halsey-Perry <hi@be7.is>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
2023-08-08 10:16:23 -04:00

511 lines
8.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: REST and GraphQL API documentation on the Activity collection in Directus.
readTime: 4 min read
pageClass: page-reference
---
# Activity
> All events within Directus are tracked and stored in the activities collection. This gives you full accountability
> over everything that happens. [Learn more about Activity](/user-guide/overview/glossary#activity).
## The Activity Object
`action` **string**\
Action that was performed.
`collection` **string**\
Collection identifier in which the item resides.
`comment` **string**\
User comment. This will store the comments that show up in the right sidebar of the item edit page in the admin app.
`id` **integer**\
Unique identifier for the object.
`ip` **string**\
The IP address of the user at the time the action took place.
`item` **string**\
Unique identifier for the item the action applied to. This is always a string, even for integer primary keys.
`timestamp` **string**\
When the action happened.
`user` **many-to-one**\
The user who performed this action. Many-to-one to [users](/reference/system/users#the-users-object).
`user_agent` **string**\
User agent string of the browser the user used when the action took place.
`revisions` **one-to-many**\
Any changes that were made in this activity. One-to-many to [revisions](/reference/system/revisions#the-revisions-object).
```json
{
"action": "create",
"collection": "articles",
"comment": null,
"id": 5,
"ip": "139.178.128.0",
"item": "1",
"timestamp": "2021-02-02T12:50:26-05:00",
"user": "2d321940-69f5-445f-be6b-c773fa58a820",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15",
"revisions": [4]
}
```
## List Activity Actions
Returns a list of activity actions.
### Request
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
<template #rest>
`GET /activity`
`SEARCH /activity`
If using SEARCH you can provide a [query object](/reference/query) as the body of your request.
[Learn more about SEARCH ->](/reference/introduction#search-http-method)
</template>
<template #graphql>
`POST /graphql/system`
```graphql
type Query {
activity: [directus_activity]
}
```
</template>
<template #sdk>
```js
import { createDirectus, rest, readActivities } from '@directus/sdk';
const client = createDirectus('directus_project_url').with(rest());
const result = await client.request(readActivities(query_object));
```
</template>
</SnippetToggler>
#### Query Parameters
Supports all [global query parameters](/reference/query).
### Returns
An array of up to [limit](/reference/query#limit) [activity objects](#the-activity-object). If no items are available,
data will be an empty array.
### Example
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
<template #rest>
`GET /activity`
`SEARCH /activity`
</template>
<template #graphql>
```graphql
query {
activity {
# ...
}
}
```
</template>
<template #sdk>
```js
import { createDirectus, rest, readActivities } from '@directus/sdk';
const client = createDirectus('https://directus.example.com').with(rest());
const result = await client.request(
readActivities({
fields: ['*'],
})
);
```
</template>
</SnippetToggler>
## Retrieve Activity Action
Returns a single activity action by primary key.
### Request
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
<template #rest>
`GET /activity/:id`
</template>
<template #graphql>
`POST /graphql/system`
```graphql
type Query {
activity_by_id(id: ID!): directus_activity
}
```
</template>
<template #sdk>
```js
import { createDirectus, rest, readActivity } from '@directus/sdk';
const client = createDirectus('directus_project_url').with(rest());
const result = await client.request(readActivity(activity_id, query_object));
```
</template>
</SnippetToggler>
#### Query Parameters
Supports all [global query parameters](/reference/query).
### Response
Returns an [activity object](#the-activity-object) if a valid identifier was provided.
### Example
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
<template #rest>
`GET /activity/15`
</template>
<template #graphql>
`POST /graphql/system`
```graphql
query {
activity_by_id(id: 15) {
# ...
}
}
```
</template>
<template #sdk>
```js
import { createDirectus, rest, readActivity } from '@directus/sdk';
const client = createDirectus('https://directus.example.com').with(rest());
const result = await client.request(
readActivity('53281', {
fields: ['*'],
})
);
```
</template>
</SnippetToggler>
## Create a Comment
Creates a new comment on a given item.
### Request
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
<template #rest>
`POST /activity/comment`
```json
{
"collection": collection_name,
"item": item_id,
"comment": comment_content
}
```
</template>
<template #graphql>
`POST /graphql/system`
```graphql
type Mutation {
create_comment(collection: String!, item: ID!, comment: String!): directus_activity
}
```
</template>
<template #sdk>
```js
import { createDirectus, rest, createComment } from '@directus/sdk';
const client = createDirectus('directus_project_url').with(rest());
const result = await client.request(
createComment({
collection: collection_name,
item: item_id,
comment: comment_content,
})
);
```
</template>
</SnippetToggler>
#### Request Body
`collection` **Required**\
Collection in which the item resides.
`item` **Required**\
Primary Key of the item to comment on.
`comment` **Required**\
The comment content. Supports Markdown.
### Response
Returns the [activity object](#the-activity-object) of the created comment.
### Example
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
<template #rest>
`POST /activity/comment`
```json
{
"collection": "pages",
"item": 3,
"comment": "Hello World"
}
```
</template>
<template #graphql>
`POST /graphql/system`
```graphql
mutation {
create_comment(collection: "pages", item: 3, comment: "Hello World") {
# ...
}
}
```
</template>
<template #sdk>
```js
import { createDirectus, rest, createComment } from '@directus/sdk';
const client = createDirectus('https://directus.example.com').with(rest());
const result = await client.request(
createComment({
collection: 'articles',
item: '18',
comment: 'This is the wrong article to publish!',
})
);
```
</template>
</SnippetToggler>
## Update a Comment
Updates an existing comment by activity action primary key.
### Response
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
<template #rest>
`PATCH /activity/comment/:id`
```json
{
"comment": comment_content
}
```
</template>
<template #graphql>
`POST /graphql/system`
```graphql
type Mutation {
delete_comment(id: ID): delete_one
}
```
</template>
<template #sdk>
```js
import { createDirectus, rest, updateComment } from '@directus/sdk';
const client = createDirectus('directus_project_url').with(rest());
const result = await client.request(
updateComment(comment_id, {
comment: comment_content,
})
);
```
</template>
</SnippetToggler>
#### Request Body
`comment` **Required**\
The updated comment content. Supports Markdown.
### Response
Returns the [activity object](#the-activity-object) of the created comment.
### Example
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
<template #rest>
`PATCH /activity/comment/15`
```json
{
"comment": "Hello World!!"
}
```
</template>
<template #graphql>
`POST /graphql/system`
```graphql
mutation {
update_comment(id: 3, comment: "Hello World") {
# ...
}
}
```
</template>
<template #sdk>
```js
import { createDirectus } from '@directus/sdk';
import { rest, updateComment } from '@directus/sdk/rest';
const client = createDirectus('https://directus.example.com').with(rest());
const result = await client.request(
updateComment('53727', {
comment: 'Great work!',
})
);
```
</template>
</SnippetToggler>
## Delete a Comment
Deletes a comment.
### Request
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
<template #rest>
`DELETE /activity/comment/:id`
</template>
<template #graphql>
`POST /graphql/system`
```graphql
type Mutation {
delete_comment(id: ID): delete_one
}
```
</template>
<template #sdk>
```js
import { createDirectus, rest, deleteComment } from '@directus/sdk';
const client = createDirectus('directus_project_url').with(rest());
const result = await client.request(deleteComment(comment_id));
```
</template>
</SnippetToggler>
### Example
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
<template #rest>
`DELETE /activity/comment/15`
</template>
<template #graphql>
```graphql
mutation {
delete_comment(id: 3) {
id
}
}
```
</template>
<template #sdk>
```js
import { createDirectus } from '@directus/sdk';
import { rest, deleteComment } from '@directus/sdk/rest';
const client = createDirectus('https://directus.example.com').with(rest());
const result = await client.request(deleteComment('53727'));
```
</template>
</SnippetToggler>