Picsur/backend/src/routes/api/user/user-manage.controller.ts

111 lines
3 KiB
TypeScript
Raw Normal View History

2022-09-06 14:32:16 +00:00
import { Body, Controller, Get, Logger, Post } from '@nestjs/common';
2022-03-19 20:34:33 +00:00
import {
2022-03-24 20:28:52 +00:00
GetSpecialUsersResponse,
2022-03-19 21:04:55 +00:00
UserCreateRequest,
UserCreateResponse,
2022-03-19 20:34:33 +00:00
UserDeleteRequest,
UserDeleteResponse,
UserInfoRequest,
UserInfoResponse,
UserListRequest,
2022-03-19 20:34:33 +00:00
UserListResponse,
2022-03-23 16:17:39 +00:00
UserUpdateRequest,
2022-09-06 14:32:16 +00:00
UserUpdateResponse,
2022-04-18 12:09:34 +00:00
} from 'picsur-shared/dist/dto/api/user-manage.dto';
2022-08-26 18:40:16 +00:00
import { ThrowIfFailed } from 'picsur-shared/dist/types';
2022-09-02 15:18:22 +00:00
import { UserDbService } from '../../../collections/user-db/user-db.service';
2022-03-19 20:34:33 +00:00
import { RequiredPermissions } from '../../../decorators/permissions.decorator';
2022-04-04 08:36:59 +00:00
import { Returns } from '../../../decorators/returns.decorator';
2022-04-18 12:34:53 +00:00
import { Permission } from '../../../models/constants/permissions.const';
2022-04-02 21:25:49 +00:00
import {
ImmutableUsersList,
LockedLoginUsersList,
2022-09-06 14:32:16 +00:00
UndeletableUsersList,
2022-04-18 12:34:53 +00:00
} from '../../../models/constants/special-users.const';
2022-04-02 21:25:49 +00:00
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer';
2022-03-19 20:34:33 +00:00
@Controller('api/user')
@RequiredPermissions(Permission.UserAdmin)
export class UserAdminController {
2022-09-02 15:18:22 +00:00
private readonly logger = new Logger(UserAdminController.name);
2022-03-19 20:34:33 +00:00
2022-09-02 15:18:22 +00:00
constructor(private readonly usersService: UserDbService) {}
2022-03-19 20:34:33 +00:00
2022-03-19 21:04:55 +00:00
@Post('list')
2022-04-04 08:36:59 +00:00
@Returns(UserListResponse)
async listUsersPaged(
@Body() body: UserListRequest,
): Promise<UserListResponse> {
2022-08-26 18:40:16 +00:00
const found = ThrowIfFailed(
await this.usersService.findMany(body.count, body.page),
);
2022-03-19 20:34:33 +00:00
2022-06-27 13:23:06 +00:00
found.results = found.results.map(EUserBackend2EUser);
return found;
2022-03-19 20:34:33 +00:00
}
2022-03-19 21:04:55 +00:00
@Post('create')
2022-04-04 08:36:59 +00:00
@Returns(UserCreateResponse)
2022-03-19 21:04:55 +00:00
async register(
@Body() create: UserCreateRequest,
): Promise<UserCreateResponse> {
2022-08-26 18:40:16 +00:00
const user = ThrowIfFailed(
await this.usersService.create(
create.username,
create.password,
create.roles,
),
2022-03-19 21:04:55 +00:00
);
2022-04-02 21:25:49 +00:00
return EUserBackend2EUser(user);
2022-03-19 21:04:55 +00:00
}
2022-03-19 20:34:33 +00:00
@Post('delete')
2022-04-04 08:36:59 +00:00
@Returns(UserDeleteResponse)
2022-04-02 21:25:49 +00:00
async delete(@Body() body: UserDeleteRequest): Promise<UserDeleteResponse> {
2022-08-26 18:40:16 +00:00
const user = ThrowIfFailed(await this.usersService.delete(body.id));
2022-03-19 20:34:33 +00:00
2022-04-02 21:25:49 +00:00
return EUserBackend2EUser(user);
2022-03-19 20:34:33 +00:00
}
2022-03-19 21:04:55 +00:00
@Post('info')
2022-04-04 08:36:59 +00:00
@Returns(UserInfoResponse)
2022-03-19 21:04:55 +00:00
async getUser(@Body() body: UserInfoRequest): Promise<UserInfoResponse> {
2022-08-26 18:40:16 +00:00
const user = ThrowIfFailed(await this.usersService.findOne(body.id));
2022-03-19 21:04:55 +00:00
2022-04-02 21:25:49 +00:00
return EUserBackend2EUser(user);
2022-03-19 21:04:55 +00:00
}
2022-03-23 16:17:39 +00:00
@Post('update')
2022-04-04 08:36:59 +00:00
@Returns(UserUpdateResponse)
2022-03-19 20:34:33 +00:00
async setPermissions(
2022-03-23 16:17:39 +00:00
@Body() body: UserUpdateRequest,
): Promise<UserUpdateResponse> {
2022-08-26 18:40:16 +00:00
let user = ThrowIfFailed(await this.usersService.findOne(body.id));
2022-03-23 16:17:39 +00:00
if (body.roles) {
2022-08-26 18:40:16 +00:00
user = ThrowIfFailed(
await this.usersService.setRoles(body.id, body.roles),
);
2022-03-23 16:17:39 +00:00
}
2022-03-19 20:34:33 +00:00
2022-03-23 16:17:39 +00:00
if (body.password) {
2022-08-26 18:40:16 +00:00
user = ThrowIfFailed(
await this.usersService.updatePassword(body.id, body.password),
);
2022-03-19 20:34:33 +00:00
}
2022-04-02 21:25:49 +00:00
return EUserBackend2EUser(user);
2022-03-19 20:34:33 +00:00
}
2022-03-24 20:28:52 +00:00
@Get('special')
2022-04-04 08:36:59 +00:00
@Returns(GetSpecialUsersResponse)
2022-03-24 20:28:52 +00:00
async getSpecial(): Promise<GetSpecialUsersResponse> {
2022-04-04 08:36:59 +00:00
return {
2022-03-24 20:28:52 +00:00
ImmutableUsersList,
LockedLoginUsersList,
UndeletableUsersList,
};
}
2022-03-19 20:34:33 +00:00
}