Files
studio-admin-be/src/admin-auth/admin-auth.controller.ts
T
chyoo 3873ce3169
ci/woodpecker/push/woodpecker Pipeline was successful
track requesters for builds releases deployments and migrations
2026-07-10 10:43:02 +09:00

63 lines
2.0 KiB
TypeScript

import { Body, Controller, Delete, Get, Patch, Post, Put, Req } from '@nestjs/common';
import type { Request } from 'express';
import { AdminAuthService } from './admin-auth.service';
import { Public } from './decorators/admin-auth.decorators';
import { AdminLoginDto, ChangeAdminPasswordDto } from './dto';
@Controller('auth/admin')
export class AdminAuthController {
constructor(private readonly adminAuthService: AdminAuthService) {}
@Get('me')
me(@Req() request: { admin?: { id: string } }) {
return this.adminAuthService.me(request.admin!.id);
}
@Put('avatar')
async updateAvatar(@Req() request: Request & { admin?: { id: string } }) {
const mimeType = String(request.headers['content-type'] ?? '').split(';')[0].trim().toLowerCase();
const imageData = await readRequestBody(request);
return this.adminAuthService.updateAvatar(request.admin!.id, imageData, mimeType);
}
@Delete('avatar')
deleteAvatar(@Req() request: { admin?: { id: string } }) {
return this.adminAuthService.deleteAvatar(request.admin!.id);
}
@Patch('password')
changePassword(
@Req() request: { admin?: { id: string } },
@Body() body: ChangeAdminPasswordDto,
) {
return this.adminAuthService.changePassword(request.admin!.id, body);
}
@Public()
@Post('login')
login(
@Body() body: AdminLoginDto,
@Req() request: { ip?: string; headers: Record<string, string | string[] | undefined> },
) {
const userAgent = request.headers['user-agent'];
return this.adminAuthService.login(body, {
ipAddress: request.ip,
userAgent: Array.isArray(userAgent) ? userAgent.join(', ') : userAgent,
});
}
}
function readRequestBody(request: Request) {
return new Promise<Buffer>((resolve, reject) => {
const chunks: Buffer[] = [];
request.on('data', (chunk: Buffer | string) => {
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
});
request.on('end', () => resolve(Buffer.concat(chunks)));
request.on('error', reject);
});
}