diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-04-24 22:38:24 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-24 22:38:24 +0900 |
| commit | fec3c70886c13a267814e7eba5d2dd9aa807687b (patch) | |
| tree | d88fcd2904b964a30a925be6e1b26e1e51ee329d /src/server/api/endpoints/gallery/posts/create.ts | |
| parent | Tweak UI (diff) | |
| download | sharkey-fec3c70886c13a267814e7eba5d2dd9aa807687b.tar.gz sharkey-fec3c70886c13a267814e7eba5d2dd9aa807687b.tar.bz2 sharkey-fec3c70886c13a267814e7eba5d2dd9aa807687b.zip | |
Gallery (#7194)
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
Diffstat (limited to 'src/server/api/endpoints/gallery/posts/create.ts')
| -rw-r--r-- | src/server/api/endpoints/gallery/posts/create.ts | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/server/api/endpoints/gallery/posts/create.ts b/src/server/api/endpoints/gallery/posts/create.ts new file mode 100644 index 0000000000..d1ae68b126 --- /dev/null +++ b/src/server/api/endpoints/gallery/posts/create.ts @@ -0,0 +1,76 @@ +import $ from 'cafy'; +import * as ms from 'ms'; +import define from '../../../define'; +import { ID } from '../../../../../misc/cafy-id'; +import { DriveFiles, GalleryPosts } from '../../../../../models'; +import { genId } from '../../../../../misc/gen-id'; +import { GalleryPost } from '../../../../../models/entities/gallery-post'; +import { ApiError } from '../../../error'; + +export const meta = { + tags: ['gallery'], + + requireCredential: true as const, + + kind: 'write:gallery', + + limit: { + duration: ms('1hour'), + max: 300 + }, + + params: { + title: { + validator: $.str.min(1), + }, + + description: { + validator: $.optional.nullable.str, + }, + + fileIds: { + validator: $.arr($.type(ID)).unique().range(1, 32), + }, + + isSensitive: { + validator: $.optional.bool, + default: false, + }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'GalleryPost', + }, + + errors: { + + } +}; + +export default define(meta, async (ps, user) => { + const files = (await Promise.all(ps.fileIds.map(fileId => + DriveFiles.findOne({ + id: fileId, + userId: user.id + }) + ))).filter(file => file != null); + + if (files.length === 0) { + throw new Error(); + } + + const post = await GalleryPosts.insert(new GalleryPost({ + id: genId(), + createdAt: new Date(), + updatedAt: new Date(), + title: ps.title, + description: ps.description, + userId: user.id, + isSensitive: ps.isSensitive, + fileIds: files.map(file => file.id) + })).then(x => GalleryPosts.findOneOrFail(x.identifiers[0])); + + return await GalleryPosts.pack(post, user); +}); |