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 @@ \ 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 + }), + ], + }), + ], })