Added swag for file-storage (#20)

* added swag for file-storage

* commit with ref

* otstupbl fixes

* methods fixed

* operationId reorder

* fixed path

* added response

* fix typo

* fix type

* test

* fixed methods

* test different wercker

* indentation

* fixed project
This commit is contained in:
Pospolita Nikita 2019-11-13 17:48:36 +03:00 committed by GitHub
parent d4ac4e7d75
commit 60f7b1be6a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 191 additions and 53 deletions

@ -1 +1 @@
Subproject commit ea4aa042f482551d624fd49a570d28488f479e93
Subproject commit 4a09386542ab4b98317a787fd6e06e0d3a1e38d6

View File

@ -1,16 +1,44 @@
var gulp = require('gulp');
var util = require('gulp-util');
var gulpConnect = require('gulp-connect');
var connect = require('connect');
var cors = require('cors');
var path = require('path');
var exec = require('child_process').exec;
var portfinder = require('portfinder');
var swaggerRepo = require('swagger-repo');
const gulp = require('gulp');
const util = require('gulp-util');
const gulpConnect = require('gulp-connect');
const connect = require('connect');
const cors = require('cors');
const path = require('path');
const exec = require('child_process').exec;
const portfinder = require('portfinder');
const swaggerRepo = require('swagger-repo');
var DIST_DIR = 'web_deploy';
const DIST_DIR = 'web_deploy';
const SPEC_DIR = 'spec';
gulp.task('serve', ['build', 'watch', 'edit'], function() {
gulp.task('edit', function(done) {
portfinder.getPort({port: 5000}, function (err, port) {
let app = connect();
app.use(swaggerRepo.swaggerEditorMiddleware());
app.listen(port);
util.log(util.colors.green('swagger-editor started http://localhost:' + port));
});
done();
});
gulp.task('build', function (cb) {
exec('npm run build', function (err, stdout, stderr) {
console.log(stderr);
cb(err);
});
});
gulp.task('reload', gulp.series('build', function (done) {
gulp.src(DIST_DIR).pipe(gulpConnect.reload());
done();
}));
gulp.task('watch', function (done) {
gulp.watch([`${SPEC_DIR}/**/*`, 'web/**/*'], gulp.series('reload'));
done();
});
gulp.task('ui', function (done) {
portfinder.getPort({port: 3000}, function (err, port) {
gulpConnect.server({
root: [DIST_DIR],
@ -22,29 +50,10 @@ gulp.task('serve', ['build', 'watch', 'edit'], function() {
]
}
});
done();
});
});
gulp.task('edit', function() {
portfinder.getPort({port: 5000}, function (err, port) {
var app = connect();
app.use(swaggerRepo.swaggerEditorMiddleware());
app.listen(port);
util.log(util.colors.green('swagger-editor started http://localhost:' + port));
});
});
gulp.task('build', function (cb) {
exec('npm run build', function (err, stdout, stderr) {
console.log(stderr);
cb(err);
});
});
gulp.task('reload', ['build'], function () {
gulp.src(DIST_DIR).pipe(gulpConnect.reload())
});
gulp.task('watch', function () {
gulp.watch(['api/swag-dark-api/**/*', 'web/**/*'], ['reload']);
});
gulp.task('serve', gulp.series('build', gulp.parallel('ui', 'edit', 'watch'), function (done) {
done();
}));

View File

@ -6,7 +6,7 @@
"connect": "^3.4.1",
"cors": "^2.7.1",
"deploy-to-gh-pages": "^1.1.0",
"gulp": "^3.9.1",
"gulp": "^4.0.2",
"gulp-connect": "^4.2.0",
"gulp-util": "^3.0.7",
"json-merge-patch": "^0.2.3",

View File

@ -0,0 +1,28 @@
type: object
required:
- fileId
- fileName
- createdAt
- md5
- metadata
properties:
fileId:
description: Идентификатор файла
type: string
maxLength: 40
minLength: 1
fileName:
description: Имя файла
type: string
createdAt:
description: Дата загрузки файла
type: string
format: date-time
md5:
description: сигнатура
type: string
metadata:
description: Дополнительная информация о файле
type: object
additionalProperties:
type: string

View File

@ -0,0 +1,7 @@
type: object
required:
- url
properties:
url:
description: URL файла
type: string

View File

@ -0,0 +1,7 @@
type: object
properties:
url:
description: URL файла
type: string
fileData:
$ref: '#/definitions/FileData'

View File

@ -0,0 +1,20 @@
type: object
required:
- fileName
- metadata
- expiresAt
properties:
fileName:
description: Имя файла
type: string
maxLength: 40
minLength: 1
metadata:
description: Дополнительная информация о файле
type: object
additionalProperties:
type: string
expiresAt:
description: время до которого ссылка будет считаться действительной
type: string
format: date-time

View File

@ -0,0 +1,23 @@
post:
description: Создать новый файл и сгенерировать ссылку для выгрузки файла на сервер
operationId: uploadFile
tags:
- Files
parameters:
- $ref: '#/parameters/requestID'
- $ref: '#/parameters/deadline'
- name: uploadFileRequest
in: body
schema:
$ref: '#/definitions/FileUploadRequest'
responses:
'201':
description: Данные для загрузки файла на сервер
schema:
$ref: '#/definitions/FileUploadData'
'400':
$ref: '#/responses/BadRequest'
'401':
$ref: '#/responses/Unauthorized'
'404':
$ref: '#/responses/NotFound'

View File

@ -0,0 +1,20 @@
get:
description: Получить ссылку для скачивания файла
operationId: downloadFile
tags:
- Files
parameters:
- $ref: '#/parameters/requestID'
- $ref: '#/parameters/deadline'
- $ref: '#/parameters/fileID'
responses:
'200':
description: Данные для получения файла
schema:
$ref: '#/definitions/FileDownload'
'400':
$ref: '#/responses/BadRequest'
'401':
$ref: '#/responses/Unauthorized'
'404':
$ref: '#/responses/NotFound'

View File

@ -0,0 +1,20 @@
get:
description: Получить информацию о файле
operationId: getFileInfo
tags:
- Files
parameters:
- $ref: '#/parameters/requestID'
- $ref: '#/parameters/deadline'
- $ref: '#/parameters/fileID'
responses:
'200':
description: Данные файла
schema:
$ref: '#/definitions/FileData'
'400':
$ref: '#/responses/BadRequest'
'401':
$ref: '#/responses/Unauthorized'
'404':
$ref: '#/responses/NotFound'

View File

@ -31,19 +31,6 @@ get:
type: string
maxLength: 40
minLength: 1
- name: refundStatus
in: query
description: Статус возврата
type: string
enum:
- pending
- succeeded
- failed
- x-rebillyMerge:
- name: continuationToken
in: query
required: false
- $ref: '#/definitions/ContinuationToken'
responses:
'200':
description: Найденные возвраты
@ -57,7 +44,7 @@ get:
type: array
items:
$ref: '#/definitions/EnrichedSearchResult'
'404':
$ref: '#/responses/NotFound'
'401':
$ref: '#/responses/Unauthorized'
'404':
$ref: '#/responses/NotFound'

View File

@ -54,6 +54,10 @@ responses:
description: Неверные данные
schema:
$ref: '#/definitions/DefaultLogicError'
BadRequest:
description: Некорректный запрос
schema:
$ref: '#/definitions/GeneralError'
parameters:
requestID:
@ -157,6 +161,14 @@ parameters:
type: string
maxLength: 40
minLength: 1
fileID:
name: fileID
in: path
description: Идентификатор файла
required: true
type: string
maxLength: 40
minLength: 1
tags:
- name: Search
@ -178,4 +190,9 @@ tags:
заявка не одобрена, вы можете добавлять изменения. После одобрения они
будут применены к набору данных. В случае отказа по заявке данные
останутся в неизменном состоянии. Ближайшим аналогом заявок можно
представить Pull Request в распределенных системах контроля версий.
представить Pull Request в распределенных системах контроля версий.
- name: Files
x-displayName: Управление файлами
description: >
Получение ссылки на загрузку, получение ссылки на скачивание, информация о файле.

View File

@ -16,4 +16,4 @@ deploy:
after-steps:
- slack-notifier:
url: ${SLACK_WEBHOOK_URL}
username: "wercker"
username: "wercker"