diff --git a/back/Controllers/Program.cs b/back/Controllers/Program.cs
index 2e20712..2c70319 100644
--- a/back/Controllers/Program.cs
+++ b/back/Controllers/Program.cs
@@ -20,9 +20,10 @@ if (app.Environment.IsDevelopment())
app.UseSwagger();
app.UseSwaggerUI();
}
-
app.MigrateDb();
+app.UseCors(builder => builder.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
+
app.UseHttpsRedirection();
app.UseAuthorization();
diff --git a/front/components.d.ts b/front/components.d.ts
new file mode 100644
index 0000000..5a49b6b
--- /dev/null
+++ b/front/components.d.ts
@@ -0,0 +1,22 @@
+/* eslint-disable */
+// @ts-nocheck
+// Generated by unplugin-vue-components
+// Read more: https://github.com/vuejs/core/pull/3399
+export {}
+
+/* prettier-ignore */
+declare module 'vue' {
+ export interface GlobalComponents {
+ AButton: typeof import('ant-design-vue/es')['Button']
+ AForm: typeof import('ant-design-vue/es')['Form']
+ AFormItem: typeof import('ant-design-vue/es')['FormItem']
+ AInput: typeof import('ant-design-vue/es')['Input']
+ AInputPassword: typeof import('ant-design-vue/es')['InputPassword']
+ Header: typeof import('./src/components/main/Header.vue')['default']
+ Home: typeof import('./src/components/pages/Home.vue')['default']
+ Login: typeof import('./src/components/pages/Login.vue')['default']
+ RouterLink: typeof import('vue-router')['RouterLink']
+ RouterView: typeof import('vue-router')['RouterView']
+ SignUp: typeof import('./src/components/pages/SignUp.vue')['default']
+ }
+}
diff --git a/front/package-lock.json b/front/package-lock.json
index 0c06863..7f99dfb 100644
--- a/front/package-lock.json
+++ b/front/package-lock.json
@@ -9,9 +9,9 @@
"version": "0.0.0",
"dependencies": {
"ant-design-vue": "^4.2.6",
+ "pinia": "^2.2.8",
"vue": "^3.5.12",
- "vue-router": "^4.5.0",
- "vuex": "^4.1.0"
+ "vue-router": "^4.5.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.1.4",
@@ -2135,6 +2135,58 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pinia": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.8.tgz",
+ "integrity": "sha512-NRTYy2g+kju5tBRe0oNlriZIbMNvma8ZJrpHsp3qudyiMEA8jMmPPKQ2QMHg0Oc4BkUyQYWagACabrwriCK9HQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.6.3",
+ "vue-demi": "^0.14.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.4.0",
+ "typescript": ">=4.4.4",
+ "vue": "^2.6.14 || ^3.5.11"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pinia/node_modules/vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
"node_modules/pkg-types": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz",
@@ -2799,18 +2851,6 @@
"vue": "^3.0.0"
}
},
- "node_modules/vuex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
- "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-api": "^6.0.0-beta.11"
- },
- "peerDependencies": {
- "vue": "^3.2.0"
- }
- },
"node_modules/warning": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
diff --git a/front/package.json b/front/package.json
index a986ca7..daa2045 100644
--- a/front/package.json
+++ b/front/package.json
@@ -11,9 +11,9 @@
},
"dependencies": {
"ant-design-vue": "^4.2.6",
+ "pinia": "^2.2.8",
"vue": "^3.5.12",
- "vue-router": "^4.5.0",
- "vuex": "^4.1.0"
+ "vue-router": "^4.5.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.1.4",
diff --git a/front/src/App.vue b/front/src/App.vue
index 231231d..8436d0e 100644
--- a/front/src/App.vue
+++ b/front/src/App.vue
@@ -10,5 +10,10 @@ import Header from './components/main/Header.vue';
\ No newline at end of file
diff --git a/front/src/components/main/Header.vue b/front/src/components/main/Header.vue
index 219a6ff..5a754b1 100644
--- a/front/src/components/main/Header.vue
+++ b/front/src/components/main/Header.vue
@@ -2,15 +2,7 @@
-
+ Header
\ No newline at end of file
diff --git a/front/src/components/pages/SignUp.vue b/front/src/components/pages/SignUp.vue
new file mode 100644
index 0000000..e69de29
diff --git a/front/src/core/api/Api.ts b/front/src/core/api/Api.ts
index ab58717..a9c2824 100644
--- a/front/src/core/api/Api.ts
+++ b/front/src/core/api/Api.ts
@@ -17,7 +17,7 @@ import {
SpendingPlanDto,
SpendingPlanViewModel,
UserDto,
- UserLoginDTO,
+ UserLoginDto,
UserViewModel,
} from "./data-contracts";
import { ContentType, HttpClient, RequestParams } from "./http-client";
@@ -31,7 +31,7 @@ export class Api extends HttpClient
+ auth = (data: UserLoginDto, params: RequestParams = {}) =>
this.request({
path: `/api/Auth`,
method: "POST",
@@ -48,7 +48,7 @@ export class Api extends HttpClient
+ authRegister = (data: UserDto, params: RequestParams = {}) =>
this.request({
path: `/api/Auth/register`,
method: "POST",
diff --git a/front/src/core/api/data-contracts.ts b/front/src/core/api/data-contracts.ts
index 1788da0..9c35c81 100644
--- a/front/src/core/api/data-contracts.ts
+++ b/front/src/core/api/data-contracts.ts
@@ -82,7 +82,7 @@ export interface UserDto {
balance?: number;
}
-export interface UserLoginDTO {
+export interface UserLoginDto {
name?: string | null;
password?: string | null;
}
diff --git a/front/src/core/api/http-client.ts b/front/src/core/api/http-client.ts
index db03d42..c338a86 100644
--- a/front/src/core/api/http-client.ts
+++ b/front/src/core/api/http-client.ts
@@ -55,7 +55,7 @@ export enum ContentType {
}
export class HttpClient {
- public baseUrl: string = "";
+ public baseUrl: string = "http://localhost:5125";
private securityData: SecurityDataType | null = null;
private securityWorker?: ApiConfig["securityWorker"];
private abortControllers = new Map();
diff --git a/front/src/core/services/auth-service.ts b/front/src/core/services/auth-service.ts
new file mode 100644
index 0000000..131d201
--- /dev/null
+++ b/front/src/core/services/auth-service.ts
@@ -0,0 +1,25 @@
+import { useUserStore } from "../../store";
+import { Api } from "../api/Api";
+import { UserDto, UserLoginDto } from "../api/data-contracts";
+
+export class AuthService {
+ private readonly _api: Api;
+
+ constructor(api: Api) {
+ this._api = api;
+
+ }
+ async login(data: UserLoginDto) {
+ let result = await this._api.auth(data);
+ console.log(result);
+ const store = useUserStore();
+ store.updateUser(result.data);
+ }
+
+ async register(data: UserDto) {
+ let result = await this._api.authRegister(data);
+ const store = useUserStore();
+ store.updateUser(result.data);
+ }
+
+}
\ No newline at end of file
diff --git a/front/src/main.ts b/front/src/main.ts
index 3a09299..97fdbc8 100644
--- a/front/src/main.ts
+++ b/front/src/main.ts
@@ -1,12 +1,18 @@
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
-import { key, store } from './store'
import router from './router'
+import { Api } from './core/api/Api'
+import { createPinia } from 'pinia'
+import { AuthService } from './core/services/auth-service'
const app = createApp(App)
-app.use(store, key)
app.use(router)
+app.use(createPinia())
+
+// Di
+const api = new Api();
+app.provide(typeof(AuthService), new AuthService(api))
app.mount('#app')
diff --git a/front/src/router.ts b/front/src/router.ts
index 87fe847..435c0d0 100644
--- a/front/src/router.ts
+++ b/front/src/router.ts
@@ -5,7 +5,13 @@ export default createRouter({
routes: [
{
path: '/',
+ name: 'home',
component: () => import('./components/pages/Home.vue'),
+ },
+ {
+ path: '/login',
+ name: 'login',
+ component: () => import('./components/pages/Login.vue'),
}
],
})
diff --git a/front/src/store.ts b/front/src/store.ts
index 573a419..a4aa04d 100644
--- a/front/src/store.ts
+++ b/front/src/store.ts
@@ -1,20 +1,19 @@
-import { InjectionKey } from 'vue'
-import { createStore, Store } from 'vuex'
import { UserViewModel } from './core/api/data-contracts'
+import { defineStore } from 'pinia'
export interface State {
- user: UserViewModel | null
+ user: UserViewModel
}
-export const key: InjectionKey> = Symbol()
+export const useUserStore = defineStore('user', {
+ state: (): State => ({
+ user: {} as UserViewModel
+ }),
+ actions: {
+ updateUser(payload: UserViewModel) {
+ if (!payload) return;
-export const store = createStore({
- state: {
- user: null
- },
- mutations: {
- setUser(state: any, user: UserViewModel) {
- state.user = user
- }
+ this.user = payload;
+ },
}
-})
+})
\ No newline at end of file
diff --git a/front/vite.config.ts b/front/vite.config.ts
index bbcf80c..18f6270 100644
--- a/front/vite.config.ts
+++ b/front/vite.config.ts
@@ -1,7 +1,18 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
+import Components from 'unplugin-vue-components/vite'
+import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'
// https://vite.dev/config/
export default defineConfig({
- plugins: [vue()],
+ plugins: [
+ vue(),
+ Components({
+ resolvers: [
+ AntDesignVueResolver({
+ importStyle: false, // css in js
+ }),
+ ],
+ }),
+ ],
})