aboutsummaryrefslogtreecommitdiff
path: root/src/app/services
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/services')
-rw-r--r--src/app/services/cloudinary.service.ts17
-rw-r--r--src/app/services/comment.service.ts83
-rw-r--r--src/app/services/feed.service.ts50
-rw-r--r--src/app/services/language.service.ts113
-rw-r--r--src/app/services/post.service.ts86
-rw-r--r--src/app/services/technology.service.ts113
-rw-r--r--src/app/services/token.service.ts47
-rw-r--r--src/app/services/user.service.ts179
8 files changed, 688 insertions, 0 deletions
diff --git a/src/app/services/cloudinary.service.ts b/src/app/services/cloudinary.service.ts
new file mode 100644
index 0000000..999e498
--- /dev/null
+++ b/src/app/services/cloudinary.service.ts
@@ -0,0 +1,17 @@
+import {HttpClient} from '@angular/common/http';
+import {Injectable} from '@angular/core';
+import {Observable} from 'rxjs';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class CloudinaryService {
+ constructor(private _http: HttpClient)
+ { }
+
+ getFileRequest(fileLink: string): Observable<Blob> {
+ return this._http.get(fileLink, {
+ responseType: 'blob'
+ });
+ }
+}
diff --git a/src/app/services/comment.service.ts b/src/app/services/comment.service.ts
new file mode 100644
index 0000000..c9dbf35
--- /dev/null
+++ b/src/app/services/comment.service.ts
@@ -0,0 +1,83 @@
+import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Guid } from 'guid-typescript';
+import { Observable } from 'rxjs';
+import { Comment } from 'src/models/comment';
+import { AppConstants } from '../app-constants.module';
+import { TokenService } from './token.service';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class CommentService {
+ constructor(private _http: HttpClient, private _tokenService: TokenService)
+ { }
+
+ getDefaultComment(): Comment {
+ return new Comment(Guid.createEmpty(), Guid.createEmpty(), 'Gosho', 'Trapov', 'gosho_trapov', 'Your opinion on my idea?', new Date());
+ }
+
+ /* Requests from session storage */
+
+ createCommentWithSessionStorageRequest(postId: Guid, commentMessage: string): Observable<object> {
+ const userId = this._tokenService.getUserIdFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.createCommentRequest(userId, token, postId, commentMessage);
+ }
+
+ putCommentWithSessionStorageRequest(commentId: Guid, postId: Guid, newMessage: string): Observable<object> {
+ const userId = this._tokenService.getUserIdFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.putCommentRequest(userId, token, commentId, postId, newMessage);
+ }
+
+ deleteCommentWithSessionStorage(commentId: Guid): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.deleteCommentRequest(commentId, token);
+ }
+
+ /* Comment requests */
+
+ createCommentRequest(userId: Guid, authToken: string, postId: Guid, commentMessage: string): Observable<object> {
+ const body = {
+ postId: postId.toString(),
+ message: commentMessage
+ };
+ const options = {
+ params: new HttpParams().set('UserId', userId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.post(AppConstants.API_COMMENT_URL, body, options);
+ }
+
+ getCommentRequest(id: Guid): Observable<object> {
+ const options = {
+ params: new HttpParams().set('Id', id.toString())
+ };
+ return this._http.get(AppConstants.API_COMMENT_URL, options);
+ }
+
+ putCommentRequest(userId: Guid, authToken: string, commentId: Guid, postId: Guid, newMessage: string): Observable<object> {
+ const body = {
+ commentId: commentId.toString(),
+ postId: postId.toString(),
+ newMessage: newMessage
+ };
+ const options = {
+ params: new HttpParams().set('UserId', userId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.put(AppConstants.API_COMMENT_URL, body, options);
+ }
+
+ deleteCommentRequest(commentId: Guid, authToken: string): Observable<object> {
+ const options = {
+ params: new HttpParams().set('Id', commentId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.delete(AppConstants.API_COMMENT_URL, options);
+ }
+}
diff --git a/src/app/services/feed.service.ts b/src/app/services/feed.service.ts
new file mode 100644
index 0000000..d160f6d
--- /dev/null
+++ b/src/app/services/feed.service.ts
@@ -0,0 +1,50 @@
+import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Guid } from 'guid-typescript';
+import { Observable } from 'rxjs';
+import { AppConstants } from '../app-constants.module';
+import { TokenService } from './token.service';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class FeedService {
+ constructor(private _http: HttpClient, private _tokenService: TokenService)
+ { }
+
+ /* Requests from session storage */
+
+ getUserFeedFromSessionStorageRequest(pageNumber: number, firstTimeIssued: string, pageSize: number): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+ const userId = this._tokenService.getUserIdFromSessionStorageToken();
+
+ return this.getUserFeedRequest(userId, token, pageNumber, firstTimeIssued, pageSize);
+ }
+
+ /* Feed requests */
+
+ getUserFeedRequest(userId: Guid, authToken: string, pageNumber: number, firstTimeIssued: string, pageSize: number): Observable<object> {
+ const body = {
+ pageNumber: pageNumber,
+ firstPageTimeIssued: firstTimeIssued,
+ pageSize: pageSize
+ };
+ const options = {
+ params: new HttpParams().set('UserId', userId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.post(AppConstants.API_FEED_URL + '/GetPosts', body, options);
+ }
+
+ getUserPostsRequest(userName: string, pageNumber: number, firstTimeIssued: string, pageSize: number): Observable<object> {
+ const body = {
+ pageNumber: pageNumber,
+ firstPageTimeIssued: firstTimeIssued,
+ pageSize: pageSize
+ };
+ const options = {
+ params: new HttpParams().set('UserName', userName)
+ };
+ return this._http.post(AppConstants.API_FEED_URL + '/GetUserPosts', body, options);
+ }
+}
diff --git a/src/app/services/language.service.ts b/src/app/services/language.service.ts
new file mode 100644
index 0000000..15e241f
--- /dev/null
+++ b/src/app/services/language.service.ts
@@ -0,0 +1,113 @@
+import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Guid } from 'guid-typescript';
+import { Observable } from 'rxjs';
+import { Language } from 'src/models/language';
+import { AppConstants } from '../app-constants.module';
+import { TokenService } from './token.service';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class LanguageService {
+ constructor(private _http: HttpClient, private _tokenService: TokenService)
+ { }
+
+ /* Requests from session storage */
+
+ createLanguageWithSessionStorageRequest(name: string): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.createLanguageRequest(name, token);
+ }
+
+ getAllLanguagesWithSessionStorageRequest(): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.getAllLanguagesRequest(token);
+ }
+
+ putLanguageWithSessionStorageRequest(langId: Guid, newName: string): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.putLanguageRequest(token, langId, newName);
+ }
+
+ deleteLanguageWithSessionStorageRequest(langId: Guid): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.deleteLanguageRequest(token, langId);
+ }
+
+ /* Language requests */
+
+ createLanguageRequest(name: string, authToken: string): Observable<object> {
+ const body = {
+ name: name
+ };
+ const options = {
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.post(AppConstants.API_LANGUAGE_URL, body, options);
+ }
+
+ getLanguageRequest(langId: Guid): Observable<object> {
+ const options = {
+ params: new HttpParams().set('Id', langId.toString()),
+ };
+ return this._http.get(AppConstants.API_LANGUAGE_URL, options);
+ }
+
+ getAllLanguagesRequest(authToken: string): Observable<object> {
+ const options = {
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.get(AppConstants.API_LANGUAGE_URL + '/GetLanguages', options);
+ }
+
+ getFullLanguagesFromIncomplete(givenLanguages: Language[]): Promise<Language[]> {
+ if (givenLanguages.length === 0) {
+ return new Promise(resolve => resolve(givenLanguages));
+ }
+
+ // This accepts language array with incomplete languages, meaning
+ // languages that only have an id, but no name
+ return new Promise(resolve => {
+ const lastGuid = givenLanguages[givenLanguages.length - 1].id;
+
+ // For each language, request his name and assign it
+ for (const lang of givenLanguages) {
+ this.getLanguageRequest(lang.id).subscribe(
+ (result: object) => {
+ // this only assigns the "name" property to the language,
+ // because only the name is returned from the request
+ Object.assign(lang, result);
+
+ if (lastGuid === lang.id) {
+ resolve(givenLanguages);
+ }
+ }
+ );
+ }
+ });
+ }
+
+ putLanguageRequest(authToken: string, langId: Guid, newName: string): Observable<object> {
+ const body = {
+ name: newName
+ };
+ const options = {
+ params: new HttpParams().set('Id', langId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.put(AppConstants.API_LANGUAGE_URL, body, options);
+ }
+
+ deleteLanguageRequest(authToken: string, langId: Guid): Observable<object> {
+ const options = {
+ params: new HttpParams().set('Id', langId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.delete(AppConstants.API_LANGUAGE_URL, options);
+ }
+}
diff --git a/src/app/services/post.service.ts b/src/app/services/post.service.ts
new file mode 100644
index 0000000..7b2a539
--- /dev/null
+++ b/src/app/services/post.service.ts
@@ -0,0 +1,86 @@
+import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import * as FormData from 'form-data';
+import { Guid } from 'guid-typescript';
+import { Observable } from 'rxjs';
+import { Post } from 'src/models/post';
+import { AppConstants } from '../app-constants.module';
+import { TokenService } from './token.service';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class PostService {
+ constructor(private _http: HttpClient, private _tokenService: TokenService)
+ { }
+
+ getDefaultPost(): Post {
+ return new Post(Guid.createEmpty(), 'Gosho', 'Trapov', 'gosho_trapov', 'Your opinion on my idea?', new Date(), [], []);
+ }
+
+ /* Requests from session storage */
+
+ createPostWithSessionStorageRequest(postMessage: string, files: File[]): Observable<object> {
+ const userId = this._tokenService.getUserIdFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.createPostRequest(userId, token, postMessage, files);
+ }
+
+ putPostWithSessionStorageRequest(postId: Guid, newMessage: string, posts: File[]): Observable<object> {
+ const userId = this._tokenService.getUserIdFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.putPostRequest(userId, token, postId, newMessage, posts);
+ }
+
+ deletePostWithSessionStorage(postId: Guid): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.deletePostRequest(postId, token);
+ }
+
+ /* Post requests */
+
+ createPostRequest(userId: Guid, authToken: string, postMessage: string, files: File[]): Observable<object> {
+ const form = new FormData();
+ form.append('message', postMessage);
+ for (const file of files) {
+ form.append('files', file, file.name);
+ }
+ const options = {
+ params: new HttpParams().set('UserId', userId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.post(AppConstants.API_POST_URL, form, options);
+ }
+
+ getPostRequest(id: Guid): Observable<object> {
+ const options = {
+ params: new HttpParams().set('Id', id.toString())
+ };
+ return this._http.get(AppConstants.API_POST_URL, options);
+ }
+
+ putPostRequest(userId: Guid, authToken: string, postId: Guid, newMessage: string, files: File[]): Observable<object> {
+ const form = new FormData();
+ form.append('postId', postId);
+ form.append('newMessage', newMessage);
+ for (const file of files) {
+ form.append('files', file, file.name);
+ }
+ const options = {
+ params: new HttpParams().set('UserId', userId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.put(AppConstants.API_POST_URL, form, options);
+ }
+
+ deletePostRequest(postId: Guid, authToken: string): Observable<object> {
+ const options = {
+ params: new HttpParams().set('Id', postId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.delete(AppConstants.API_POST_URL, options);
+ }
+}
diff --git a/src/app/services/technology.service.ts b/src/app/services/technology.service.ts
new file mode 100644
index 0000000..dbdc039
--- /dev/null
+++ b/src/app/services/technology.service.ts
@@ -0,0 +1,113 @@
+import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Guid } from 'guid-typescript';
+import { Observable } from 'rxjs';
+import { Technology } from 'src/models/technology';
+import { AppConstants } from '../app-constants.module';
+import { TokenService } from './token.service';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class TechnologyService {
+ constructor(private _http: HttpClient, private _tokenService: TokenService)
+ { }
+
+ /* Requests from session storage */
+
+ createTechnologyWithSessionStorageRequest(name: string): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.createtTechnologyRequest(name, token);
+ }
+
+ getAllTechnologiesWithSessionStorageRequest(): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.getAllTechnologiesRequest(token);
+ }
+
+ putTechnologyWithSessionStorageRequest(langId: Guid, newName: string): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.putTechnologyRequest(token, langId, newName);
+ }
+
+ deleteTechnologyWithSessionStorageRequest(langId: Guid): Observable<object> {
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.deleteTechnologyRequest(token, langId);
+ }
+
+ /* Technology requests */
+
+ createtTechnologyRequest(name: string, authToken: string): Observable<object> {
+ const body = {
+ name: name
+ };
+ const options = {
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.post(AppConstants.API_TECHNOLOGY_URL, body, options);
+ }
+
+ getTechnologyRequest(techId: Guid): Observable<object> {
+ const options = {
+ params: new HttpParams().set('Id', techId.toString())
+ };
+ return this._http.get(AppConstants.API_TECHNOLOGY_URL, options);
+ }
+
+ getAllTechnologiesRequest(authToken: string): Observable<object> {
+ const options = {
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.get(AppConstants.API_TECHNOLOGY_URL + '/GetTechnologies', options);
+ }
+
+ getFullTechnologiesFromIncomplete(givenTechnologies: Technology[]): Promise<Technology[]> {
+ if (givenTechnologies.length === 0) {
+ return new Promise(resolve => resolve(givenTechnologies));
+ }
+
+ // This accepts language array with incomplete languages, meaning
+ // languages that only have an id, but no name
+ return new Promise(resolve => {
+ const lastGuid = givenTechnologies[givenTechnologies.length - 1].id;
+
+ // For each language, request his name and assign it
+ for (const tech of givenTechnologies) {
+ this.getTechnologyRequest(tech.id).subscribe(
+ (result: object) => {
+ // this only assigns the "name" property to the language,
+ // because only the name is returned from the request
+ Object.assign(tech, result);
+
+ if (lastGuid === tech.id) {
+ resolve(givenTechnologies);
+ }
+ }
+ );
+ }
+ });
+ }
+
+ putTechnologyRequest(authToken: string, langId: Guid, newName: string): Observable<object> {
+ const body = {
+ name: newName
+ };
+ const options = {
+ params: new HttpParams().set('Id', langId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.put(AppConstants.API_TECHNOLOGY_URL, body, options);
+ }
+
+ deleteTechnologyRequest(authToken: string, langId: Guid): Observable<object> {
+ const options = {
+ params: new HttpParams().set('Id', langId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.delete(AppConstants.API_TECHNOLOGY_URL, options);
+ }
+}
diff --git a/src/app/services/token.service.ts b/src/app/services/token.service.ts
new file mode 100644
index 0000000..62bc07e
--- /dev/null
+++ b/src/app/services/token.service.ts
@@ -0,0 +1,47 @@
+import { Injectable } from '@angular/core';
+import { Guid } from 'guid-typescript';
+import jwt_decode from 'jwt-decode';
+import { IJWTPayload } from 'src/interfaces/jwt-payload';
+import { IUserCredentials } from 'src/interfaces/user-credentials';
+import { AppConstants } from '../app-constants.module';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class TokenService {
+ constructor()
+ { }
+
+ /* Session storage */
+
+ setUserTokenToSessionStorage(response: object): void {
+ const token = JSON.stringify(response);
+ sessionStorage.setItem(AppConstants.SESSION_TOKEN_KEY, token.substr(10, token.length - 12));
+ }
+
+ getTokenFromSessionStorage(): string {
+ return sessionStorage.getItem(AppConstants.SESSION_TOKEN_KEY) ?? '';
+ }
+
+ getUserIdFromSessionStorageToken(): Guid {
+ const jwt: IJWTPayload = {
+ token: this.getTokenFromSessionStorage()
+ };
+ const userCred = jwt_decode<IUserCredentials>(jwt.token);
+
+ return userCred.ID;
+ }
+
+ getUsernameFromSessionStorageToken(): string {
+ const jwt: IJWTPayload = {
+ token: this.getTokenFromSessionStorage()
+ };
+ const userCred = jwt_decode<IUserCredentials>(jwt.token);
+
+ return userCred.Username;
+ }
+
+ logoutUserFromSessionStorage(): void {
+ sessionStorage.removeItem(AppConstants.SESSION_TOKEN_KEY);
+ }
+}
diff --git a/src/app/services/user.service.ts b/src/app/services/user.service.ts
new file mode 100644
index 0000000..31862c4
--- /dev/null
+++ b/src/app/services/user.service.ts
@@ -0,0 +1,179 @@
+import { Injectable } from '@angular/core';
+import { Guid } from 'guid-typescript';
+import { User } from '../../models/identity/user';
+import { FormGroup } from '@angular/forms';
+import { AppConstants } from 'src/app/app-constants.module';
+import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
+import { Observable } from 'rxjs';
+import { Role } from 'src/models/identity/role';
+import { Friend } from 'src/models/identity/friend';
+import { TokenService } from './token.service';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class UserService {
+ constructor(private _http: HttpClient, private _tokenService: TokenService)
+ { }
+
+ getDefaultUser(): User {
+ return new User(Guid.createEmpty(), 'gosho_trapov', 'Gosho', 'Trapov', 'gotra@bg.com', AppConstants.FALLBACK_PROFILE_ICON, [], [], [], []);
+ }
+
+ /* Requests from session storage */
+
+ getUserFromSessionStorageRequest(): Observable<object> {
+ const userId = this._tokenService.getUserIdFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.getUserRequest(userId, token);
+ }
+
+ addFriendToUserFromSessionStorageRequest(newFriendUserName: string): Observable<object> {
+ const userUserName = this._tokenService.getUsernameFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.addFriendToUserRequest(userUserName, token, newFriendUserName);
+ }
+
+ putUserFromSessionStorageRequest(updateUserFormGroup: FormGroup, userRoles: Role[], userFriends: Friend[]): Observable<object> {
+ const userId = this._tokenService.getUserIdFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.putUserRequest(userId, token, updateUserFormGroup, userRoles, userFriends);
+ }
+
+ putProfilePictureFromSessionStorageRequest(newPicture: File): Observable<object> {
+ const userId = this._tokenService.getUserIdFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.putProfilePictureRequest(userId, token, newPicture);
+ }
+
+ putBareUserFromSessionStorageRequest(user: User, password: string): Observable<object> {
+ const userId = this._tokenService.getUserIdFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.putBareUserRequest(userId, token, user, password);
+ }
+
+ deleteUserFromSessionStorageRequest(): Observable<object> {
+ const userId = this._tokenService.getUserIdFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.deleteUserRequest(userId, token);
+ }
+
+ removeFriendFromUserFromSessionStorageRequest(friendToRemoveUserName: string): Observable<object> {
+ const userUserName = this._tokenService.getUsernameFromSessionStorageToken();
+ const token = this._tokenService.getTokenFromSessionStorage();
+
+ return this.removeFriendFromUserRequest(userUserName, token, friendToRemoveUserName);
+ }
+
+
+ /* User requests */
+
+ loginUserRequest(loginUserFormGroup: FormGroup): Observable<object> {
+ const body = {
+ UserName: loginUserFormGroup.get('username')?.value,
+ Password: loginUserFormGroup.get('password')?.value
+ };
+ return this._http.post(AppConstants.API_USER_LOGIN_URL, body);
+ }
+
+ registerUserRequest(registerUserFormGroup: FormGroup): Observable<object> {
+ const body = {
+ UserName: registerUserFormGroup.get('username')?.value,
+ Email: registerUserFormGroup.get('email')?.value,
+ FirstName: registerUserFormGroup.get('firstName')?.value,
+ LastName: registerUserFormGroup.get('lastName')?.value,
+ Password: registerUserFormGroup.get('password')?.value
+ };
+ return this._http.post(AppConstants.API_USER_REGISTER_URL, body);
+ }
+
+ addFriendToUserRequest(userUserName: string, authToken: string, newFriendUserName: string): Observable<object> {
+ const body = {
+ newFriendUserName: newFriendUserName
+ };
+ const options = {
+ params: new HttpParams().set('UserName', userUserName),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.put(AppConstants.API_USER_URL + '/AddFriend', body, options);
+ }
+
+ getUserRequest(userId: Guid, authToken: string): Observable<object> {
+ const options = {
+ params: new HttpParams().set('Id', userId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.get(AppConstants.API_USER_URL, options);
+ }
+
+ getUserByUsernameRequest(username: string): Observable<object> {
+ const options = {
+ params: new HttpParams().set('UserName', username),
+ };
+ return this._http.get(AppConstants.API_USER_URL + '/GetUser', options);
+ }
+
+ putUserRequest(userId: Guid, authToken: string, updateUserFormGroup: FormGroup, userRoles: Role[], userFriends: Friend[]): Observable<object> {
+ const body = {
+ UserName: updateUserFormGroup.get('username')?.value,
+ Email: updateUserFormGroup.get('email')?.value,
+ FirstName: updateUserFormGroup.get('firstName')?.value,
+ LastName: updateUserFormGroup.get('lastName')?.value,
+ Password: updateUserFormGroup.get('password')?.value,
+ Roles: userRoles,
+ Friends: userFriends,
+ Languages: updateUserFormGroup.get('languages')?.value,
+ Technologies: updateUserFormGroup.get('technologies')?.value
+ };
+ const options = {
+ params: new HttpParams().set('Id', userId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.put(AppConstants.API_USER_URL, body, options);
+ }
+
+ putBareUserRequest(userId: Guid, authToken: string, user: User, password: string): Observable<object> {
+ const body: object = user;
+ Object.assign(body, { password: password });
+ const options = {
+ params: new HttpParams().set('Id', userId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.put(AppConstants.API_USER_URL, body, options);
+ }
+
+ putProfilePictureRequest(userId: Guid, authToken: string, newPicture: File): Observable<object> {
+ const form = new FormData();
+ form.append('picture', newPicture);
+ const options = {
+ params: new HttpParams().set('UserId', userId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.put(AppConstants.API_USER_URL + '/ProfilePicture', form, options);
+ }
+
+ deleteUserRequest(userId: Guid, authToken: string): Observable<object> {
+ const options = {
+ params: new HttpParams().set('Id', userId.toString()),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.delete(AppConstants.API_USER_URL, options);
+ }
+
+ removeFriendFromUserRequest(userUserName: string, authToken: string, friendToRemoveUserName: string): Observable<object> {
+ const body = {
+ friendUserNameToRemove: friendToRemoveUserName
+ };
+ const options = {
+ params: new HttpParams().set('UserName', userUserName),
+ headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken)
+ };
+ return this._http.post(AppConstants.API_USER_URL + '/RemoveFriend', body, options);
+ }
+}