Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { Injectable } from '@angular/core';
- import { HttpClient, HttpResponse, HttpErrorResponse } from '@angular/common/http';
- import { User, Role } from 'src/app/models/user.model';
- import { environment } from './../../../environments/environment';
- import { Observable, throwError } from 'rxjs';
- import { TokenService } from '../token/token.service';
- import { tap, catchError } from 'rxjs/operators';
- import { Router } from '@angular/router';
- import { ToastrService } from 'ngx-toastr';
- import { SocketService, SocketEvents } from '../socket/socket.service';
- interface LoginData {
- username: string;
- password: string;
- }
- interface AuthResponse {
- token: string;
- }
- interface RegisterData {
- username: string;
- password: string;
- name: string;
- surname: string;
- role: Role;
- }
- @Injectable({
- providedIn: 'root'
- })
- export class UserService {
- constructor(private http: HttpClient, private tokenService: TokenService, private router: Router,
- private toastr: ToastrService, private socket: SocketService) { }
- public login(user: LoginData): Observable<AuthResponse> {
- return this.http.post<AuthResponse>(`${environment.serverUrl}${environment.apiUrl}/login`, user)
- .pipe(
- tap( (res) => {
- this.tokenService.setToken(res.token);
- this.socket.broadcast(SocketEvents.USER_AUTHENTICATED, res.token);
- this.router.navigateByUrl('tables');
- this.toastr.success('Succesfully logged in', 'Login');
- }),
- catchError((error: HttpErrorResponse) => {
- if (error.error instanceof ErrorEvent) {
- // A client-side or network error occurred.
- this.toastr.warning(`Check your internet connection and retry \n ${error.error.message}`, 'Unexpected Error!');
- // console.error('An error occurred:', error.error.message);
- } else {
- // The backend returned an unsuccessful response code.
- if (error.status === 401) {
- this.toastr.error('Please check your username or password', 'Login failed');
- } else {
- this.toastr.error('Our server is not working properly, please try again later', 'Server error!');
- }
- // console.log(error.error);
- }
- // return an observable with a user-facing error message
- return throwError('Something bad happened; please try again later.');
- })
- );
- }
- public register(user: RegisterData): Observable<AuthResponse> {
- return this.http.post<AuthResponse>(`${environment.serverUrl}${environment.apiUrl}/register`, user)
- .pipe(
- tap( (res) => {
- this.tokenService.setToken(res.token);
- this.socket.broadcast(SocketEvents.USER_AUTHENTICATED, res.token);
- this.router.navigateByUrl('menu');
- this.toastr.success('You have succesfully registered', 'Welcome');
- }),
- catchError((error: HttpErrorResponse) => {
- if (error.error instanceof ErrorEvent) {
- // A client-side or network error occurred.
- this.toastr.warning(`Check your internet connection and retry \n ${error.error.message}`, 'Unexpected Error!');
- // console.error('An error occurred:', error.error.message);
- } else {
- // The backend returned an unsuccessful response code.
- if (error.status === 400) {
- this.toastr.error(`${error.error.message}`, 'Registration failed');
- } else {
- this.toastr.error('Our server is not working properly, please try again later', 'Server error!');
- }
- // console.log(error.error);
- }
- // return an observable with a user-facing error message
- return throwError('Something bad happened; please try again later.');
- })
- );
- }
- public logout(): void {
- const token = this.tokenService.getToken();
- this.tokenService.removeToken();
- this.socket.broadcast(SocketEvents.USER_SIGNED_OUT, token);
- this.router.navigateByUrl('auth');
- }
- public getUser(): User {
- const token = this.tokenService.getToken();
- if (token) {
- return this.tokenService.getUserFromToken(token);
- }
- return null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement