diff --git a/src/app.ts b/src/app.ts index 901603c4..62bc614e 100644 --- a/src/app.ts +++ b/src/app.ts @@ -41,6 +41,7 @@ import { adminSetRelaysController, deleteZapSplitsController, getDittoDomainController, + getDittoDomainsController, getZapSplitsController, nameRequestController, nameRequestsController, @@ -282,6 +283,7 @@ app.post('/api/v1/ditto/zap', requireSigner, zapController); app.get('/api/v1/ditto/statuses/:id{[0-9a-f]{64}}/zapped_by', zappedByController); app.get('/api/v1/ditto/domains/:domain', getDittoDomainController); +app.get('/api/v1/ditto/domains', getDittoDomainsController); app.post('/api/v1/reports', requireSigner, reportController); app.get('/api/v1/admin/reports', requireSigner, requireRole('admin'), adminReportsController); diff --git a/src/controllers/api/ditto.ts b/src/controllers/api/ditto.ts index dd4015ab..234685a8 100644 --- a/src/controllers/api/ditto.ts +++ b/src/controllers/api/ditto.ts @@ -7,7 +7,7 @@ import { addTag } from '@/utils/tags.ts'; import { AdminSigner } from '@/signers/AdminSigner.ts'; import { booleanParamSchema, percentageSchema } from '@/schema.ts'; import { Conf } from '@/config.ts'; -import { createEvent, paginated, parseBody } from '@/utils/api.ts'; +import { createEvent, paginated, paginatedList, parseBody } from '@/utils/api.ts'; import { deleteTag } from '@/utils/tags.ts'; import { DittoDB } from '@/db/DittoDB.ts'; import { DittoEvent } from '@/interfaces/DittoEvent.ts'; @@ -302,3 +302,16 @@ export const getDittoDomainController: AppController = async (c) => { return c.json(result); }; + +export const getDittoDomainsController: AppController = async (c) => { + const { kysely } = await DittoDB.getInstance(); + const params = c.get('listPagination'); + + const results = await kysely.selectFrom('ditto_domains') + .selectAll() + .orderBy('total_users', 'desc') + .limit(params.limit) + .execute(); + + return paginatedList(c, params, results); +};