summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/gallery
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-09-18 03:27:08 +0900
committerGitHub <noreply@github.com>2022-09-18 03:27:08 +0900
commitb75184ec8e3436200bacdcd832e3324702553d20 (patch)
tree8b7e316f29e95df921db57289c8b8da476d18f07 /packages/backend/src/server/api/endpoints/gallery
parentUpdate ROADMAP.md (diff)
downloadmisskey-b75184ec8e3436200bacdcd832e3324702553d20.tar.gz
misskey-b75184ec8e3436200bacdcd832e3324702553d20.tar.bz2
misskey-b75184ec8e3436200bacdcd832e3324702553d20.zip
なんかもうめっちゃ変えた
Diffstat (limited to 'packages/backend/src/server/api/endpoints/gallery')
-rw-r--r--packages/backend/src/server/api/endpoints/gallery/featured.ts33
-rw-r--r--packages/backend/src/server/api/endpoints/gallery/popular.ts31
-rw-r--r--packages/backend/src/server/api/endpoints/gallery/posts.ts32
-rw-r--r--packages/backend/src/server/api/endpoints/gallery/posts/create.ts71
-rw-r--r--packages/backend/src/server/api/endpoints/gallery/posts/delete.ts34
-rw-r--r--packages/backend/src/server/api/endpoints/gallery/posts/like.ts71
-rw-r--r--packages/backend/src/server/api/endpoints/gallery/posts/show.ts35
-rw-r--r--packages/backend/src/server/api/endpoints/gallery/posts/unlike.ts49
-rw-r--r--packages/backend/src/server/api/endpoints/gallery/posts/update.ts70
9 files changed, 275 insertions, 151 deletions
diff --git a/packages/backend/src/server/api/endpoints/gallery/featured.ts b/packages/backend/src/server/api/endpoints/gallery/featured.ts
index e6acd36911..3b892ef522 100644
--- a/packages/backend/src/server/api/endpoints/gallery/featured.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/featured.ts
@@ -1,5 +1,8 @@
-import define from '../../define.js';
-import { GalleryPosts } from '@/models/index.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { GalleryPostsRepository } from '@/models/index.js';
+import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js';
+import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['gallery'],
@@ -24,13 +27,23 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, me) => {
- const query = GalleryPosts.createQueryBuilder('post')
- .andWhere('post.createdAt > :date', { date: new Date(Date.now() - (1000 * 60 * 60 * 24 * 3)) })
- .andWhere('post.likedCount > 0')
- .orderBy('post.likedCount', 'DESC');
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.galleryPostsRepository)
+ private galleryPostsRepository: GalleryPostsRepository,
- const posts = await query.take(10).getMany();
+ private galleryPostEntityService: GalleryPostEntityService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const query = this.galleryPostsRepository.createQueryBuilder('post')
+ .andWhere('post.createdAt > :date', { date: new Date(Date.now() - (1000 * 60 * 60 * 24 * 3)) })
+ .andWhere('post.likedCount > 0')
+ .orderBy('post.likedCount', 'DESC');
- return await GalleryPosts.packMany(posts, me);
-});
+ const posts = await query.take(10).getMany();
+
+ return await this.galleryPostEntityService.packMany(posts, me);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/gallery/popular.ts b/packages/backend/src/server/api/endpoints/gallery/popular.ts
index c4c8982fcc..551ea64835 100644
--- a/packages/backend/src/server/api/endpoints/gallery/popular.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/popular.ts
@@ -1,5 +1,8 @@
-import define from '../../define.js';
-import { GalleryPosts } from '@/models/index.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { GalleryPostsRepository } from '@/models/index.js';
+import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js';
+import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['gallery'],
@@ -24,12 +27,22 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, me) => {
- const query = GalleryPosts.createQueryBuilder('post')
- .andWhere('post.likedCount > 0')
- .orderBy('post.likedCount', 'DESC');
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.galleryPostsRepository)
+ private galleryPostsRepository: GalleryPostsRepository,
- const posts = await query.take(10).getMany();
+ private galleryPostEntityService: GalleryPostEntityService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const query = this.galleryPostsRepository.createQueryBuilder('post')
+ .andWhere('post.likedCount > 0')
+ .orderBy('post.likedCount', 'DESC');
- return await GalleryPosts.packMany(posts, me);
-});
+ const posts = await query.take(10).getMany();
+
+ return await this.galleryPostEntityService.packMany(posts, me);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts.ts b/packages/backend/src/server/api/endpoints/gallery/posts.ts
index 428ba9cc71..4afcbce816 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts.ts
@@ -1,6 +1,9 @@
-import define from '../../define.js';
-import { makePaginationQuery } from '../../common/make-pagination-query.js';
-import { GalleryPosts } from '@/models/index.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { GalleryPostsRepository } from '@/models/index.js';
+import { QueryService } from '@/core/QueryService.js';
+import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js';
+import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['gallery'],
@@ -27,11 +30,22 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, me) => {
- const query = makePaginationQuery(GalleryPosts.createQueryBuilder('post'), ps.sinceId, ps.untilId)
- .innerJoinAndSelect('post.user', 'user');
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.galleryPostsRepository)
+ private galleryPostsRepository: GalleryPostsRepository,
- const posts = await query.take(ps.limit).getMany();
+ private galleryPostEntityService: GalleryPostEntityService,
+ private queryService: QueryService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const query = this.queryService.makePaginationQuery(this.galleryPostsRepository.createQueryBuilder('post'), ps.sinceId, ps.untilId)
+ .innerJoinAndSelect('post.user', 'user');
- return await GalleryPosts.packMany(posts, me);
-});
+ const posts = await query.take(ps.limit).getMany();
+
+ return await this.galleryPostEntityService.packMany(posts, me);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/create.ts b/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
index 8074a3b34f..9e8bcac131 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
@@ -1,10 +1,13 @@
import ms from 'ms';
-import define from '../../../define.js';
-import { DriveFiles, GalleryPosts } from '@/models/index.js';
-import { genId } from '../../../../../misc/gen-id.js';
-import { GalleryPost } from '@/models/entities/gallery-post.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { DriveFilesRepository, GalleryPostsRepository } from '@/models/index.js';
+import { GalleryPost } from '@/models/entities/GalleryPost.js';
+import type { DriveFile } from '@/models/entities/DriveFile.js';
+import { IdService } from '@/core/IdService.js';
+import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js';
+import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
-import { DriveFile } from '@/models/entities/drive-file.js';
export const meta = {
tags: ['gallery'],
@@ -43,28 +46,42 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, user) => {
- const files = (await Promise.all(ps.fileIds.map(fileId =>
- DriveFiles.findOneBy({
- id: fileId,
- userId: user.id,
- })
- ))).filter((file): file is DriveFile => file != null);
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.galleryPostsRepository)
+ private galleryPostsRepository: GalleryPostsRepository,
- if (files.length === 0) {
- throw new Error();
- }
+ @Inject(DI.driveFilesRepository)
+ private driveFilesRepository: DriveFilesRepository,
+
+ private galleryPostEntityService: GalleryPostEntityService,
+ private idService: IdService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const files = (await Promise.all(ps.fileIds.map(fileId =>
+ this.driveFilesRepository.findOneBy({
+ id: fileId,
+ userId: me.id,
+ }),
+ ))).filter((file): file is DriveFile => file != null);
- 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.findOneByOrFail(x.identifiers[0]));
+ if (files.length === 0) {
+ throw new Error();
+ }
- return await GalleryPosts.pack(post, user);
-});
+ const post = await this.galleryPostsRepository.insert(new GalleryPost({
+ id: this.idService.genId(),
+ createdAt: new Date(),
+ updatedAt: new Date(),
+ title: ps.title,
+ description: ps.description,
+ userId: me.id,
+ isSensitive: ps.isSensitive,
+ fileIds: files.map(file => file.id),
+ })).then(x => this.galleryPostsRepository.findOneByOrFail(x.identifiers[0]));
+
+ return await this.galleryPostEntityService.pack(post, me);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/delete.ts b/packages/backend/src/server/api/endpoints/gallery/posts/delete.ts
index b00ee0e2ae..ad5f95c853 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/delete.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/delete.ts
@@ -1,6 +1,8 @@
-import define from '../../../define.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { GalleryPostsRepository } from '@/models/index.js';
+import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
-import { GalleryPosts } from '@/models/index.js';
export const meta = {
tags: ['gallery'],
@@ -27,15 +29,23 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, user) => {
- const post = await GalleryPosts.findOneBy({
- id: ps.postId,
- userId: user.id,
- });
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.galleryPostsRepository)
+ private galleryPostsRepository: GalleryPostsRepository,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const post = await this.galleryPostsRepository.findOneBy({
+ id: ps.postId,
+ userId: me.id,
+ });
- if (post == null) {
- throw new ApiError(meta.errors.noSuchPost);
- }
+ if (post == null) {
+ throw new ApiError(meta.errors.noSuchPost);
+ }
- await GalleryPosts.delete(post.id);
-});
+ await this.galleryPostsRepository.delete(post.id);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/like.ts b/packages/backend/src/server/api/endpoints/gallery/posts/like.ts
index b858114aec..8aca98119b 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/like.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/like.ts
@@ -1,7 +1,9 @@
-import define from '../../../define.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { GalleryLikesRepository, GalleryPostsRepository } from '@/models/index.js';
+import { IdService } from '@/core/IdService.js';
+import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
-import { GalleryPosts, GalleryLikes } from '@/models/index.js';
-import { genId } from '@/misc/gen-id.js';
export const meta = {
tags: ['gallery'],
@@ -40,33 +42,46 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, user) => {
- const post = await GalleryPosts.findOneBy({ id: ps.postId });
- if (post == null) {
- throw new ApiError(meta.errors.noSuchPost);
- }
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.galleryPostsRepository)
+ private galleryPostsRepository: GalleryPostsRepository,
- if (post.userId === user.id) {
- throw new ApiError(meta.errors.yourPost);
- }
+ @Inject(DI.galleryLikesRepository)
+ private galleryLikesRepository: GalleryLikesRepository,
- // if already liked
- const exist = await GalleryLikes.findOneBy({
- postId: post.id,
- userId: user.id,
- });
+ private idService: IdService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const post = await this.galleryPostsRepository.findOneBy({ id: ps.postId });
+ if (post == null) {
+ throw new ApiError(meta.errors.noSuchPost);
+ }
- if (exist != null) {
- throw new ApiError(meta.errors.alreadyLiked);
- }
+ if (post.userId === me.id) {
+ throw new ApiError(meta.errors.yourPost);
+ }
- // Create like
- await GalleryLikes.insert({
- id: genId(),
- createdAt: new Date(),
- postId: post.id,
- userId: user.id,
- });
+ // if already liked
+ const exist = await this.galleryLikesRepository.findOneBy({
+ postId: post.id,
+ userId: me.id,
+ });
- GalleryPosts.increment({ id: post.id }, 'likedCount', 1);
-});
+ if (exist != null) {
+ throw new ApiError(meta.errors.alreadyLiked);
+ }
+
+ // Create like
+ await this.galleryLikesRepository.insert({
+ id: this.idService.genId(),
+ createdAt: new Date(),
+ postId: post.id,
+ userId: me.id,
+ });
+
+ this.galleryPostsRepository.increment({ id: post.id }, 'likedCount', 1);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/show.ts b/packages/backend/src/server/api/endpoints/gallery/posts/show.ts
index 4f6dafd7cb..723906d60f 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/show.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/show.ts
@@ -1,6 +1,9 @@
-import define from '../../../define.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { GalleryPostsRepository } from '@/models/index.js';
+import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js';
+import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
-import { GalleryPosts } from '@/models/index.js';
export const meta = {
tags: ['gallery'],
@@ -31,14 +34,24 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, me) => {
- const post = await GalleryPosts.findOneBy({
- id: ps.postId,
- });
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.galleryPostsRepository)
+ private galleryPostsRepository: GalleryPostsRepository,
- if (post == null) {
- throw new ApiError(meta.errors.noSuchPost);
- }
+ private galleryPostEntityService: GalleryPostEntityService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const post = await this.galleryPostsRepository.findOneBy({
+ id: ps.postId,
+ });
+
+ if (post == null) {
+ throw new ApiError(meta.errors.noSuchPost);
+ }
- return await GalleryPosts.pack(post, me);
-});
+ return await this.galleryPostEntityService.pack(post, me);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/unlike.ts b/packages/backend/src/server/api/endpoints/gallery/posts/unlike.ts
index d136239e5e..d878582998 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/unlike.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/unlike.ts
@@ -1,6 +1,8 @@
-import define from '../../../define.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { GalleryPostsRepository, GalleryLikesRepository } from '@/models/index.js';
+import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
-import { GalleryPosts, GalleryLikes } from '@/models/index.js';
export const meta = {
tags: ['gallery'],
@@ -33,23 +35,34 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, user) => {
- const post = await GalleryPosts.findOneBy({ id: ps.postId });
- if (post == null) {
- throw new ApiError(meta.errors.noSuchPost);
- }
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.galleryPostsRepository)
+ private galleryPostsRepository: GalleryPostsRepository,
- const exist = await GalleryLikes.findOneBy({
- postId: post.id,
- userId: user.id,
- });
+ @Inject(DI.galleryLikesRepository)
+ private galleryLikesRepository: GalleryLikesRepository,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const post = await this.galleryPostsRepository.findOneBy({ id: ps.postId });
+ if (post == null) {
+ throw new ApiError(meta.errors.noSuchPost);
+ }
- if (exist == null) {
- throw new ApiError(meta.errors.notLiked);
- }
+ const exist = await this.galleryLikesRepository.findOneBy({
+ postId: post.id,
+ userId: me.id,
+ });
- // Delete like
- await GalleryLikes.delete(exist.id);
+ if (exist == null) {
+ throw new ApiError(meta.errors.notLiked);
+ }
- GalleryPosts.decrement({ id: post.id }, 'likedCount', 1);
-});
+ // Delete like
+ await this.galleryLikesRepository.delete(exist.id);
+
+ this.galleryPostsRepository.decrement({ id: post.id }, 'likedCount', 1);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/update.ts b/packages/backend/src/server/api/endpoints/gallery/posts/update.ts
index 82fe38078e..1900afaeb6 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/update.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/update.ts
@@ -1,9 +1,12 @@
import ms from 'ms';
-import define from '../../../define.js';
-import { DriveFiles, GalleryPosts } from '@/models/index.js';
-import { GalleryPost } from '@/models/entities/gallery-post.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { DriveFilesRepository, GalleryPostsRepository } from '@/models/index.js';
+import { GalleryPost } from '@/models/entities/GalleryPost.js';
+import type { DriveFile } from '@/models/entities/DriveFile.js';
+import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js';
+import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
-import { DriveFile } from '@/models/entities/drive-file.js';
export const meta = {
tags: ['gallery'],
@@ -43,30 +46,43 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, user) => {
- const files = (await Promise.all(ps.fileIds.map(fileId =>
- DriveFiles.findOneBy({
- id: fileId,
- userId: user.id,
- })
- ))).filter((file): file is DriveFile => file != null);
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.galleryPostsRepository)
+ private galleryPostsRepository: GalleryPostsRepository,
- if (files.length === 0) {
- throw new Error();
- }
+ @Inject(DI.driveFilesRepository)
+ private driveFilesRepository: DriveFilesRepository,
+
+ private galleryPostEntityService: GalleryPostEntityService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const files = (await Promise.all(ps.fileIds.map(fileId =>
+ this.driveFilesRepository.findOneBy({
+ id: fileId,
+ userId: me.id,
+ }),
+ ))).filter((file): file is DriveFile => file != null);
- await GalleryPosts.update({
- id: ps.postId,
- userId: user.id,
- }, {
- updatedAt: new Date(),
- title: ps.title,
- description: ps.description,
- isSensitive: ps.isSensitive,
- fileIds: files.map(file => file.id),
- });
+ if (files.length === 0) {
+ throw new Error();
+ }
- const post = await GalleryPosts.findOneByOrFail({ id: ps.postId });
+ await this.galleryPostsRepository.update({
+ id: ps.postId,
+ userId: me.id,
+ }, {
+ updatedAt: new Date(),
+ title: ps.title,
+ description: ps.description,
+ isSensitive: ps.isSensitive,
+ fileIds: files.map(file => file.id),
+ });
- return await GalleryPosts.pack(post, user);
-});
+ const post = await this.galleryPostsRepository.findOneByOrFail({ id: ps.postId });
+
+ return await this.galleryPostEntityService.pack(post, me);
+ });
+ }
+}