wip
This commit is contained in:
parent
42990fe6b6
commit
106062fa23
|
@ -4,50 +4,21 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
import { ApiError } from '../../error.js';
|
import { ApiError } from '../../error.js';
|
||||||
|
|
||||||
export const meta = {
|
|
||||||
tags: ['flashs'],
|
|
||||||
|
|
||||||
requireCredential: true,
|
|
||||||
|
|
||||||
kind: 'write:flash',
|
|
||||||
|
|
||||||
errors: {
|
|
||||||
noSuchFlash: {
|
|
||||||
message: 'No such flash.',
|
|
||||||
code: 'NO_SUCH_FLASH',
|
|
||||||
id: 'de1623ef-bbb3-4289-a71e-14cfa83d9740',
|
|
||||||
},
|
|
||||||
|
|
||||||
accessDenied: {
|
|
||||||
message: 'Access denied.',
|
|
||||||
code: 'ACCESS_DENIED',
|
|
||||||
id: '1036ad7b-9f92-4fff-89c3-0e50dc941704',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
export const paramDef = {
|
|
||||||
type: 'object',
|
|
||||||
properties: {
|
|
||||||
flashId: { type: 'string', format: 'misskey:id' },
|
|
||||||
},
|
|
||||||
required: ['flashId'],
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-default-export
|
// eslint-disable-next-line import/no-default-export
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export default class extends Endpoint<typeof meta, typeof paramDef> {
|
export default class extends Endpoint<'flash/delete'> {
|
||||||
|
name = 'flash/delete' as const;
|
||||||
constructor(
|
constructor(
|
||||||
@Inject(DI.flashsRepository)
|
@Inject(DI.flashsRepository)
|
||||||
private flashsRepository: FlashsRepository,
|
private flashsRepository: FlashsRepository,
|
||||||
) {
|
) {
|
||||||
super(meta, paramDef, async (ps, me) => {
|
super(async (ps, me) => {
|
||||||
const flash = await this.flashsRepository.findOneBy({ id: ps.flashId });
|
const flash = await this.flashsRepository.findOneBy({ id: ps.flashId });
|
||||||
if (flash == null) {
|
if (flash == null) {
|
||||||
throw new ApiError(meta.errors.noSuchFlash);
|
throw new ApiError(this.meta.errors.noSuchFlash);
|
||||||
}
|
}
|
||||||
if (flash.userId !== me.id) {
|
if (flash.userId !== me.id) {
|
||||||
throw new ApiError(meta.errors.accessDenied);
|
throw new ApiError(this.meta.errors.accessDenied);
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.flashsRepository.delete(flash.id);
|
await this.flashsRepository.delete(flash.id);
|
||||||
|
|
|
@ -4,38 +4,17 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
import { FlashEntityService } from '@/core/entities/FlashEntityService.js';
|
import { FlashEntityService } from '@/core/entities/FlashEntityService.js';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
|
|
||||||
export const meta = {
|
|
||||||
tags: ['flash'],
|
|
||||||
|
|
||||||
requireCredential: false,
|
|
||||||
|
|
||||||
res: {
|
|
||||||
type: 'array',
|
|
||||||
optional: false, nullable: false,
|
|
||||||
items: {
|
|
||||||
type: 'object',
|
|
||||||
optional: false, nullable: false,
|
|
||||||
ref: 'Flash',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
export const paramDef = {
|
|
||||||
type: 'object',
|
|
||||||
properties: {},
|
|
||||||
required: [],
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-default-export
|
// eslint-disable-next-line import/no-default-export
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export default class extends Endpoint<typeof meta, typeof paramDef> {
|
export default class extends Endpoint<'flash/featured'> {
|
||||||
|
name = 'flash/featured' as const;
|
||||||
constructor(
|
constructor(
|
||||||
@Inject(DI.flashsRepository)
|
@Inject(DI.flashsRepository)
|
||||||
private flashsRepository: FlashsRepository,
|
private flashsRepository: FlashsRepository,
|
||||||
|
|
||||||
private flashEntityService: FlashEntityService,
|
private flashEntityService: FlashEntityService,
|
||||||
) {
|
) {
|
||||||
super(meta, paramDef, async (ps, me) => {
|
super(async (ps, me) => {
|
||||||
const query = this.flashsRepository.createQueryBuilder('flash')
|
const query = this.flashsRepository.createQueryBuilder('flash')
|
||||||
.andWhere('flash.likedCount > 0')
|
.andWhere('flash.likedCount > 0')
|
||||||
.orderBy('flash.likedCount', 'DESC');
|
.orderBy('flash.likedCount', 'DESC');
|
||||||
|
|
|
@ -5,47 +5,10 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
import { ApiError } from '../../error.js';
|
import { ApiError } from '../../error.js';
|
||||||
|
|
||||||
export const meta = {
|
|
||||||
tags: ['flash'],
|
|
||||||
|
|
||||||
requireCredential: true,
|
|
||||||
|
|
||||||
prohibitMoved: true,
|
|
||||||
|
|
||||||
kind: 'write:flash-likes',
|
|
||||||
|
|
||||||
errors: {
|
|
||||||
noSuchFlash: {
|
|
||||||
message: 'No such flash.',
|
|
||||||
code: 'NO_SUCH_FLASH',
|
|
||||||
id: 'c07c1491-9161-4c5c-9d75-01906f911f73',
|
|
||||||
},
|
|
||||||
|
|
||||||
yourFlash: {
|
|
||||||
message: 'You cannot like your flash.',
|
|
||||||
code: 'YOUR_FLASH',
|
|
||||||
id: '3fd8a0e7-5955-4ba9-85bb-bf3e0c30e13b',
|
|
||||||
},
|
|
||||||
|
|
||||||
alreadyLiked: {
|
|
||||||
message: 'The flash has already been liked.',
|
|
||||||
code: 'ALREADY_LIKED',
|
|
||||||
id: '010065cf-ad43-40df-8067-abff9f4686e3',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
export const paramDef = {
|
|
||||||
type: 'object',
|
|
||||||
properties: {
|
|
||||||
flashId: { type: 'string', format: 'misskey:id' },
|
|
||||||
},
|
|
||||||
required: ['flashId'],
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-default-export
|
// eslint-disable-next-line import/no-default-export
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export default class extends Endpoint<typeof meta, typeof paramDef> {
|
export default class extends Endpoint<'flash/like'> {
|
||||||
|
name = 'flash/like' as const;
|
||||||
constructor(
|
constructor(
|
||||||
@Inject(DI.flashsRepository)
|
@Inject(DI.flashsRepository)
|
||||||
private flashsRepository: FlashsRepository,
|
private flashsRepository: FlashsRepository,
|
||||||
|
@ -55,14 +18,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
||||||
|
|
||||||
private idService: IdService,
|
private idService: IdService,
|
||||||
) {
|
) {
|
||||||
super(meta, paramDef, async (ps, me) => {
|
super(async (ps, me) => {
|
||||||
const flash = await this.flashsRepository.findOneBy({ id: ps.flashId });
|
const flash = await this.flashsRepository.findOneBy({ id: ps.flashId });
|
||||||
if (flash == null) {
|
if (flash == null) {
|
||||||
throw new ApiError(meta.errors.noSuchFlash);
|
throw new ApiError(this.meta.errors.noSuchFlash);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flash.userId === me.id) {
|
if (flash.userId === me.id) {
|
||||||
throw new ApiError(meta.errors.yourFlash);
|
throw new ApiError(this.meta.errors.yourFlash);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if already liked
|
// if already liked
|
||||||
|
@ -72,7 +35,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (exist != null) {
|
if (exist != null) {
|
||||||
throw new ApiError(meta.errors.alreadyLiked);
|
throw new ApiError(this.meta.errors.alreadyLiked);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create like
|
// Create like
|
||||||
|
|
|
@ -4438,9 +4438,11 @@ export const endpoints = {
|
||||||
title: { type: 'string' },
|
title: { type: 'string' },
|
||||||
summary: { type: 'string' },
|
summary: { type: 'string' },
|
||||||
script: { type: 'string' },
|
script: { type: 'string' },
|
||||||
permissions: { type: 'array', items: {
|
permissions: {
|
||||||
|
type: 'array', items: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
} },
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
required: ['title', 'summary', 'script', 'permissions'],
|
required: ['title', 'summary', 'script', 'permissions'],
|
||||||
},
|
},
|
||||||
|
@ -4449,6 +4451,92 @@ export const endpoints = {
|
||||||
},
|
},
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
|
'flash/delete': {
|
||||||
|
tags: ['flashs'],
|
||||||
|
|
||||||
|
requireCredential: true,
|
||||||
|
|
||||||
|
kind: 'write:flash',
|
||||||
|
|
||||||
|
errors: {
|
||||||
|
noSuchFlash: {
|
||||||
|
message: 'No such flash.',
|
||||||
|
code: 'NO_SUCH_FLASH',
|
||||||
|
id: 'de1623ef-bbb3-4289-a71e-14cfa83d9740',
|
||||||
|
},
|
||||||
|
|
||||||
|
accessDenied: {
|
||||||
|
message: 'Access denied.',
|
||||||
|
code: 'ACCESS_DENIED',
|
||||||
|
id: '1036ad7b-9f92-4fff-89c3-0e50dc941704',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
defines: [{
|
||||||
|
req: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
flashId: { type: 'string', format: 'misskey:id' },
|
||||||
|
},
|
||||||
|
required: ['flashId'],
|
||||||
|
},
|
||||||
|
res: undefined,
|
||||||
|
}],
|
||||||
|
},
|
||||||
|
'flash/featured': {
|
||||||
|
tags: ['flash'],
|
||||||
|
|
||||||
|
requireCredential: false,
|
||||||
|
|
||||||
|
defines: [{
|
||||||
|
req: undefined,
|
||||||
|
res: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
$ref: 'https://misskey-hub.net/api/schemas/Flash',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
},
|
||||||
|
'flash/like': {
|
||||||
|
tags: ['flash'],
|
||||||
|
|
||||||
|
requireCredential: true,
|
||||||
|
|
||||||
|
prohibitMoved: true,
|
||||||
|
|
||||||
|
kind: 'write:flash-likes',
|
||||||
|
|
||||||
|
errors: {
|
||||||
|
noSuchFlash: {
|
||||||
|
message: 'No such flash.',
|
||||||
|
code: 'NO_SUCH_FLASH',
|
||||||
|
id: 'c07c1491-9161-4c5c-9d75-01906f911f73',
|
||||||
|
},
|
||||||
|
|
||||||
|
yourFlash: {
|
||||||
|
message: 'You cannot like your flash.',
|
||||||
|
code: 'YOUR_FLASH',
|
||||||
|
id: '3fd8a0e7-5955-4ba9-85bb-bf3e0c30e13b',
|
||||||
|
},
|
||||||
|
|
||||||
|
alreadyLiked: {
|
||||||
|
message: 'The flash has already been liked.',
|
||||||
|
code: 'ALREADY_LIKED',
|
||||||
|
id: '010065cf-ad43-40df-8067-abff9f4686e3',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
defines: [{
|
||||||
|
req: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
flashId: { type: 'string', format: 'misskey:id' },
|
||||||
|
},
|
||||||
|
required: ['flashId'],
|
||||||
|
},
|
||||||
|
res: undefined,
|
||||||
|
}]
|
||||||
|
},
|
||||||
//#endregion
|
//#endregion
|
||||||
} as const satisfies { [x: string]: IEndpointMeta; };
|
} as const satisfies { [x: string]: IEndpointMeta; };
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue