forked from wangziqi/gongxue-base
111 lines
1.9 KiB
TypeScript
111 lines
1.9 KiB
TypeScript
import { IsDateString, IsIn, IsInt, IsString, IsNumber, IsOptional, Matches, Min } from 'class-validator';
|
|
import { PartialType } from '@nestjs/mapped-types';
|
|
import { Type } from 'class-transformer';
|
|
|
|
export class CreateRoomExpenseDto {
|
|
@IsInt()
|
|
roomId: number;
|
|
|
|
@IsString()
|
|
expenseType: string;
|
|
|
|
@IsNumber({ maxDecimalPlaces: 2 })
|
|
@Min(0.01)
|
|
amount: number;
|
|
|
|
@IsDateString()
|
|
periodStart: string;
|
|
|
|
@IsDateString()
|
|
periodEnd: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
description?: string;
|
|
}
|
|
|
|
export class CreatePersonalExpenseDto {
|
|
@IsInt()
|
|
studentId: number;
|
|
|
|
@IsOptional()
|
|
@IsInt()
|
|
roomId?: number;
|
|
|
|
@IsString()
|
|
expenseType: string;
|
|
|
|
@IsNumber({ maxDecimalPlaces: 2 })
|
|
@Min(0.01)
|
|
amount: number;
|
|
|
|
@IsDateString()
|
|
expenseDate: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
description?: string;
|
|
}
|
|
|
|
|
|
export class UpdateRoomExpenseDto extends PartialType(CreateRoomExpenseDto) {}
|
|
|
|
export class UpdatePersonalExpenseDto extends PartialType(CreatePersonalExpenseDto) {}
|
|
|
|
export class QueryRoomExpenseDto {
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
roomId?: number;
|
|
|
|
@IsOptional()
|
|
@IsDateString()
|
|
periodStart?: string;
|
|
|
|
@IsOptional()
|
|
@IsDateString()
|
|
periodEnd?: string;
|
|
}
|
|
|
|
export class QueryPersonalExpenseDto {
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
studentId?: number;
|
|
}
|
|
|
|
export class BatchRoomExpenseDto {
|
|
@IsString()
|
|
periodStart: string;
|
|
|
|
@IsString()
|
|
periodEnd: string;
|
|
|
|
expenses: { roomId: number; expenseType: string; amount: number; description?: string }[];
|
|
}
|
|
|
|
|
|
export class CreateStudentUtilityBillDto {
|
|
@IsInt()
|
|
studentId: number;
|
|
|
|
@IsIn(['water', 'electricity'])
|
|
expenseType: 'water' | 'electricity';
|
|
|
|
@IsNumber({ maxDecimalPlaces: 2 })
|
|
@Min(0.01)
|
|
amount: number;
|
|
|
|
@IsString()
|
|
@Matches(/^\d{4}-\d{2}-\d{2}$/)
|
|
periodStart: string;
|
|
|
|
@IsString()
|
|
@Matches(/^\d{4}-\d{2}-\d{2}$/)
|
|
periodEnd: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
description?: string;
|
|
}
|