Skip to content
This repository was archived by the owner on Feb 23, 2026. It is now read-only.

Commit 45a6de0

Browse files
committed
point/sendエンドポイントを追加
1 parent 3b71c63 commit 45a6de0

File tree

5 files changed

+78
-0
lines changed

5 files changed

+78
-0
lines changed

packages/backend/src/models/Notification.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ export type MiNotification = {
5858
id: string;
5959
createdAt: string;
6060
loginBonus: number;
61+
} | {
62+
type: 'sendPoint';
63+
id: string;
64+
createdAt: string;
65+
getPoint: number;
66+
senderId: MiUser['id'];
6167
} | {
6268
type: 'pollEnded';
6369
id: string;

packages/backend/src/server/api/EndpointsModule.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,7 @@ import * as ep___users_search from './endpoints/users/search.js';
394394
import * as ep___users_show from './endpoints/users/show.js';
395395
import * as ep___users_achievements from './endpoints/users/achievements.js';
396396
import * as ep___users_updateMemo from './endpoints/users/update-memo.js';
397+
import * as ep___point_send from './endpoints/point/send.js';
397398
import * as ep___fetchRss from './endpoints/fetch-rss.js';
398399
import * as ep___fetchExternalResources from './endpoints/fetch-external-resources.js';
399400
import * as ep___retention from './endpoints/retention.js';
@@ -801,6 +802,7 @@ const $users_search: Provider = { provide: 'ep:users/search', useClass: ep___use
801802
const $users_show: Provider = { provide: 'ep:users/show', useClass: ep___users_show.default };
802803
const $users_achievements: Provider = { provide: 'ep:users/achievements', useClass: ep___users_achievements.default };
803804
const $users_updateMemo: Provider = { provide: 'ep:users/update-memo', useClass: ep___users_updateMemo.default };
805+
const $point_send: Provider = { provide: 'ep:point/send', useClass: ep___point_send.default };
804806
const $fetchRss: Provider = { provide: 'ep:fetch-rss', useClass: ep___fetchRss.default };
805807
const $fetchExternalResources: Provider = { provide: 'ep:fetch-external-resources', useClass: ep___fetchExternalResources.default };
806808
const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention.default };
@@ -1211,6 +1213,7 @@ const $reversi_verify: Provider = { provide: 'ep:reversi/verify', useClass: ep__
12111213
$users_show,
12121214
$users_achievements,
12131215
$users_updateMemo,
1216+
$point_send,
12141217
$fetchRss,
12151218
$fetchExternalResources,
12161219
$retention,
@@ -1612,6 +1615,7 @@ const $reversi_verify: Provider = { provide: 'ep:reversi/verify', useClass: ep__
16121615
$users_show,
16131616
$users_achievements,
16141617
$users_updateMemo,
1618+
$point_send,
16151619
$fetchRss,
16161620
$fetchExternalResources,
16171621
$retention,

packages/backend/src/server/api/endpoints.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ import * as ep___users_search from './endpoints/users/search.js';
403403
import * as ep___users_show from './endpoints/users/show.js';
404404
import * as ep___users_achievements from './endpoints/users/achievements.js';
405405
import * as ep___users_updateMemo from './endpoints/users/update-memo.js';
406+
import * as ep___point_send from './endpoints/point/send.js';
406407
import * as ep___fetchRss from './endpoints/fetch-rss.js';
407408
import * as ep___fetchExternalResources from './endpoints/fetch-external-resources.js';
408409
import * as ep___retention from './endpoints/retention.js';
@@ -806,6 +807,7 @@ const eps = [
806807
['users/show', ep___users_show],
807808
['users/achievements', ep___users_achievements],
808809
['users/update-memo', ep___users_updateMemo],
810+
['point/send', ep___point_send],
809811
['fetch-rss', ep___fetchRss],
810812
['fetch-external-resources', ep___fetchExternalResources],
811813
['retention', ep___retention],
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* SPDX-FileCopyrightText: syuilo and misskey-project
3+
* SPDX-License-Identifier: AGPL-3.0-only
4+
*/
5+
6+
import { Inject, Injectable } from '@nestjs/common';
7+
import { Endpoint } from '@/server/api/endpoint-base.js';
8+
import type { UsersRepository } from '@/models/_.js';
9+
import { DI } from '@/di-symbols.js';
10+
import { NotificationService } from '@/core/NotificationService.js';
11+
12+
export const meta = {
13+
tag: ['point'],
14+
requireCredential: true,
15+
kind: 'write:points',
16+
secure: true,
17+
} as const;
18+
19+
export const paramDef = {
20+
type: 'object',
21+
properties: {
22+
userId: { type: 'string', format: 'misskey:id' },
23+
points: { type: 'number' },
24+
},
25+
required: ['userId', 'points'],
26+
} as const;
27+
28+
@Injectable()
29+
export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
30+
constructor(
31+
@Inject(DI.usersRepository)
32+
private usersRepository: UsersRepository,
33+
private notificationService: NotificationService,
34+
) {
35+
super(meta, paramDef, async (ps, me) => {
36+
const sender = await this.usersRepository.findOneBy({ id: me.id });
37+
const user = await this.usersRepository.findOneBy({ id: ps.userId });
38+
39+
if (sender == null || user == null) {
40+
throw new Error('user not found');
41+
}
42+
//送れるかどうかチェック
43+
if (sender.getPoints < ps.points) {
44+
throw new Error('not enough points');
45+
}
46+
47+
//ポイントを送る
48+
await this.usersRepository.update(sender.id, {
49+
getPoints: sender.getPoints - ps.points,
50+
});
51+
await this.usersRepository.update(user.id, {
52+
getPoints: user.getPoints + ps.points,
53+
});
54+
55+
this.notificationService.createNotification(user.id, 'sendPoint', {
56+
getPoint: ps.points,
57+
senderId: sender.id,
58+
});
59+
60+
return {};
61+
});
62+
}
63+
}

packages/misskey-js/etc/misskey-js.api.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1865,6 +1865,7 @@ declare namespace entities {
18651865
UsersAchievementsRequest,
18661866
UsersAchievementsResponse,
18671867
UsersUpdateMemoRequest,
1868+
PointSendRequest,
18681869
FetchRssRequest,
18691870
FetchRssResponse,
18701871
FetchExternalResourcesRequest,
@@ -3525,6 +3526,8 @@ type UsersShowResponse = operations['users___show']['responses']['200']['content
35253526
// @public (undocumented)
35263527
type UsersUpdateMemoRequest = operations['users___update-memo']['requestBody']['content']['application/json'];
35273528

3529+
// @public (undocumented)
3530+
type PointSendRequest = operations['point___send']['requestBody']['content']['application/json']
35283531
// Warnings were encountered during analysis:
35293532
//
35303533
// src/entities.ts:50:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts

0 commit comments

Comments
 (0)