mirror of
https://github.com/FranP-code/spend-ia.git
synced 2025-10-13 00:14:09 +00:00
feat: added models
This commit is contained in:
@@ -5,12 +5,19 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
extends: ['plugin:react/recommended', 'standard-with-typescript', 'prettier'],
|
extends: ['plugin:react/recommended', 'standard-with-typescript', 'prettier'],
|
||||||
overrides: [],
|
overrides: [],
|
||||||
|
parser: '@typescript-eslint/parser',
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
ecmaVersion: 'latest',
|
ecmaVersion: 'latest',
|
||||||
project: './tsconfig.json',
|
project: './tsconfig.json',
|
||||||
sourceType: 'module',
|
sourceType: 'module',
|
||||||
},
|
},
|
||||||
plugins: ['react', 'prettier', 'sort-keys-fix', 'better-styled-components'],
|
plugins: [
|
||||||
|
'better-styled-components',
|
||||||
|
'prettier',
|
||||||
|
'react',
|
||||||
|
'sort-keys-fix',
|
||||||
|
'typescript-sort-keys',
|
||||||
|
],
|
||||||
rules: {
|
rules: {
|
||||||
'@typescript-eslint/strict-boolean-expressions': 'off',
|
'@typescript-eslint/strict-boolean-expressions': 'off',
|
||||||
'@typescript-eslint/triple-slash-reference': 'off',
|
'@typescript-eslint/triple-slash-reference': 'off',
|
||||||
@@ -52,5 +59,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
'sort-keys-fix/sort-keys-fix': 'error',
|
'sort-keys-fix/sort-keys-fix': 'error',
|
||||||
|
'typescript-sort-keys/interface': 'error',
|
||||||
|
'typescript-sort-keys/string-enum': 'error',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -22,7 +22,8 @@
|
|||||||
"zod": "^3.21.4"
|
"zod": "^3.21.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^8.0.1",
|
"@typescript-eslint/parser": "^5.61.0",
|
||||||
|
"eslint": "^8.44.0",
|
||||||
"eslint-config-prettier": "^8.8.0",
|
"eslint-config-prettier": "^8.8.0",
|
||||||
"eslint-config-standard-with-typescript": "^34.0.1",
|
"eslint-config-standard-with-typescript": "^34.0.1",
|
||||||
"eslint-plugin-better-styled-components": "^1.1.2",
|
"eslint-plugin-better-styled-components": "^1.1.2",
|
||||||
@@ -32,6 +33,7 @@
|
|||||||
"eslint-plugin-promise": "^6.0.0",
|
"eslint-plugin-promise": "^6.0.0",
|
||||||
"eslint-plugin-react": "^7.32.2",
|
"eslint-plugin-react": "^7.32.2",
|
||||||
"eslint-plugin-sort-keys-fix": "^1.1.2",
|
"eslint-plugin-sort-keys-fix": "^1.1.2",
|
||||||
|
"eslint-plugin-typescript-sort-keys": "^2.3.0",
|
||||||
"husky": "^8.0.3",
|
"husky": "^8.0.3",
|
||||||
"lerna": "^7.1.1",
|
"lerna": "^7.1.1",
|
||||||
"lint-staged": "^13.2.0",
|
"lint-staged": "^13.2.0",
|
||||||
|
|||||||
13
packages/server/schemas/currency.ts
Normal file
13
packages/server/schemas/currency.ts
Normal 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);
|
||||||
@@ -1 +1,4 @@
|
|||||||
export * from './user';
|
export * from './user';
|
||||||
|
export * from './spending';
|
||||||
|
export * from './spendingCategory';
|
||||||
|
export * from './currency';
|
||||||
|
|||||||
21
packages/server/schemas/spending.ts
Normal file
21
packages/server/schemas/spending.ts
Normal 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);
|
||||||
17
packages/server/schemas/spendingCategory.ts
Normal file
17
packages/server/schemas/spendingCategory.ts
Normal 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);
|
||||||
5
packages/server/types/currency.ts
Normal file
5
packages/server/types/currency.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { type StringInput } from './primitives';
|
||||||
|
|
||||||
|
export interface CurrencyType {
|
||||||
|
label: StringInput;
|
||||||
|
}
|
||||||
@@ -1 +1,4 @@
|
|||||||
export * from './user';
|
export * from './user';
|
||||||
|
export * from './spending';
|
||||||
|
export * from './spendingCategory';
|
||||||
|
export * from './currency';
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
import { type z } from 'zod';
|
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 };
|
||||||
|
|||||||
9
packages/server/types/spending.ts
Normal file
9
packages/server/types/spending.ts
Normal 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;
|
||||||
|
}
|
||||||
7
packages/server/types/spendingCategory.ts
Normal file
7
packages/server/types/spendingCategory.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { type StringInput } from './primitives';
|
||||||
|
|
||||||
|
export interface SpendingCategoryType {
|
||||||
|
backgroundColor: StringInput;
|
||||||
|
label: StringInput;
|
||||||
|
userId: StringInput;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user