From 9f1485ecd77d56e975225b54d7705b764813bbbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20L=C3=A1szl=C3=B3?= <rlacko99@gmail.com> Date: Tue, 11 May 2021 23:20:20 +0200 Subject: [PATCH] Document all services and models --- src/app/helpers/auth.guard.ts | 3 ++ src/app/helpers/error.interceptor.ts | 3 ++ src/app/helpers/jwt.interceptor.ts | 3 ++ src/app/models/error.model.ts | 3 ++ src/app/models/history.model.ts | 3 ++ src/app/models/jwt-user.model.ts | 4 ++- .../models/request/create-history-request.ts | 3 ++ .../request/create-service-request.model.ts | 3 ++ .../request/create-user-request.model.ts | 3 ++ .../models/request/update-history-request.ts | 3 ++ .../request/update-service-request.model.ts | 3 ++ .../models/response/created-response.model.ts | 3 ++ .../models/response/token-reponse.model.ts | 3 ++ src/app/models/service.model.ts | 3 ++ src/app/models/user.model.ts | 3 ++ src/app/services/auth.service.ts | 23 ++++++++++++++ src/app/services/error.service.ts | 16 ++++++++-- src/app/services/histories.service.ts | 3 ++ src/app/services/jwt.service.ts | 6 ++++ src/app/services/localstorage.service.ts | 31 +++++++++++++++++-- src/app/services/services.service.ts | 3 ++ src/app/services/users.service.ts | 3 ++ 22 files changed, 126 insertions(+), 5 deletions(-) diff --git a/src/app/helpers/auth.guard.ts b/src/app/helpers/auth.guard.ts index 2768079..e3add18 100644 --- a/src/app/helpers/auth.guard.ts +++ b/src/app/helpers/auth.guard.ts @@ -3,6 +3,9 @@ import { Injectable } from '@angular/core'; import { AuthService } from '../services/auth.service'; import { Observable } from 'rxjs'; +/** + * AuthGuard that prevents a site from loading if not Authorized and redirect to the forbidden page. + */ @Injectable({ providedIn: 'root' }) diff --git a/src/app/helpers/error.interceptor.ts b/src/app/helpers/error.interceptor.ts index 6d174ef..294663f 100644 --- a/src/app/helpers/error.interceptor.ts +++ b/src/app/helpers/error.interceptor.ts @@ -4,6 +4,9 @@ import { Observable, throwError } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { AuthService } from '../services/auth.service'; +/** + * HTTP Error interceptor that logs all the errors and logs out if a 401 request intercepted + */ @Injectable() export class ErrorInterceptor implements HttpInterceptor { constructor(private authService: AuthService) {} diff --git a/src/app/helpers/jwt.interceptor.ts b/src/app/helpers/jwt.interceptor.ts index be10722..c856bfe 100644 --- a/src/app/helpers/jwt.interceptor.ts +++ b/src/app/helpers/jwt.interceptor.ts @@ -4,6 +4,9 @@ import { Observable } from 'rxjs'; import { environment } from '../../environments/environment'; import { Injectable } from '@angular/core'; +/** + * HTTP Interceptor that adds the jwt token to all requests if exist + */ @Injectable() export class JwtInterceptor implements HttpInterceptor { private currentJwt?: string; diff --git a/src/app/models/error.model.ts b/src/app/models/error.model.ts index 69e3ba4..2cff276 100644 --- a/src/app/models/error.model.ts +++ b/src/app/models/error.model.ts @@ -1,3 +1,6 @@ +/** + * Error that is stored in ErrorService + */ export interface ErrorModel { message: string; navigate?: string[]; diff --git a/src/app/models/history.model.ts b/src/app/models/history.model.ts index febb41b..de9525c 100644 --- a/src/app/models/history.model.ts +++ b/src/app/models/history.model.ts @@ -1,3 +1,6 @@ +/** + * History model + */ export interface History { id: number; description: string; diff --git a/src/app/models/jwt-user.model.ts b/src/app/models/jwt-user.model.ts index a507db4..27fd931 100644 --- a/src/app/models/jwt-user.model.ts +++ b/src/app/models/jwt-user.model.ts @@ -1,4 +1,6 @@ - +/** + * User details that can be get from JWT + */ export interface JwtUserModel { fullName: string; schacc: string; diff --git a/src/app/models/request/create-history-request.ts b/src/app/models/request/create-history-request.ts index b099e10..cb58309 100644 --- a/src/app/models/request/create-history-request.ts +++ b/src/app/models/request/create-history-request.ts @@ -1,3 +1,6 @@ +/** + * Sent request on new History creation + */ export interface CreateHistoryRequest { createdAt?: string; // Default now description: string; diff --git a/src/app/models/request/create-service-request.model.ts b/src/app/models/request/create-service-request.model.ts index ad51ff5..7cd274e 100644 --- a/src/app/models/request/create-service-request.model.ts +++ b/src/app/models/request/create-service-request.model.ts @@ -1,3 +1,6 @@ +/** + * Sent request on new Service creation + */ export interface CreateServiceRequestModel { description: string; isOkay?: string; // default is false diff --git a/src/app/models/request/create-user-request.model.ts b/src/app/models/request/create-user-request.model.ts index d290d7b..56199bc 100644 --- a/src/app/models/request/create-user-request.model.ts +++ b/src/app/models/request/create-user-request.model.ts @@ -1,3 +1,6 @@ +/** + * Sent request on new User creation + */ export interface CreateUserRequestModel { email: string; fullName: string; diff --git a/src/app/models/request/update-history-request.ts b/src/app/models/request/update-history-request.ts index 07a97b7..717f1d2 100644 --- a/src/app/models/request/update-history-request.ts +++ b/src/app/models/request/update-history-request.ts @@ -1,3 +1,6 @@ +/** + * Sent request on service creation + */ export interface UpdateHistoryRequest { createdAt?: string; description?: string; diff --git a/src/app/models/request/update-service-request.model.ts b/src/app/models/request/update-service-request.model.ts index 64d9f93..1b01dd5 100644 --- a/src/app/models/request/update-service-request.model.ts +++ b/src/app/models/request/update-service-request.model.ts @@ -1,3 +1,6 @@ +/** + * Sent request on Service update + */ export interface UpdateServiceRequestModel { description?: string; isOkay?: string; diff --git a/src/app/models/response/created-response.model.ts b/src/app/models/response/created-response.model.ts index 5565542..680c12a 100644 --- a/src/app/models/response/created-response.model.ts +++ b/src/app/models/response/created-response.model.ts @@ -1,3 +1,6 @@ +/** + * Response when something is successfully created + */ export interface CreatedResponseModel { id: number; } diff --git a/src/app/models/response/token-reponse.model.ts b/src/app/models/response/token-reponse.model.ts index d160f3e..0f14bc6 100644 --- a/src/app/models/response/token-reponse.model.ts +++ b/src/app/models/response/token-reponse.model.ts @@ -1,3 +1,6 @@ +/** + * Response when a token is requested + */ export interface TokenReponseModel { code: number; expire: string; diff --git a/src/app/models/service.model.ts b/src/app/models/service.model.ts index 6eb5161..d90443f 100644 --- a/src/app/models/service.model.ts +++ b/src/app/models/service.model.ts @@ -1,5 +1,8 @@ import { History } from './history.model'; +/** + * A service model + */ export interface Service { id: number; name: string; diff --git a/src/app/models/user.model.ts b/src/app/models/user.model.ts index 86054a9..893fcd1 100644 --- a/src/app/models/user.model.ts +++ b/src/app/models/user.model.ts @@ -1,3 +1,6 @@ +/** + * User model + */ export interface User { id: number; fullName: string; diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index 5b8fb9b..ba4cf77 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -8,12 +8,21 @@ import { map } from 'rxjs/operators'; import { TokenReponseModel } from '../models/response/token-reponse.model'; import { Router } from '@angular/router'; +/** + * Authentication service + */ @Injectable({ providedIn: 'root', }) export class AuthService { + /** + * The is Authenticated + */ isLoggedIn = false; private userDataSource = new BehaviorSubject<JwtUserModel | void>(null); + /** + * User data + */ userData$ = this.userDataSource.asObservable(); private refreshTokenTimeout: number; private expire: Date; @@ -23,6 +32,11 @@ export class AuthService { this.startRefreshTokenTimer(); } + /** + * Log in the user and start auto refresh + * @param username User's username + * @param password User's password + */ login(username: string, password: string): Observable<TokenReponseModel> { return this.http.post(`${environment.apiUrl}/auth/login`, { username, password }).pipe( map((tokenRes: TokenReponseModel) => { @@ -34,6 +48,9 @@ export class AuthService { ); } + /** + * Log out the user. Delete JWT and variables + */ logout(): void { this.stopRefreshTokenTimer(); this.userDataSource.next(null); @@ -41,6 +58,9 @@ export class AuthService { this.router.navigate(['/services']); } + /** + * Refresh the token using the current one + */ refreshToken(): Observable<TokenReponseModel> { return this.http.get(`${environment.apiUrl}/auth/refresh`).pipe( map((tokenRes: TokenReponseModel) => { @@ -52,6 +72,9 @@ export class AuthService { ); } + /** + * Load the current user data from LocalStorage + */ loadUserData(): void { const data = this.jwtService.getDecodedToken(); if (!data || data.exp < new Date()) { diff --git a/src/app/services/error.service.ts b/src/app/services/error.service.ts index 772ce0a..3c1e638 100644 --- a/src/app/services/error.service.ts +++ b/src/app/services/error.service.ts @@ -1,19 +1,28 @@ import { Injectable } from '@angular/core'; -import { ErrorDialogComponent } from '../shared/error-dialog/error-dialog.component'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { BehaviorSubject } from 'rxjs'; -import { JwtUserModel } from '../models/jwt-user.model'; import { ErrorModel } from '../models/error.model'; +/** + * Service that contains the current and past errors. + */ @Injectable({ providedIn: 'root', }) export class ErrorService { private errorDataSource = new BehaviorSubject<ErrorModel | void>(null); + /** + * Error data + */ errorData$ = this.errorDataSource.asObservable(); constructor(private modalService: NgbModal) {} + /** + * Update the current error + * @param message Message of error + * @param navigate where to navigate + */ updateError(message: string, navigate?: string[]): void { this.errorDataSource.next({ message, @@ -21,6 +30,9 @@ export class ErrorService { }); } + /** + * Set to null the error + */ resetError(): void { this.errorDataSource.next(null); } diff --git a/src/app/services/histories.service.ts b/src/app/services/histories.service.ts index 6f4a04d..32bc13f 100644 --- a/src/app/services/histories.service.ts +++ b/src/app/services/histories.service.ts @@ -6,6 +6,9 @@ import { CreatedResponseModel } from '../models/response/created-response.model' import { CreateHistoryRequest } from '../models/request/create-history-request'; import { UpdateHistoryRequest } from '../models/request/update-history-request'; +/** + * Service that handles the history endpoint + */ @Injectable({ providedIn: 'root', }) diff --git a/src/app/services/jwt.service.ts b/src/app/services/jwt.service.ts index a5e5ff0..2b451ee 100644 --- a/src/app/services/jwt.service.ts +++ b/src/app/services/jwt.service.ts @@ -3,6 +3,9 @@ import { LocalstorageService } from './localstorage.service'; import { JwtUserModel } from '../models/jwt-user.model'; import jwt_decode from 'jwt-decode'; +/** + * Service that handles the JWT + */ @Injectable({ providedIn: 'root', }) @@ -17,6 +20,9 @@ export class JwtService { this.localStorageService.setItem('token', token); } + /** + * Clear the token from localstorage + */ clearToken(): void { this.localStorageService.removeItem('token'); } diff --git a/src/app/services/localstorage.service.ts b/src/app/services/localstorage.service.ts index 2830958..40aa703 100644 --- a/src/app/services/localstorage.service.ts +++ b/src/app/services/localstorage.service.ts @@ -1,21 +1,48 @@ import { Injectable } from '@angular/core'; +/** + * Service that handles all localstorage methods. Type safe + */ @Injectable({ - providedIn: 'root', + providedIn: 'root' }) export class LocalstorageService { - constructor() { } + constructor() { + } + /** + * Set a record to the localstorage + * @param key The Record key + * @param value The Record value + */ setItem(key: string, value: any): void { localStorage.setItem(key, JSON.stringify({ value })); } + /** + * Remove a record by key + * @param key Record key + */ removeItem(key: string): void { localStorage.removeItem(key); } + /** + * Get a given record specifying it's type + * @param key Key of the record + */ getItem<T>(key: string): T | null; + /** + * Get a given record specifying it's type + * @param key Key of the record + * @param otherwise default return value + */ getItem<T>(key: string, otherwise: T): T; + /** + * Get a given record specifying it's type + * @param key Key of the record + * @param otherwise default return value + */ getItem<T>(key: string, otherwise?: T): T | null { const data: string | null = localStorage.getItem(key); if (data !== null) { diff --git a/src/app/services/services.service.ts b/src/app/services/services.service.ts index 475c1f9..ee350fc 100644 --- a/src/app/services/services.service.ts +++ b/src/app/services/services.service.ts @@ -7,6 +7,9 @@ import { Service } from '../models/service.model'; import { CreateServiceRequestModel } from '../models/request/create-service-request.model'; import { UpdateServiceRequestModel } from '../models/request/update-service-request.model'; +/** + * Service that handles the services endpoint + */ @Injectable({ providedIn: 'root', }) diff --git a/src/app/services/users.service.ts b/src/app/services/users.service.ts index afe2543..e8aff44 100644 --- a/src/app/services/users.service.ts +++ b/src/app/services/users.service.ts @@ -6,6 +6,9 @@ import { User } from '../models/user.model'; import { CreateUserRequestModel } from '../models/request/create-user-request.model'; import { CreatedResponseModel } from '../models/response/created-response.model'; +/** + * Service that handles the users endpoint + */ @Injectable({ providedIn: 'root', }) -- GitLab