mirror of
https://github.com/n08i40k/schedule-parser-next.git
synced 2025-12-06 09:47:46 +03:00
Много
This commit is contained in:
@@ -1,19 +1,25 @@
|
||||
import { ApiProperty, PickType } from "@nestjs/swagger";
|
||||
import { ApiProperty, IntersectionType, PickType } from "@nestjs/swagger";
|
||||
import { UserDto } from "./user.dto";
|
||||
import { IsString } from "class-validator";
|
||||
|
||||
export class SignInDto extends PickType(UserDto, ["username"]) {
|
||||
// SignIn
|
||||
export class SignInReqDto extends PickType(UserDto, ["username"]) {
|
||||
@ApiProperty({ description: "Пароль в исходном виде" })
|
||||
@IsString()
|
||||
password: string;
|
||||
}
|
||||
|
||||
export class SignInResultDto extends PickType(UserDto, ["id", "accessToken"]) {}
|
||||
export class SignInResDto extends PickType(UserDto, ["id", "accessToken"]) {}
|
||||
|
||||
export class SignUpDto extends SignInDto {}
|
||||
// SignUp
|
||||
export class SignUpReqDto extends IntersectionType(
|
||||
SignInReqDto,
|
||||
PickType(UserDto, ["role", "group"]),
|
||||
) {}
|
||||
|
||||
export class SignUpResultDto extends SignInResultDto {}
|
||||
export class SignUpResDto extends SignInResDto {}
|
||||
|
||||
// Update token
|
||||
export class UpdateTokenDto extends PickType(UserDto, ["accessToken"]) {}
|
||||
|
||||
export class UpdateTokenResultDto extends UpdateTokenDto {}
|
||||
|
||||
@@ -8,8 +8,8 @@ import {
|
||||
IsString,
|
||||
ValidateNested,
|
||||
} from "class-validator";
|
||||
import { ApiProperty } from "@nestjs/swagger";
|
||||
import { Type } from "class-transformer";
|
||||
import { ApiProperty, OmitType, PickType } from "@nestjs/swagger";
|
||||
import { Transform, Type } from "class-transformer";
|
||||
|
||||
export class LessonTimeDto {
|
||||
@ApiProperty({
|
||||
@@ -49,8 +49,7 @@ export class LessonTimeDto {
|
||||
}
|
||||
|
||||
export enum LessonTypeDto {
|
||||
NONE = 0,
|
||||
DEFAULT,
|
||||
DEFAULT = 0,
|
||||
CUSTOM,
|
||||
}
|
||||
|
||||
@@ -138,8 +137,9 @@ export class DayDto {
|
||||
@ApiProperty({ example: [], description: "Занятия" })
|
||||
@IsArray()
|
||||
@ValidateNested({ each: true })
|
||||
@IsOptional()
|
||||
@Type(() => LessonDto)
|
||||
lessons: Array<LessonDto>;
|
||||
lessons: Array<LessonDto | null>;
|
||||
|
||||
constructor(name: string) {
|
||||
this.name = name;
|
||||
@@ -160,7 +160,7 @@ export class DayDto {
|
||||
const lessonIdx = Number.parseInt(lessonRawIdx);
|
||||
|
||||
const lesson = this.lessons[lessonIdx];
|
||||
if (lesson.type === LessonTypeDto.NONE) continue;
|
||||
if (lesson === null) continue;
|
||||
|
||||
this.nonNullIndices.push(lessonIdx);
|
||||
|
||||
@@ -183,8 +183,9 @@ export class GroupDto {
|
||||
@ApiProperty({ example: [], description: "Дни недели" })
|
||||
@IsArray()
|
||||
@ValidateNested({ each: true })
|
||||
@IsOptional()
|
||||
@Type(() => DayDto)
|
||||
days: Array<DayDto>;
|
||||
days: Array<DayDto | null>;
|
||||
|
||||
constructor(name: string) {
|
||||
this.name = name;
|
||||
@@ -208,9 +209,48 @@ export class ScheduleDto {
|
||||
@IsString()
|
||||
etag: string;
|
||||
|
||||
@ApiProperty({ description: "Расписание групп" })
|
||||
@IsObject()
|
||||
@IsOptional()
|
||||
groups: any;
|
||||
|
||||
@ApiProperty({
|
||||
example: { "ИС-214/23": [5, 6] },
|
||||
description: "Обновлённые дни с последнего изменения расписания",
|
||||
})
|
||||
@IsObject()
|
||||
@Type(() => Object)
|
||||
@Transform(({ value }) => {
|
||||
const object = {};
|
||||
|
||||
for (const key in value) {
|
||||
object[key] = value[key];
|
||||
}
|
||||
|
||||
return object;
|
||||
})
|
||||
@Type(() => Object)
|
||||
lastChangedDays: Array<Array<number>>;
|
||||
}
|
||||
|
||||
export class GroupScheduleRequestDto extends PickType(GroupDto, ["name"]) {}
|
||||
|
||||
export class ScheduleGroupsDto {
|
||||
@ApiProperty({
|
||||
example: ["ИС-214/23", "ИС-213/23"],
|
||||
description: "Список названий всех групп в текущем расписании",
|
||||
})
|
||||
@IsArray()
|
||||
names: Array<string>;
|
||||
}
|
||||
|
||||
export class GroupScheduleDto extends OmitType(ScheduleDto, [
|
||||
"groups",
|
||||
"lastChangedDays",
|
||||
]) {
|
||||
@ApiProperty({ description: "Расписание группы" })
|
||||
@IsObject()
|
||||
data: GroupDto;
|
||||
group: GroupDto;
|
||||
|
||||
@ApiProperty({
|
||||
example: [5, 6],
|
||||
|
||||
@@ -1,36 +1,79 @@
|
||||
import { ApiProperty, OmitType } from "@nestjs/swagger";
|
||||
import {
|
||||
IsEnum,
|
||||
IsJWT,
|
||||
IsMongoId,
|
||||
IsString,
|
||||
MaxLength,
|
||||
MinLength,
|
||||
} from "class-validator";
|
||||
import { Expose, plainToClass } from "class-transformer";
|
||||
|
||||
export enum UserRoleDto {
|
||||
STUDENT = "STUDENT",
|
||||
TEACHER = "TEACHER",
|
||||
ADMIN = "ADMIN",
|
||||
}
|
||||
|
||||
export class UserDto {
|
||||
@ApiProperty({ description: "Идентификатор (ObjectId)" })
|
||||
@IsMongoId()
|
||||
@Expose()
|
||||
id: string;
|
||||
|
||||
@ApiProperty({ example: "n08i40k", description: "Имя" })
|
||||
@IsString()
|
||||
@MinLength(4)
|
||||
@MaxLength(10)
|
||||
@Expose()
|
||||
username: string;
|
||||
@ApiProperty({ description: "Соль пароля" })
|
||||
|
||||
@ApiProperty({
|
||||
example: "$2b$08$34xwFv1WVJpvpVi3tZZuv.",
|
||||
description: "Соль пароля",
|
||||
})
|
||||
@IsString()
|
||||
@Expose()
|
||||
salt: string;
|
||||
@ApiProperty({ description: "Хеш пароля" })
|
||||
|
||||
@ApiProperty({
|
||||
example: "$2b$08$34xwFv1WVJpvpVi3tZZuv...",
|
||||
description: "Хеш пароля",
|
||||
})
|
||||
@IsString()
|
||||
@Expose()
|
||||
password: string;
|
||||
@ApiProperty({ description: "Последний токен доступа" })
|
||||
|
||||
@ApiProperty({
|
||||
example: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||||
description: "Последний токен доступа",
|
||||
})
|
||||
@IsJWT()
|
||||
@Expose()
|
||||
accessToken: string;
|
||||
|
||||
@ApiProperty({ example: "ИС-214/23", description: "Группа пользователя" })
|
||||
@IsString()
|
||||
@Expose()
|
||||
group: string;
|
||||
|
||||
@ApiProperty({
|
||||
example: UserRoleDto.STUDENT,
|
||||
description: "Роль пользователя",
|
||||
})
|
||||
@IsEnum(UserRoleDto)
|
||||
@Expose()
|
||||
role: UserRoleDto;
|
||||
}
|
||||
|
||||
// TODO: Доделать пользователей
|
||||
// noinspection JSUnusedGlobalSymbols
|
||||
export class ClientUserDto extends OmitType(UserDto, [
|
||||
"password",
|
||||
"salt",
|
||||
"accessToken",
|
||||
]) {}
|
||||
]) {
|
||||
static fromUserDto(userDto: UserDto): ClientUserDto {
|
||||
return plainToClass(ClientUserDto, userDto, {
|
||||
excludeExtraneousValues: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user