feat: added models

This commit is contained in:
2023-07-04 23:42:50 -03:00
parent fe0cacf145
commit 2d0f960d49
11 changed files with 94 additions and 3 deletions

View File

@@ -5,12 +5,19 @@ module.exports = {
},
extends: ['plugin:react/recommended', 'standard-with-typescript', 'prettier'],
overrides: [],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 'latest',
project: './tsconfig.json',
sourceType: 'module',
},
plugins: ['react', 'prettier', 'sort-keys-fix', 'better-styled-components'],
plugins: [
'better-styled-components',
'prettier',
'react',
'sort-keys-fix',
'typescript-sort-keys',
],
rules: {
'@typescript-eslint/strict-boolean-expressions': 'off',
'@typescript-eslint/triple-slash-reference': 'off',
@@ -52,5 +59,7 @@ module.exports = {
},
],
'sort-keys-fix/sort-keys-fix': 'error',
'typescript-sort-keys/interface': 'error',
'typescript-sort-keys/string-enum': 'error',
},
};

View File

@@ -22,7 +22,8 @@
"zod": "^3.21.4"
},
"devDependencies": {
"eslint": "^8.0.1",
"@typescript-eslint/parser": "^5.61.0",
"eslint": "^8.44.0",
"eslint-config-prettier": "^8.8.0",
"eslint-config-standard-with-typescript": "^34.0.1",
"eslint-plugin-better-styled-components": "^1.1.2",
@@ -32,6 +33,7 @@
"eslint-plugin-promise": "^6.0.0",
"eslint-plugin-react": "^7.32.2",
"eslint-plugin-sort-keys-fix": "^1.1.2",
"eslint-plugin-typescript-sort-keys": "^2.3.0",
"husky": "^8.0.3",
"lerna": "^7.1.1",
"lint-staged": "^13.2.0",

View File

@@ -0,0 +1,13 @@
import { z } from 'zod';
import { Schema, model } from 'mongoose';
import { type CurrencyType } from '../types';
export const CurrencySchema = z.object({
label: z.string(),
} satisfies CurrencyType);
const schema = new Schema({
label: { required: true, type: String },
} satisfies CurrencyType);
export const Currency = model('Currency', schema);

View File

@@ -1 +1,4 @@
export * from './user';
export * from './spending';
export * from './spendingCategory';
export * from './currency';

View File

@@ -0,0 +1,21 @@
import { z } from 'zod';
import { Schema, model } from 'mongoose';
import { type SpendingType } from '../types/spending';
export const SpendingSchema = z.object({
amount: z.number(),
currencyId: z.string(),
date: z.date(),
spendingCategoryId: z.string(),
userId: z.string(),
} satisfies SpendingType);
const schema = new Schema({
amount: { required: true, type: Number },
currencyId: { required: true, type: String },
date: { required: true, type: Date },
spendingCategoryId: { required: true, type: String },
userId: { required: true, type: String },
} satisfies SpendingType);
export const Spending = model('Spending', schema);

View File

@@ -0,0 +1,17 @@
import { z } from 'zod';
import { Schema, model } from 'mongoose';
import { type SpendingCategoryType } from '../types';
export const SpendingCategorySchema = z.object({
backgroundColor: z.string(),
label: z.string(),
userId: z.string(),
} satisfies SpendingCategoryType);
const schema = new Schema({
backgroundColor: { required: true, type: String },
label: { required: true, type: String },
userId: { required: true, type: String },
} satisfies SpendingCategoryType);
export const SpendingCategory = model('SpendingCategory', schema);

View File

@@ -0,0 +1,5 @@
import { type StringInput } from './primitives';
export interface CurrencyType {
label: StringInput;
}

View File

@@ -1 +1,4 @@
export * from './user';
export * from './spending';
export * from './spendingCategory';
export * from './currency';

View File

@@ -1,3 +1,5 @@
import { type z } from 'zod';
export type StringInput = string | z.ZodString | { type: StringConstructor; [key: string]: any };
export type StringInput = string | z.ZodString | { [key: string]: any; type: StringConstructor };
export type NumberInput = number | z.ZodNumber | { [key: string]: any; type: NumberConstructor };
export type DateInput = Date | z.ZodDate | { [key: string]: any; type: DateConstructor };

View File

@@ -0,0 +1,9 @@
import { type StringInput, type DateInput, type NumberInput } from './primitives';
export interface SpendingType {
amount: NumberInput;
currencyId: StringInput;
date: DateInput;
spendingCategoryId: StringInput;
userId: StringInput;
}

View File

@@ -0,0 +1,7 @@
import { type StringInput } from './primitives';
export interface SpendingCategoryType {
backgroundColor: StringInput;
label: StringInput;
userId: StringInput;
}