summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-03-20 20:12:38 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-03-20 20:12:38 +0900
commit54630edb0f8cf91480e19f4e8e56c05158bc3a8f (patch)
treee891f085a09ff3dcc1e54103222920f7544f6b0b /packages/backend/src
parentfix(users/show): ユーザーが見つからなかった場合に404ステー... (diff)
downloadsharkey-54630edb0f8cf91480e19f4e8e56c05158bc3a8f.tar.gz
sharkey-54630edb0f8cf91480e19f4e8e56c05158bc3a8f.tar.bz2
sharkey-54630edb0f8cf91480e19f4e8e56c05158bc3a8f.zip
enhance: 使われてないアンテナは自動停止されるように
Resolve #9373
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/core/AntennaService.ts6
-rw-r--r--packages/backend/src/core/entities/AntennaEntityService.ts1
-rw-r--r--packages/backend/src/models/entities/Antenna.ts10
-rw-r--r--packages/backend/src/models/json-schema/antenna.ts4
-rw-r--r--packages/backend/src/queue/processors/CleanProcessorService.ts15
-rw-r--r--packages/backend/src/server/api/endpoints/antennas/create.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/antennas/notes.ts4
7 files changed, 41 insertions, 4 deletions
diff --git a/packages/backend/src/core/AntennaService.ts b/packages/backend/src/core/AntennaService.ts
index 35fbb53e81..aaa26a8321 100644
--- a/packages/backend/src/core/AntennaService.ts
+++ b/packages/backend/src/core/AntennaService.ts
@@ -71,12 +71,14 @@ export class AntennaService implements OnApplicationShutdown {
this.antennas.push({
...body,
createdAt: new Date(body.createdAt),
+ lastUsedAt: new Date(body.lastUsedAt),
});
break;
case 'antennaUpdated':
this.antennas[this.antennas.findIndex(a => a.id === body.id)] = {
...body,
createdAt: new Date(body.createdAt),
+ lastUsedAt: new Date(body.lastUsedAt),
};
break;
case 'antennaDeleted':
@@ -217,7 +219,9 @@ export class AntennaService implements OnApplicationShutdown {
@bindThis
public async getAntennas() {
if (!this.antennasFetched) {
- this.antennas = await this.antennasRepository.find();
+ this.antennas = await this.antennasRepository.findBy({
+ isActive: true,
+ });
this.antennasFetched = true;
}
diff --git a/packages/backend/src/core/entities/AntennaEntityService.ts b/packages/backend/src/core/entities/AntennaEntityService.ts
index 89137c0ec0..e02daefd64 100644
--- a/packages/backend/src/core/entities/AntennaEntityService.ts
+++ b/packages/backend/src/core/entities/AntennaEntityService.ts
@@ -37,6 +37,7 @@ export class AntennaEntityService {
notify: antenna.notify,
withReplies: antenna.withReplies,
withFile: antenna.withFile,
+ isActive: antenna.isActive,
hasUnreadNote,
};
}
diff --git a/packages/backend/src/models/entities/Antenna.ts b/packages/backend/src/models/entities/Antenna.ts
index 5b2164ef17..e63e7f2c72 100644
--- a/packages/backend/src/models/entities/Antenna.ts
+++ b/packages/backend/src/models/entities/Antenna.ts
@@ -14,6 +14,10 @@ export class Antenna {
public createdAt: Date;
@Index()
+ @Column('timestamp with time zone')
+ public lastUsedAt: Date;
+
+ @Index()
@Column({
...id(),
comment: 'The owner ID.',
@@ -83,4 +87,10 @@ export class Antenna {
@Column('boolean')
public notify: boolean;
+
+ @Index()
+ @Column('boolean', {
+ default: true,
+ })
+ public isActive: boolean;
}
diff --git a/packages/backend/src/models/json-schema/antenna.ts b/packages/backend/src/models/json-schema/antenna.ts
index f0994e48f7..4483510610 100644
--- a/packages/backend/src/models/json-schema/antenna.ts
+++ b/packages/backend/src/models/json-schema/antenna.ts
@@ -75,6 +75,10 @@ export const packedAntennaSchema = {
type: 'boolean',
optional: false, nullable: false,
},
+ isActive: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
hasUnreadNote: {
type: 'boolean',
optional: false, nullable: false,
diff --git a/packages/backend/src/queue/processors/CleanProcessorService.ts b/packages/backend/src/queue/processors/CleanProcessorService.ts
index 7fd2cde9c0..9534454fd7 100644
--- a/packages/backend/src/queue/processors/CleanProcessorService.ts
+++ b/packages/backend/src/queue/processors/CleanProcessorService.ts
@@ -1,7 +1,7 @@
import { Inject, Injectable } from '@nestjs/common';
import { In, LessThan } from 'typeorm';
import { DI } from '@/di-symbols.js';
-import type { AntennaNotesRepository, MutedNotesRepository, NotificationsRepository, RoleAssignmentsRepository, UserIpsRepository } from '@/models/index.js';
+import type { AntennaNotesRepository, AntennasRepository, MutedNotesRepository, NotificationsRepository, RoleAssignmentsRepository, UserIpsRepository } from '@/models/index.js';
import type { Config } from '@/config.js';
import type Logger from '@/logger.js';
import { bindThis } from '@/decorators.js';
@@ -26,6 +26,9 @@ export class CleanProcessorService {
@Inject(DI.mutedNotesRepository)
private mutedNotesRepository: MutedNotesRepository,
+ @Inject(DI.antennasRepository)
+ private antennasRepository: AntennasRepository,
+
@Inject(DI.antennaNotesRepository)
private antennaNotesRepository: AntennaNotesRepository,
@@ -55,8 +58,16 @@ export class CleanProcessorService {
reason: 'word',
});
- this.antennaNotesRepository.delete({
+ this.mutedNotesRepository.delete({
id: LessThan(this.idService.genId(new Date(Date.now() - (1000 * 60 * 60 * 24 * 90)))),
+ reason: 'word',
+ });
+
+ // 7日以上使われてないアンテナを停止
+ this.antennasRepository.update({
+ lastUsedAt: LessThan(new Date(Date.now() - (1000 * 60 * 60 * 24 * 7))),
+ }, {
+ isActive: false,
});
const expiredRoleAssignments = await this.roleAssignmentsRepository.createQueryBuilder('assign')
diff --git a/packages/backend/src/server/api/endpoints/antennas/create.ts b/packages/backend/src/server/api/endpoints/antennas/create.ts
index b57906a688..d147ddb7f1 100644
--- a/packages/backend/src/server/api/endpoints/antennas/create.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/create.ts
@@ -103,9 +103,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
}
}
+ const now = new Date();
+
const antenna = await this.antennasRepository.insert({
id: this.idService.genId(),
- createdAt: new Date(),
+ createdAt: now,
+ lastUsedAt: now,
userId: me.id,
name: ps.name,
src: ps.src,
diff --git a/packages/backend/src/server/api/endpoints/antennas/notes.ts b/packages/backend/src/server/api/endpoints/antennas/notes.ts
index fbb5acf617..039ba1115a 100644
--- a/packages/backend/src/server/api/endpoints/antennas/notes.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/notes.ts
@@ -101,6 +101,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
this.noteReadService.read(me.id, notes);
}
+ this.antennasRepository.update(antenna.id, {
+ lastUsedAt: new Date(),
+ });
+
return await this.noteEntityService.packMany(notes, me);
});
}