Moved dto to separate package

This commit is contained in:
Mutzi 2022-08-25 13:39:58 +02:00
parent cb84e73310
commit 197373c9df
18 changed files with 169 additions and 42 deletions

25
dto/.eslintrc.js Normal file
View File

@ -0,0 +1,25 @@
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: 'tsconfig.json',
tsconfigRootDir: __dirname,
sourceType: 'module',
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
root: true,
env: {
node: true,
jest: true,
},
ignorePatterns: ['.eslintrc.js'],
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
},
};

7
dto/.prettierrc Normal file
View File

@ -0,0 +1,7 @@
{
"tabWidth": 4,
"useTabs": true,
"singleQuote": true,
"trailingComma": "none",
"endOfLine": "lf"
}

14
dto/package.json Normal file
View File

@ -0,0 +1,14 @@
{
"name": "dto",
"private": true,
"version": "1.0.0",
"main": "src/index.ts",
"dependencies": {
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2"
},
"scripts": {
"lint": "eslint \"src/**/*.ts\" && tsc --no-emit",
"lint-fix": "eslint \"src/**/*.ts\" --fix"
}
}

View File

@ -1,10 +0,0 @@
import { BaseRequest } from './base';
export interface AuthSignUpRequest extends BaseRequest {
username: string;
password: string;
}
export interface AuthLoginRequest extends AuthSignUpRequest {
otp?: string;
}

View File

@ -1,2 +0,0 @@
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface BaseRequest {}

View File

@ -1,12 +0,0 @@
import { BaseRequest } from './base';
export type CreateFileRequest = CreateFolderRequest;
export interface CreateFolderRequest extends BaseRequest {
parent: number;
name: string;
}
export interface DeleteRequest extends BaseRequest {
node: number;
}

View File

@ -1,12 +0,0 @@
export interface BaseResponse {
statusCode: number;
}
export interface SuccessResponse extends BaseResponse {
statusCode: 200;
}
export interface ErrorResponse extends BaseResponse {
statusCode: 400 | 401 | 403;
message?: string;
}

14
dto/src/requests/auth.ts Normal file
View File

@ -0,0 +1,14 @@
import { BaseRequest } from './base';
import { IsEmail, IsNotEmpty } from 'class-validator';
export class AuthSignUpRequest extends BaseRequest {
@IsEmail()
username: string;
@IsNotEmpty()
password: string;
}
export class AuthLoginRequest extends AuthSignUpRequest {
otp?: string;
}

1
dto/src/requests/base.ts Normal file
View File

@ -0,0 +1 @@
export class BaseRequest {}

19
dto/src/requests/fs.ts Normal file
View File

@ -0,0 +1,19 @@
import { BaseRequest } from './base';
import { IsInt, IsNotEmpty, Min } from 'class-validator';
export type CreateFileRequest = CreateFolderRequest;
export class CreateFolderRequest extends BaseRequest {
@IsInt()
@Min(1)
parent: number;
@IsNotEmpty()
name: string;
}
export class DeleteRequest extends BaseRequest {
@IsInt()
@Min(1)
node: number;
}

View File

@ -1,4 +1,5 @@
import { BaseResponse, SuccessResponse } from './base'; import { BaseResponse, SuccessResponse } from './base';
import { IsBase32, IsJWT, IsNotEmpty } from 'class-validator';
export type TfaRequiredResponse = SuccessResponse; export type TfaRequiredResponse = SuccessResponse;
export type RemoveTfaResponse = SuccessResponse; export type RemoveTfaResponse = SuccessResponse;
@ -7,13 +8,21 @@ export type TfaCompletedResponse = SuccessResponse;
export type SignupResponse = SuccessResponse; export type SignupResponse = SuccessResponse;
export type RefreshResponse = LoginResponse; export type RefreshResponse = LoginResponse;
export interface LoginResponse extends BaseResponse { export class LoginResponse extends BaseResponse {
statusCode: 200; statusCode: 200;
@IsNotEmpty()
@IsJWT()
jwt: string; jwt: string;
} }
export interface RequestTotpTfaResponse extends BaseResponse { export class RequestTotpTfaResponse extends BaseResponse {
statusCode: 200; statusCode: 200;
@IsNotEmpty()
qrCode: string; qrCode: string;
@IsNotEmpty()
@IsBase32()
secret: string; secret: string;
} }

12
dto/src/responses/base.ts Normal file
View File

@ -0,0 +1,12 @@
export class BaseResponse {
statusCode: number;
}
export class SuccessResponse extends BaseResponse {
statusCode: 200;
}
export class ErrorResponse extends BaseResponse {
statusCode: 400 | 401 | 403;
message?: string;
}

View File

@ -1,30 +1,49 @@
import { BaseResponse, SuccessResponse } from './base'; import { BaseResponse, SuccessResponse } from './base';
import { IsBoolean, IsInt, IsNotEmpty, Min } from 'class-validator';
export type UploadFileResponse = SuccessResponse; export type UploadFileResponse = SuccessResponse;
export type DeleteResponse = SuccessResponse; export type DeleteResponse = SuccessResponse;
export type CreateFileResponse = CreateFolderResponse; export type CreateFileResponse = CreateFolderResponse;
export interface GetRootResponse extends BaseResponse { export class GetRootResponse extends BaseResponse {
statusCode: 200; statusCode: 200;
@IsInt()
@Min(1)
rootId: number; rootId: number;
} }
export interface GetNodeResponse extends BaseResponse { export class GetNodeResponse extends BaseResponse {
statusCode: 200; statusCode: 200;
@IsInt()
@Min(1)
id: number; id: number;
@IsNotEmpty()
name: string; name: string;
@IsBoolean()
isFile: boolean; isFile: boolean;
parent: number | null; parent: number | null;
children?: number[]; children?: number[];
size?: number; size?: number;
} }
export interface GetPathResponse extends BaseResponse { export class GetPathResponse extends BaseResponse {
statusCode: 200; statusCode: 200;
@IsNotEmpty()
path: string; path: string;
} }
export interface CreateFolderResponse extends BaseResponse { export class CreateFolderResponse extends BaseResponse {
statusCode: 200; statusCode: 200;
@IsInt()
@Min(1)
id: number; id: number;
} }

17
dto/tsconfig.json Normal file
View File

@ -0,0 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"declaration": false,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./src",
"incremental": true,
"skipLibCheck": true
},
"exclude": ["node_modules", "dist"]
}

26
dto/yarn.lock Normal file
View File

@ -0,0 +1,26 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
class-transformer@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.5.1.tgz#24147d5dffd2a6cea930a3250a677addf96ab336"
integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==
class-validator@^0.13.2:
version "0.13.2"
resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.13.2.tgz#64b031e9f3f81a1e1dcd04a5d604734608b24143"
integrity sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==
dependencies:
libphonenumber-js "^1.9.43"
validator "^13.7.0"
libphonenumber-js@^1.9.43:
version "1.10.13"
resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.13.tgz#0b5833c7fdbf671140530d83531c6753f7e0ea3c"
integrity sha512-b74iyWmwb4GprAUPjPkJ11GTC7KX4Pd3onpJfKxYyY8y9Rbb4ERY47LvCMEDM09WD3thiLDMXtkfDK/AX+zT7Q==
validator@^13.7.0:
version "13.7.0"
resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857"
integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==