Browse Source

Add openapi doc

Chocobozzz 3 years ago
parent
commit
668b7f096e

+ 1 - 2
server/lib/notifier.ts

@@ -1,4 +1,4 @@
-import { AbuseMessageModel } from '@server/models/abuse/abuse-message'
+import { AccountModel } from '@server/models/account/account'
 import { getServerActor } from '@server/models/application/application'
 import { ServerBlocklistModel } from '@server/models/server/server-blocklist'
 import {
@@ -24,7 +24,6 @@ import { MCommentOwnerVideo, MVideoAccountLight, MVideoFullLight } from '../type
 import { isBlockedByServerOrAccount } from './blocklist'
 import { Emailer } from './emailer'
 import { PeerTubeSocket } from './peertube-socket'
-import { AccountModel } from '@server/models/account/account'
 
 class Notifier {
 

+ 1 - 1
server/middlewares/validators/abuse.ts

@@ -208,7 +208,7 @@ const checkAbuseValidForMessagesValidator = [
     const abuse = res.locals.abuse
     if (abuse.ReporterAccount.isOwned() === false) {
       return res.status(400).json({
-        error: 'This abuse was created by a user of your instance.',
+        error: 'This abuse was created by a user of your instance.'
       })
     }
 

+ 0 - 1
server/tests/api/check-params/abuses.ts

@@ -427,4 +427,3 @@ describe('Test abuses API validators', function () {
     await cleanupTests([ server ])
   })
 })
-

+ 3 - 3
server/types/models/moderation/abuse.ts

@@ -1,11 +1,11 @@
 import { VideoAbuseModel } from '@server/models/abuse/video-abuse'
 import { VideoCommentAbuseModel } from '@server/models/abuse/video-comment-abuse'
+import { VideoCommentModel } from '@server/models/video/video-comment'
 import { PickWith } from '@shared/core-utils'
 import { AbuseModel } from '../../../models/abuse/abuse'
-import { MAccountDefault, MAccountFormattable, MAccountLight, MAccountUrl, MAccount } from '../account'
-import { MCommentOwner, MCommentUrl, MVideoUrl, MCommentOwnerVideo, MComment, MCommentVideo } from '../video'
+import { MAccountDefault, MAccountFormattable, MAccountLight, MAccountUrl } from '../account'
+import { MComment, MCommentOwner, MCommentUrl, MCommentVideo, MVideoUrl } from '../video'
 import { MVideo, MVideoAccountLightBlacklistAllFiles } from '../video/video'
-import { VideoCommentModel } from '@server/models/video/video-comment'
 
 type Use<K extends keyof AbuseModel, M> = PickWith<AbuseModel, K, M>
 type UseVideoAbuse<K extends keyof VideoAbuseModel, M> = PickWith<VideoAbuseModel, K, M>

+ 2 - 3
server/typings/express/index.d.ts

@@ -1,7 +1,7 @@
 import { RegisterServerAuthExternalOptions } from '@server/types'
 import {
-  MAbuse,
   MAbuseMessage,
+  MAbuseReporter,
   MAccountBlocklist,
   MActorUrl,
   MStreamingPlaylist,
@@ -9,8 +9,7 @@ import {
   MVideoFile,
   MVideoImmutable,
   MVideoPlaylistFull,
-  MVideoPlaylistFullSummary,
-  MAbuseReporter
+  MVideoPlaylistFullSummary
 } from '@server/types/models'
 import { MOAuthTokenUser } from '@server/types/models/oauth/oauth-token'
 import { MPlugin, MServer, MServerBlocklist } from '@server/types/models/server'

+ 111 - 9
support/doc/api/openapi.yaml

@@ -1474,6 +1474,38 @@ paths:
           description: HTTP or Torrent/magnetURI import not enabled
         '400':
           description: '`magnetUri` or `targetUrl` or a torrent file missing'
+
+  /users/me/abuses:
+    get:
+      summary: List my abuses
+      security:
+        - OAuth2: []
+      tags:
+        - Abuses
+        - My User
+      parameters:
+        - name: id
+          in: query
+          description: only list the report with this id
+          schema:
+            type: integer
+        - name: state
+          in: query
+          schema:
+            $ref: '#/components/schemas/AbuseStateSet'
+        - $ref: '#/components/parameters/start'
+        - $ref: '#/components/parameters/count'
+        - $ref: '#/components/parameters/abusesSort'
+      responses:
+        '200':
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/Abuse'
+
   /abuses:
     get:
       summary: List abuses
@@ -1501,13 +1533,8 @@ paths:
             type: string
         - name: state
           in: query
-          description: 'The abuse state (Pending = `1`, Rejected = `2`, Accepted = `3`)'
           schema:
-            type: integer
-            enum:
-              - 1
-              - 2
-              - 3
+            $ref: '#/components/schemas/AbuseStateSet'
         - name: searchReporter
           in: query
           description: only list reports of a specific reporter
@@ -1556,7 +1583,7 @@ paths:
               schema:
                 type: array
                 items:
-                  $ref: '#/components/schemas/VideoAbuse'
+                  $ref: '#/components/schemas/Abuse'
 
     post:
       summary: Report an abuse
@@ -1653,6 +1680,61 @@ paths:
           description: successful operation
         '404':
           description: block not found
+  '/abuses/{abuseId}/messages':
+    get:
+      summary: List messages of an abuse
+      security:
+        - OAuth2: []
+      tags:
+        - Abuses
+      parameters:
+        - $ref: '#/components/parameters/abuseId'
+      responses:
+        '200':
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/AbuseMessage'
+
+    post:
+      summary: Add message to an abuse
+      security:
+        - OAuth2: []
+      tags:
+        - Abuses
+      requestBody:
+        required: true
+        content:
+          application/json:
+            schema:
+              type: object
+              properties:
+                message:
+                  description: Message to send
+                  type: string
+              required:
+                - message
+      responses:
+        '200':
+          description: successful operation
+        '400':
+          description: incorrect request parameters
+  '/abuses/{abuseId}/messages/{abuseMessageId}':
+    delete:
+      summary: Delete an abuse message
+      security:
+        - OAuth2: []
+      tags:
+        - Abuses
+      parameters:
+        - $ref: '#/components/parameters/abuseId'
+        - $ref: '#/components/parameters/abuseMessageId'
+      responses:
+        '204':
+          description: successful operation
 
   '/videos/{id}/blacklist':
     post:
@@ -3332,6 +3414,13 @@ components:
       description: Abuse id
       schema:
         type: integer
+    abuseMessageId:
+      name: abuseMessageId
+      in: path
+      required: true
+      description: Abuse message id
+      schema:
+        type: integer
     captionLanguage:
       name: captionLanguage
       in: path
@@ -3599,7 +3688,7 @@ components:
         - 1
         - 2
         - 3
-      description: 'The video playlist privacy (Pending = `1`, Rejected = `2`, Accepted = `3`)'
+      description: 'The abuse state (Pending = `1`, Rejected = `2`, Accepted = `3`)'
     AbuseStateConstant:
       properties:
         id:
@@ -3960,7 +4049,7 @@ components:
           format: date-time
         video:
           $ref: '#/components/schemas/Video'
-    VideoAbuse:
+    Abuse:
       properties:
         id:
           type: integer
@@ -3991,6 +4080,19 @@ components:
         createdAt:
           type: string
           format: date-time
+    AbuseMessage:
+      properties:
+        id:
+          type: integer
+        message:
+          type: string
+        byModerator:
+          type: boolean
+        createdAt:
+          type: string
+          format: date-time
+        account:
+          $ref: '#/components/schemas/AccountSummary'
     VideoBlacklist:
       properties:
         id: