diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4450c01a894a1f0f4f582edb67019753499d9332..c6a49b66d582222647faf3ed7a66cae71769b893 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,20 +1,28 @@ +image: node:alpine # Much smaller than other variants, faster and more resource effective + stages: - - install - - build + - install_dependencies + - lint + - build_project cache: + key: "${CI_COMMIT_REF_SLUG}" # Branch-specific cache keys to have separate caches across branches. paths: - node_modules/ - key: "$CI_BUILD_REF_NAME" # Separate cache for each branch install_dependencies: - stage: install - image: node:latest + stage: install_dependencies script: - npm install +lint: + stage: lint + script: + - npm run lint + allow_failure: true + build_project: - stage: build - image: node:latest + stage: build_project script: - - npm run build \ No newline at end of file + - npm run build + diff --git a/src/api/core/OpenAPI.ts b/src/api/core/OpenAPI.ts index bae5eb773e38a6fa187a68f3ac9f3dbecc88eaf5..213c15d4a7b840e8d13a35f74c2618c13b7c9398 100644 --- a/src/api/core/OpenAPI.ts +++ b/src/api/core/OpenAPI.ts @@ -21,7 +21,7 @@ export type OpenAPIConfig = { export const OpenAPI: OpenAPIConfig = { BASE: 'http://localhost:8080', - VERSION: '0', + VERSION: '3.0', WITH_CREDENTIALS: false, CREDENTIALS: 'include', TOKEN: undefined, diff --git a/src/api/index.ts b/src/api/index.ts index 7bfbd7a82dcdde4a855e2ee242508c2268633a83..2a974f1dd456ed118f2caf5c190038eb3cfa7c3f 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -6,3 +6,10 @@ export { ApiError } from './core/ApiError'; export { CancelablePromise, CancelError } from './core/CancelablePromise'; export { OpenAPI } from './core/OpenAPI'; export type { OpenAPIConfig } from './core/OpenAPI'; + +export type { AuthenticationResponse } from './models/AuthenticationResponse'; +export type { ExceptionResponse } from './models/ExceptionResponse'; +export type { LoginRequest } from './models/LoginRequest'; +export type { SignUpRequest } from './models/SignUpRequest'; + +export { AuthenticationService } from './services/AuthenticationService'; diff --git a/src/api/models/AuthenticationResponse.ts b/src/api/models/AuthenticationResponse.ts new file mode 100644 index 0000000000000000000000000000000000000000..47169ae37b90b20523c9be17ff5da7c2b15bcd4a --- /dev/null +++ b/src/api/models/AuthenticationResponse.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type AuthenticationResponse = { + firstName?: string; + lastName?: string; + role?: string; + token?: string; +}; + diff --git a/src/api/models/ExceptionResponse.ts b/src/api/models/ExceptionResponse.ts new file mode 100644 index 0000000000000000000000000000000000000000..12c0a7873d7d38f6782e970737603521971c9c81 --- /dev/null +++ b/src/api/models/ExceptionResponse.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ExceptionResponse = { + status?: number; + message?: string; +}; + diff --git a/src/api/models/LoginRequest.ts b/src/api/models/LoginRequest.ts new file mode 100644 index 0000000000000000000000000000000000000000..9c5def4f1a6a028911a9b4ca8a147fcc14f8015e --- /dev/null +++ b/src/api/models/LoginRequest.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type LoginRequest = { + email?: string; + password?: string; +}; + diff --git a/src/api/models/SignUpRequest.ts b/src/api/models/SignUpRequest.ts new file mode 100644 index 0000000000000000000000000000000000000000..28a2e78a3a39e8ceb5f28567ebdf02d912017210 --- /dev/null +++ b/src/api/models/SignUpRequest.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type SignUpRequest = { + firstName?: string; + lastName?: string; + email?: string; + password?: string; + changeWilling?: string; + experience?: string; + challenges?: Array<string>; +}; + diff --git a/src/api/services/AuthenticationService.ts b/src/api/services/AuthenticationService.ts new file mode 100644 index 0000000000000000000000000000000000000000..eae8fd5c8b2f6ef8d5cfaf6ed6976edcf0a386d4 --- /dev/null +++ b/src/api/services/AuthenticationService.ts @@ -0,0 +1,55 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { AuthenticationResponse } from '../models/AuthenticationResponse'; +import type { LoginRequest } from '../models/LoginRequest'; +import type { SignUpRequest } from '../models/SignUpRequest'; +import type { CancelablePromise } from '../core/CancelablePromise'; +import { OpenAPI } from '../core/OpenAPI'; +import { request as __request } from '../core/request'; +export class AuthenticationService { + /** + * User Signup + * Sign up a new user + * @returns AuthenticationResponse Successfully signed up + * @throws ApiError + */ + public static signup({ + requestBody, + }: { + requestBody: SignUpRequest, + }): CancelablePromise<AuthenticationResponse> { + return __request(OpenAPI, { + method: 'POST', + url: '/api/auth/signup', + body: requestBody, + mediaType: 'application/json', + errors: { + 409: `Email already exists`, + }, + }); + } + /** + * User Login + * Log in with an existing user + * @returns AuthenticationResponse Successfully logged in + * @throws ApiError + */ + public static login({ + requestBody, + }: { + requestBody: LoginRequest, + }): CancelablePromise<AuthenticationResponse> { + return __request(OpenAPI, { + method: 'POST', + url: '/api/auth/login', + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Invalid credentials`, + 404: `User not found`, + }, + }); + } +} diff --git a/src/assets/icons/dollar.png b/src/assets/icons/dollar.png new file mode 100644 index 0000000000000000000000000000000000000000..ed7c58b29cd15ec18e850a5b7c463e883d5f3972 Binary files /dev/null and b/src/assets/icons/dollar.png differ diff --git a/src/assets/icons/fire.png b/src/assets/icons/fire.png new file mode 100644 index 0000000000000000000000000000000000000000..248d2434e1b7712b097ed38ef585596704e455e6 Binary files /dev/null and b/src/assets/icons/fire.png differ diff --git a/src/components/BaseComponents/Menu.vue b/src/components/BaseComponents/Menu.vue index bdb9038ed5a584844ac0698ae5599c81ae6b1c23..1edc325513c43ee7c2373874f229f42bfd07033c 100644 --- a/src/components/BaseComponents/Menu.vue +++ b/src/components/BaseComponents/Menu.vue @@ -45,7 +45,6 @@ </ul> </li> </ul> - </div> </div> </nav> @@ -83,8 +82,9 @@ function toFeedback() { router.push('/feedback') } -function toUserProfile() { - router.push('/news') + +function toUserProfile(){ + router.push('/profile') } diff --git a/src/components/UserProfile/UserProfileLayout.vue b/src/components/UserProfile/UserProfileLayout.vue new file mode 100644 index 0000000000000000000000000000000000000000..494e5aea08ee567575c8e4a430612dfbc64e4246 --- /dev/null +++ b/src/components/UserProfile/UserProfileLayout.vue @@ -0,0 +1,57 @@ +<script setup lang="ts"> + +import Menu from "@/components/BaseComponents/Menu.vue"; +import Footer from "@/components/BaseComponents/Footer.vue"; + +let points = 0; +let streak = 0; +</script> + +<template> + <Menu></Menu> + <div class="container text-center"> + <div class="row"> + <div class="col"> + <img src="/src/assets/userprofile.png" class="img-fluid"> + <p class="h2">Username</p> + <p><a class="link-dark" href="#">Edit profile</a></p> + </div> + </div> + <div class="row"> + <div class="col"> + <img src="/src/assets/icons/fire.png" class="img-fluid" style="width: 30px; height: 30px" alt="dollar"> + <p>Streak: 10</p> + </div> + </div> + <div class="row"> + <div class="col-12"> + <img src="/src/assets/icons/dollar.png" class="img-fluid" style="width: 30px; height: 30px" alt="dollar"> + <p class="">Points: 2000 </p> + </div> + </div> + + <div class="row"> + <div class="col"> + total points earned + </div> + <div class="col"> + total badges earned + </div> + </div> + <div class="row"> + <div class="col"> + History + </div> + </div> + <div class="row"> + <div class="col"> + Your Badges + </div> + </div> + </div> + <Footer></Footer> +</template> + +<style scoped> + +</style> \ No newline at end of file diff --git a/src/router/index.ts b/src/router/index.ts index bb108c321747b1b696a2d530d0fb618fd3d020d8..9cefc38dae5ff578c87d750d62a137fa88122e5f 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -2,8 +2,10 @@ import { createRouter, createWebHistory } from 'vue-router'; import LoginView from '../views/Authentication/LoginView.vue'; import { useUserInfoStore } from '@/stores/UserStore'; +import UserProfileView from "@/views/User/UserProfileView.vue"; import SignUp from '@/components/SignUp/SignUp.vue' + const routes = [ { path: '/', @@ -69,6 +71,11 @@ const routes = [ name: 'login', component: LoginView, }, + { + path: '/profile', + name: 'profile', + component: UserProfileView + }, { path: '/sign-up', name: 'sign up', diff --git a/src/views/User/UserProfileView.vue b/src/views/User/UserProfileView.vue new file mode 100644 index 0000000000000000000000000000000000000000..85e9882866797433edfa76cc3fbf4368796432cf --- /dev/null +++ b/src/views/User/UserProfileView.vue @@ -0,0 +1,12 @@ +<script setup lang="ts"> + +import UserProfileLayout from "@/components/UserProfile/UserProfileLayout.vue"; +</script> + +<template> +<UserProfileLayout></UserProfileLayout> +</template> + +<style scoped> + +</style> \ No newline at end of file