@@ -3,10 +3,8 @@ import { createHash, randomBytes, scryptSync } from 'node:crypto';
|
||||
import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
|
||||
import { AuthPrismaService } from '../auth-prisma/auth-prisma.service';
|
||||
import { GiteaService } from '../gitea/gitea.service';
|
||||
import { PrismaService } from '../prisma/prisma.service';
|
||||
import { getUserAvatarUrl } from '../users/users.service';
|
||||
import { AdminRole } from './admin-role';
|
||||
import {
|
||||
CreateAdminSshKeyDto,
|
||||
@@ -21,7 +19,6 @@ import {
|
||||
@Injectable()
|
||||
export class AdminsService {
|
||||
constructor(
|
||||
private readonly authPrisma: AuthPrismaService,
|
||||
private readonly configService: ConfigService,
|
||||
private readonly giteaService: GiteaService,
|
||||
private readonly prisma: PrismaService,
|
||||
@@ -98,27 +95,12 @@ export class AdminsService {
|
||||
this.prisma.admin.count({ where }),
|
||||
]);
|
||||
|
||||
const users = await this.authPrisma.user.findMany({
|
||||
where: { email: { in: admins.map((admin) => admin.email) } },
|
||||
select: {
|
||||
id: true,
|
||||
email: true,
|
||||
profileImageMime: true,
|
||||
},
|
||||
});
|
||||
const userByEmail = new Map(users.map((user) => [user.email, user]));
|
||||
const authBaseUrl = this.configService.get<string>('AUTH_PUBLIC_URL')
|
||||
?? this.configService.get<string>('ATNMY_AUTH_URL')
|
||||
?? this.configService.get<string>('AUTH_EXTERNAL_URL')
|
||||
?? 'https://auth.autonomystudio.net';
|
||||
|
||||
return {
|
||||
admins: admins.map((admin, index) => {
|
||||
const user = userByEmail.get(admin.email);
|
||||
return {
|
||||
...admin,
|
||||
no: total - ((page - 1) * limit + index),
|
||||
avatarUrl: getUserAvatarUrl(user?.id ?? '', user?.profileImageMime, authBaseUrl),
|
||||
avatarUrl: getAdminAvatarUrl(admin.id, this.configService),
|
||||
};
|
||||
}),
|
||||
total,
|
||||
@@ -352,6 +334,13 @@ export class AdminsService {
|
||||
}
|
||||
}
|
||||
|
||||
function getAdminAvatarUrl(adminId: string, configService: ConfigService) {
|
||||
const publicBaseUrl = configService.get<string>('R2_PUBLIC_BASE_URL')?.replace(/\/+$/, '');
|
||||
if (!publicBaseUrl) return null;
|
||||
const prefix = configService.get<string>('R2_PUBLIC_FILE_PREFIX', 'studio-files/public');
|
||||
return `${publicBaseUrl}/${prefix.replace(/^\/+|\/+$/g, '')}/admins/${adminId}/avatar`;
|
||||
}
|
||||
|
||||
const adminSelect = {
|
||||
id: true,
|
||||
email: true,
|
||||
|
||||
Reference in New Issue
Block a user