summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2023-01-22 12:07:38 +0000
committertamaina <tamaina@hotmail.co.jp>2023-01-22 12:07:38 +0000
commita8b19f4aa8ca014ee4f86f15279c1b9b0b592c65 (patch)
tree779967d21452e8fab4d9ec872a1277ac68f95956 /packages/backend/src/server/api/endpoints
parentrefactor (diff)
parent13.1.7 (diff)
downloadmisskey-a8b19f4aa8ca014ee4f86f15279c1b9b0b592c65.tar.gz
misskey-a8b19f4aa8ca014ee4f86f15279c1b9b0b592c65.tar.bz2
misskey-a8b19f4aa8ca014ee4f86f15279c1b9b0b592c65.zip
Merge branch 'develop' into emoji-re
Diffstat (limited to 'packages/backend/src/server/api/endpoints')
-rw-r--r--packages/backend/src/server/api/endpoints/drive/folders/update.ts4
-rw-r--r--packages/backend/src/server/api/endpoints/emojis.ts1
-rw-r--r--packages/backend/src/server/api/endpoints/i.ts27
-rw-r--r--packages/backend/src/server/api/endpoints/i/claim-achievement.ts28
-rw-r--r--packages/backend/src/server/api/endpoints/notes/favorites/create.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/users/achievements.ts31
6 files changed, 92 insertions, 5 deletions
diff --git a/packages/backend/src/server/api/endpoints/drive/folders/update.ts b/packages/backend/src/server/api/endpoints/drive/folders/update.ts
index ee63d291b2..ff0a78b929 100644
--- a/packages/backend/src/server/api/endpoints/drive/folders/update.ts
+++ b/packages/backend/src/server/api/endpoints/drive/folders/update.ts
@@ -28,8 +28,8 @@ export const meta = {
recursiveNesting: {
message: 'It can not be structured like nesting folders recursively.',
- code: 'NO_SUCH_PARENT_FOLDER',
- id: 'ce104e3a-faaf-49d5-b459-10ff0cbbcaa1',
+ code: 'RECURSIVE_NESTING',
+ id: 'dbeb024837894013aed44279f9199740',
},
},
diff --git a/packages/backend/src/server/api/endpoints/emojis.ts b/packages/backend/src/server/api/endpoints/emojis.ts
index 67538b0bd2..9dfb12b765 100644
--- a/packages/backend/src/server/api/endpoints/emojis.ts
+++ b/packages/backend/src/server/api/endpoints/emojis.ts
@@ -85,6 +85,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
emojis: await this.emojiEntityService.packMany(emojis, {
omitId: true,
omitHost: true,
+ withUrl: true,
}),
};
});
diff --git a/packages/backend/src/server/api/endpoints/i.ts b/packages/backend/src/server/api/endpoints/i.ts
index 3bcd6ff8fb..6beef5ab85 100644
--- a/packages/backend/src/server/api/endpoints/i.ts
+++ b/packages/backend/src/server/api/endpoints/i.ts
@@ -1,5 +1,5 @@
import { Inject, Injectable } from '@nestjs/common';
-import type { UsersRepository } from '@/models/index.js';
+import type { UserProfilesRepository, UsersRepository } from '@/models/index.js';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { DI } from '@/di-symbols.js';
@@ -29,15 +29,36 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
+ @Inject(DI.userProfilesRepository)
+ private userProfilesRepository: UserProfilesRepository,
+
private userEntityService: UserEntityService,
) {
super(meta, paramDef, async (ps, user, token) => {
const isSecure = token == null;
- // ここで渡ってきている user はキャッシュされていて古い可能性もあるので id だけ渡す
- return await this.userEntityService.pack<true, true>(user.id, user, {
+ const now = new Date();
+ const today = `${now.getFullYear()}/${now.getMonth() + 1}/${now.getDate()}`;
+
+ // 渡ってきている user はキャッシュされていて古い可能性があるので改めて取得
+ const userProfile = await this.userProfilesRepository.findOneOrFail({
+ where: {
+ userId: user.id,
+ },
+ relations: ['user'],
+ });
+
+ if (!userProfile.loggedInDates.includes(today)) {
+ this.userProfilesRepository.update({ userId: user.id }, {
+ loggedInDates: [...userProfile.loggedInDates, today],
+ });
+ userProfile.loggedInDates = [...userProfile.loggedInDates, today];
+ }
+
+ return await this.userEntityService.pack<true, true>(userProfile.user!, userProfile.user!, {
detail: true,
includeSecrets: isSecure,
+ userProfile,
});
});
}
diff --git a/packages/backend/src/server/api/endpoints/i/claim-achievement.ts b/packages/backend/src/server/api/endpoints/i/claim-achievement.ts
new file mode 100644
index 0000000000..52ae5475b6
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/i/claim-achievement.ts
@@ -0,0 +1,28 @@
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { DI } from '@/di-symbols.js';
+import { AchievementService } from '@/core/AchievementService.js';
+
+export const meta = {
+ requireCredential: true,
+} as const;
+
+export const paramDef = {
+ type: 'object',
+ properties: {
+ name: { type: 'string' },
+ },
+ required: ['name'],
+} as const;
+
+// eslint-disable-next-line import/no-default-export
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ private achievementService: AchievementService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ await this.achievementService.create(me.id, ps.name);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/notes/favorites/create.ts b/packages/backend/src/server/api/endpoints/notes/favorites/create.ts
index acf22a5ad4..e423f0f109 100644
--- a/packages/backend/src/server/api/endpoints/notes/favorites/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/favorites/create.ts
@@ -6,6 +6,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
import { GetterService } from '@/server/api/GetterService.js';
import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
+import { AchievementService } from '@/core/AchievementService.js';
export const meta = {
tags: ['notes', 'favorites'],
@@ -51,6 +52,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
private idService: IdService,
private getterService: GetterService,
+ private achievementService: AchievementService,
) {
super(meta, paramDef, async (ps, me) => {
// Get favoritee
@@ -76,6 +78,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
noteId: note.id,
userId: me.id,
});
+
+ if (note.userHost == null) {
+ this.achievementService.create(note.userId, 'myNoteFavorited1');
+ }
});
}
}
diff --git a/packages/backend/src/server/api/endpoints/users/achievements.ts b/packages/backend/src/server/api/endpoints/users/achievements.ts
new file mode 100644
index 0000000000..2a095d83ea
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/users/achievements.ts
@@ -0,0 +1,31 @@
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import type { UserProfilesRepository } from '@/models/index.js';
+import { DI } from '@/di-symbols.js';
+
+export const meta = {
+ requireCredential: true,
+} as const;
+
+export const paramDef = {
+ type: 'object',
+ properties: {
+ userId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['userId'],
+} as const;
+
+// eslint-disable-next-line import/no-default-export
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.userProfilesRepository)
+ private userProfilesRepository: UserProfilesRepository,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const profile = await this.userProfilesRepository.findOneByOrFail({ userId: ps.userId });
+
+ return profile.achievements;
+ });
+ }
+}