Add production-ready SuperAdmin API features for tenants, SMS, servers, and plugins.

Includes mobile auth, get_user/get_version, SMS wallet parity endpoints, appearance backfill, and related Prisma migrations.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-30 18:19:53 +03:30
co-authored by Cursor
parent ddf36f8470
commit a6b3457779
54 changed files with 3770 additions and 156 deletions
+35 -10
View File
@@ -33,27 +33,52 @@ export class AuditService {
}
findAll(limit = 50) {
return this.prisma.auditLog.findMany({
take: Math.min(limit, 200),
orderBy: { createdAt: 'desc' },
include: {
user: { select: { id: true, name: true, email: true } },
tenant: { select: { id: true, slug: true, nameFa: true } },
},
});
return this.prisma.auditLog
.findMany({
take: Math.min(limit, 200),
orderBy: { createdAt: 'desc' },
include: {
user: {
select: { id: true, firstName: true, lastName: true, mobile: true },
},
tenant: { select: { id: true, slug: true, nameFa: true } },
},
})
.then((rows) =>
rows.map((row) => ({
...row,
user: row.user
? {
...row.user,
name: `${row.user.firstName} ${row.user.lastName}`.trim(),
}
: null,
})),
);
}
async findOne(id: string) {
const row = await this.prisma.auditLog.findUnique({
where: { id },
include: {
user: { select: { id: true, name: true, email: true } },
user: {
select: { id: true, firstName: true, lastName: true, mobile: true },
},
tenant: { select: { id: true, slug: true, nameFa: true } },
},
});
if (!row) {
throw new NotFoundException('لاگ یافت نشد');
}
return row;
return {
...row,
user: row.user
? {
...row.user,
name: `${row.user.firstName} ${row.user.lastName}`.trim(),
}
: null,
};
}
}