Skip to content
Snippets Groups Projects
  • Oussama's avatar
    add delete button and delete user pop-up · 57aaddb6
    Oussama authored
    add delete user pop-up
    
    CA1, CA3 and CA4
    
    CA 2
    
    update unit tests
    
    fix alerteDuration issue
    
    add delete button
    
    add delete user pop-up
    
    CA1, CA3 and CA4
    
    CA 2
    
    update unit tests
    57aaddb6
user.service.ts 5.55 KiB
/*
 * Copyright French Prime minister Office/SGMAP/DINSIC/Vitam Program (2019-2020)
 * and the signatories of the "VITAM - Accord du Contributeur" agreement.
 *
 * contact@programmevitam.fr
 *
 * This software is a computer program whose purpose is to implement
 * implement a digital archiving front-office system for the secure and
 * efficient high volumetry VITAM solution.
 *
 * This software is governed by the CeCILL-C license under French law and
 * abiding by the rules of distribution of free software.  You can  use,
 * modify and/ or redistribute the software under the terms of the CeCILL-C
 * license as circulated by CEA, CNRS and INRIA at the following URL
 * "http://www.cecill.info".
 *
 * As a counterpart to the access to the source code and  rights to copy,
 * modify and redistribute granted by the license, users are provided only
 * with a limited warranty  and the software's author,  the holder of the
 * economic rights,  and the successive licensors  have only  limited
 * liability.
 *
 * In this respect, the user's attention is drawn to the risks associated
 * with loading,  using,  modifying and/or developing or reproducing the
 * software by the user in light of its specific status of free software,
 * that may mean  that it is complicated to manipulate,  and  that  also
 * therefore means  that it is reserved for developers  and  experienced
 * professionals having in-depth computer knowledge. Users are therefore
 * encouraged to load and test the software's suitability as regards their
 * requirements in conditions enabling the security of their systems and/or
 * data to be ensured and,  more generally, to use and operate it in the
 * same conditions as regards security.
 *
 * The fact that you are presently reading this means that you have had
 * knowledge of the CeCILL-C license and that you accept its terms.
 */
import { Observable, Subject } from 'rxjs';
import { map, tap } from 'rxjs/operators';
import {
  AdminUserProfile, AuthUser, Criterion, Operators, Profile, SearchQuery,
  SearchService, User
} from 'ui-frontend-common';

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

import { UserApiService } from '../core/api/user-api.service';
import { ProfileService } from '../profile/profile.service';
import { VitamUISnackBar, VitamUISnackBarComponent } from '../shared/vitamui-snack-bar';

@Injectable()
export class UserService extends SearchService<User> {

  userUpdated = new Subject<User>();

  constructor(
    private userApi: UserApiService,
    private snackBar: VitamUISnackBar,
    private rngProfileService: ProfileService,
    http: HttpClient
  ) {
    super(http, userApi, '');
  }

  create(user: User) {
    user.email = user.email;

    return this.userApi.create(user).pipe(
      tap(
        (response: User) => {
          this.snackBar.openFromComponent(VitamUISnackBarComponent, {
            panelClass: 'vitamui-snack-bar',
            data: { type: 'userCreate', firstname: response.firstname, lastname: response.lastname },
            duration: 10000
          });
        },
        (error) => {
          this.snackBar.open(error.error.message, null, {
            panelClass: 'vitamui-snack-bar',
            duration: 10000
          });
        }
      )
    );
  }

  get(id: string): Observable<User> {
    return this.userApi.getOne(id);
  }

  exists(email: string): Observable<any> {
    const criterionArray: Criterion[] = [];
    criterionArray.push({ key: 'email', value: email, operator: Operators.equalsIgnoreCase });
    const query: SearchQuery = { criteria: criterionArray };

    const params = [{ key: 'criteria', value: JSON.stringify(query) }];

    return this.userApi.checkExistsByParam(params);
  }

  patch(partialUser: { id: string, [key: string]: any }): Observable<User> {
    return this.userApi.patch(partialUser).pipe(
      tap((response) => this.userUpdated.next(response)),
      tap(
        (updatedUser: User) => {
          this.snackBar.openFromComponent(VitamUISnackBarComponent, {
            panelClass: 'vitamui-snack-bar',
            duration: 10000,
            data: { type: 'userUpdate', firstname: updatedUser.firstname, lastname: updatedUser.lastname },
          });
        },
        (error) => {
          this.snackBar.open(error.error.message, null, {
            panelClass: 'vitamui-snack-bar',
            duration: 10000
          });
        }
      )
    );
  }


  deleteUser(partialUser: { id: string, [key: string]: any }) : Observable<User>{
    return this.userApi.patch(partialUser).pipe(
      tap((response) => this.userUpdated.next(response)),
      tap(
        (user: User) => {
          this.snackBar.openFromComponent(VitamUISnackBarComponent, {
            panelClass: 'vitamui-snack-bar',
            duration: 10000,
            data: { type: 'userDelete', firstname: user.firstname, lastname: user.lastname },
          });
        },
        (error) => {
          this.snackBar.open(error.error.message, null, {
            panelClass: 'vitamui-snack-bar',
            duration: 10000
          });
        }
      )
    );


  }

  getUserProfileInfo(connectedUser: AuthUser): AdminUserProfile | null {
    let userInfo = null;
    connectedUser.profileGroup.profiles.forEach((profile: Profile) => {
      if (profile.applicationName === 'USERS_APP') {
        userInfo = this.rngProfileService.convertToAdminUserProfile(profile.roles);
      }
    });

    return userInfo;
  }

  getLevelsNoEmpty(query?: SearchQuery): Observable<string[]> {
    return this.userApi.getLevels(query)
      .pipe(
        map((levels) => levels.filter((l) => !!l))
      );
  }

}