Index: src/Clients/Angular/finki-chattery/.vscode/launch.json
===================================================================
--- src/Clients/Angular/finki-chattery/.vscode/launch.json	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,15 +1,0 @@
-{
-    // Use IntelliSense to learn about possible attributes.
-    // Hover to view descriptions of existing attributes.
-    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
-    "version": "0.2.0",
-    "configurations": [
-        {
-            "type": "pwa-chrome",
-            "request": "launch",
-            "name": "Launch Chrome against localhost",
-            "url": "http://localhost:8080",
-            "webRoot": "${workspaceFolder}"
-        }
-    ]
-}
Index: src/Clients/Angular/finki-chattery/angular.json
===================================================================
--- src/Clients/Angular/finki-chattery/angular.json	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/angular.json	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -28,5 +28,5 @@
             "aot": true,
             "assets": [
-              "src/favicon.png",
+              "src/favicon.ico",
               "src/assets",
               "src/callback.html",
@@ -98,12 +98,6 @@
             "tsConfig": "tsconfig.spec.json",
             "karmaConfig": "karma.conf.js",
-            "assets": [
-              "src/favicon.png",
-              "src/assets"
-            ],
-            "styles": [
-              "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
-              "src/styles.scss"
-            ],
+            "assets": ["src/favicon.ico", "src/assets"],
+            "styles": ["./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.scss"],
             "scripts": []
           }
@@ -112,12 +106,6 @@
           "builder": "@angular-devkit/build-angular:tslint",
           "options": {
-            "tsConfig": [
-              "tsconfig.app.json",
-              "tsconfig.spec.json",
-              "e2e/tsconfig.json"
-            ],
-            "exclude": [
-              "**/node_modules/**"
-            ]
+            "tsConfig": ["tsconfig.app.json", "tsconfig.spec.json", "e2e/tsconfig.json"],
+            "exclude": ["**/node_modules/**"]
           }
         },
@@ -137,7 +125,4 @@
     }
   },
-  "defaultProject": "finki-chattery",
-  "cli": {
-    "analytics": false
-  }
+  "defaultProject": "finki-chattery"
 }
Index: src/Clients/Angular/finki-chattery/package-lock.json
===================================================================
--- src/Clients/Angular/finki-chattery/package-lock.json	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/package-lock.json	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1746,19 +1746,4 @@
       }
     },
-    "@tinymce/tinymce-angular": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@tinymce/tinymce-angular/-/tinymce-angular-4.0.0.tgz",
-      "integrity": "sha512-CmsKournkWWK5O7d8qgZQPvRC76z36GjeD3ZAHZEY/kUXKWAIXfbrHxxgQq9m7+wlfZq9QNgRx5ufN9y9N46DQ==",
-      "requires": {
-        "tslib": "^1.10.0"
-      },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
-      }
-    },
     "@types/glob": {
       "version": "7.1.3",
@@ -7799,12 +7784,4 @@
           "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
         }
-      }
-    },
-    "ngx-pipes": {
-      "version": "2.7.6",
-      "resolved": "https://registry.npmjs.org/ngx-pipes/-/ngx-pipes-2.7.6.tgz",
-      "integrity": "sha512-FAeMd1mI8jCnnrhUuNLXs+PaVT1ujhA0QD3KRBDuzGFcbnP7NMXR2EJ5KYbV39LDNuRCluhpfwZudQu/NvrVuA==",
-      "requires": {
-        "tslib": "^2.0.0"
       }
     },
Index: src/Clients/Angular/finki-chattery/package.json
===================================================================
--- src/Clients/Angular/finki-chattery/package.json	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/package.json	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -29,9 +29,7 @@
     "@ngrx/store-devtools": "^11.0.1",
     "@ngx-translate/core": "^13.0.0",
-    "@tinymce/tinymce-angular": "^4.0.0",
     "moment": "^2.29.1",
     "ng2-file-upload": "^1.4.0",
     "ngx-material-timepicker": "^5.5.3",
-    "ngx-pipes": "^2.7.6",
     "ngx-toastr": "^13.2.1",
     "oidc-client": "^1.11.5",
Index: src/Clients/Angular/finki-chattery/src/app/app-routing.module.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/app-routing.module.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/app-routing.module.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,32 +1,9 @@
 import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
-import { AuthCallbackComponent } from './auth-callback/auth-callback.component';
-import { AuthorizedModeratorGuard } from './core/guards/authorized-moderator.guard';
-import { AuthorizedGuard } from './core/guards/authorized.guard';
 
 const routes: Routes = [
   {
-    path: 'questioning',
-    canActivate: [AuthorizedGuard],
-    loadChildren: () => import('./modules/questioning/questioning.module').then((x) => x.QuestioningModule)
-  },
-  {
-    path: 'moderating',
-    canActivate: [AuthorizedGuard, AuthorizedModeratorGuard],
-    loadChildren: () => import('./modules/moderating/moderating.module').then((x) => x.ModeratingModule)
-  },
-  {
-    path: 'auth-callback',
-    pathMatch: 'full',
-    component: AuthCallbackComponent
-  },
-  {
-    path: '',
-    pathMatch: 'full',
-    redirectTo: 'questioning/preview'
-  },
-  {
     path: '**',
-    redirectTo: 'questioning/preview'
+    redirectTo: 'public/home'
   }
 ];
Index: src/Clients/Angular/finki-chattery/src/app/app.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/app.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/app.component.html	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,5 +1,5 @@
 <main>
   <mat-progress-bar class="global-loader" [class.hidden]="!(loader.isLoading | async)" mode="indeterminate"></mat-progress-bar>
-  <app-header></app-header>
   <router-outlet></router-outlet>
+  <button (click)="login()">LOGIN</button>
 </main>
Index: src/Clients/Angular/finki-chattery/src/app/app.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/app.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/app.component.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,4 +1,4 @@
 import { Component, OnInit } from '@angular/core';
-import { LoaderService } from './core/services';
+import { AuthService, LoaderService, RedirectService } from './core/services';
 
 @Component({
@@ -8,6 +8,12 @@
 })
 export class AppComponent implements OnInit {
-  constructor(public loader: LoaderService) {}
+  constructor(public loader: LoaderService, private redirect: RedirectService, private auth: AuthService) {}
 
-  ngOnInit(): void {}
+  ngOnInit(): void {
+    this.redirect.redirectLoggedInUser();
+  }
+
+  public login(): void {
+    this.auth.login();
+  }
 }
Index: src/Clients/Angular/finki-chattery/src/app/app.module.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/app.module.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/app.module.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -10,12 +10,13 @@
 import { CoreModule } from './core/core.module';
 import { translateConfiguration, TranslateFromJsonService } from './shared-app/services';
-import { AuthCallbackComponent } from './auth-callback/auth-callback.component';
+import { SharedMaterialModule } from './shared-material/shared-material.module';
 
 @NgModule({
-  declarations: [AppComponent, AuthCallbackComponent],
+  declarations: [AppComponent],
   imports: [
+    BrowserModule,
     AppRoutingModule,
-    BrowserModule,
     CoreModule,
+    SharedMaterialModule,
     BrowserAnimationsModule,
     ToastrModule.forRoot(),
Index: src/Clients/Angular/finki-chattery/src/app/auth-callback/auth-callback.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/auth-callback/auth-callback.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,15 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { AuthService, RedirectService } from '../core/services';
-
-@Component({
-  selector: 'app-auth-callback',
-  template: ''
-})
-export class AuthCallbackComponent implements OnInit {
-  constructor(private redirect: RedirectService, private auth: AuthService) {}
-
-  async ngOnInit(): Promise<void> {
-    await this.auth.completeAuthentication();
-    this.redirect.redirectLoggedInUser();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/core.module.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/core.module.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/core/core.module.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -9,14 +9,15 @@
 import { SharedMaterialModule } from '../shared-material/shared-material.module';
 import { COMPONENTS } from './components/components';
+import { GUARDS } from './guards/guards';
 import { LoaderInterceptor } from './interceptors/loader.interceptor';
+import { SERVICES } from './services/services';
 import { reducers } from './state';
 import { TokenInterceptor } from './interceptors/token.interceptor';
-import { EffectsModule } from '@ngrx/effects';
-import { QuestionEffects } from './state/question-state/question.effects';
-import { CategoriesEffects } from './state/category-state/category.effects';
 
 @NgModule({
   declarations: [COMPONENTS],
   providers: [
+    SERVICES,
+    GUARDS,
     { provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true },
     { provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true }
@@ -32,8 +33,7 @@
       maxAge: 25,
       logOnly: !environment.production
-    }),
-    EffectsModule.forRoot([QuestionEffects, CategoriesEffects])
+    })
   ],
-  exports: [HttpClientModule, SharedAppModule, COMPONENTS]
+  exports: [HttpClientModule, COMPONENTS]
 })
 export class CoreModule {}
Index: src/Clients/Angular/finki-chattery/src/app/core/guards/authorized-moderator.guard.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/guards/authorized-moderator.guard.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,14 +1,0 @@
-import { Injectable } from '@angular/core';
-import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
-import { AuthService } from '../services';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class AuthorizedModeratorGuard implements CanActivate {
-  constructor(private auth: AuthService) {}
-
-  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
-    return this.auth.isModerator();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/guards/authorized-student.guard.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/guards/authorized-student.guard.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,14 +1,0 @@
-import { Injectable } from '@angular/core';
-import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
-import { AuthService } from '../services';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class AuthorizedStudentGuard implements CanActivate {
-  constructor(private auth: AuthService) {}
-
-  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
-    return this.auth.isStudent();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/guards/authorized.guard.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/guards/authorized.guard.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-import { Injectable } from '@angular/core';
-import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
-
-import { AuthService } from '../services';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class AuthorizedGuard implements CanActivate {
-  constructor(private auth: AuthService) {}
-
-  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
-    if (this.auth.isLoggedIn()) {
-      return true;
-    }
-
-    this.auth.login();
-    return false;
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/guards/guards.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/guards/guards.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/Clients/Angular/finki-chattery/src/app/core/guards/guards.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,1 @@
+export const GUARDS: any[] = [];
Index: src/Clients/Angular/finki-chattery/src/app/core/interceptors/loader.interceptor.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/interceptors/loader.interceptor.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/core/interceptors/loader.interceptor.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -13,14 +13,6 @@
 
   intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
-    setTimeout(() => {
-      this.loader.appIsLoading();
-    }, 0);
-    return next.handle(request).pipe(
-      finalize(() =>
-        setTimeout(() => {
-          this.loader.appStopedLoading();
-        }, 100)
-      )
-    );
+    this.loader.appIsLoading();
+    return next.handle(request).pipe(finalize(() => this.loader.appStopedLoading()));
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/core/interceptors/token.interceptor.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/interceptors/token.interceptor.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/core/interceptors/token.interceptor.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -2,4 +2,5 @@
 import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
 import { Observable } from 'rxjs';
+import { switchMap } from 'rxjs/operators';
 
 import { AuthService } from '../services';
@@ -15,9 +16,12 @@
     }
 
-    const requestToForward = request.clone({
-      setHeaders: { Authorization: `Bearer ${this.auth.currentUserToken()}` }
-    });
-
-    return next.handle(requestToForward);
+    return this.auth.currentUserToken().pipe(
+      switchMap((token) => {
+        const requestToForward = request.clone({
+          setHeaders: { Authorization: `Bearer ${token}` }
+        });
+        return next.handle(requestToForward);
+      })
+    );
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/core/services/auth.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/services/auth.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/core/services/auth.service.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,8 +1,9 @@
 import { Injectable } from '@angular/core';
-import { User, UserManager } from 'oidc-client';
-import { Observable, of } from 'rxjs';
+import { UserManager } from 'oidc-client';
+import { Observable, from, of } from 'rxjs';
+import { map, switchMap } from 'rxjs/operators';
 
 import { environment } from '@env/environment';
-import { ApplicationUser, ApplicationUserType, SelfUserResponse } from 'src/app/shared-app/models';
+import { ApplicationUser, SelfUserResponse } from 'src/app/shared-app/models';
 import { BaseApiService } from 'src/app/shared-app/services/base-api.service';
 
@@ -14,34 +15,11 @@
     authority: environment.identityRoute,
     client_id: environment.identityClientId,
-    redirect_uri: `${window.location.origin}/auth-callback`,
+    redirect_uri: `${window.location.origin}`,
     response_type: 'id_token token',
     scope: 'openid app.api.finki-chattery profile',
-    post_logout_redirect_uri: window.location.origin,
-    filterProtocolClaims: true,
-    loadUserInfo: true
+    post_logout_redirect_uri: window.location.origin
   });
 
-  public user: ApplicationUser | null = null;
-  public oidcUser: User | null = null;
-  public selfUser: SelfUserResponse | null = null;
-
-  constructor(private baseApi: BaseApiService) {
-    this.userManager.getUser().then((user) => {
-      this.oidcUser = user;
-      this.user = new ApplicationUser(
-        user?.profile.id,
-        user?.profile.userType,
-        user?.profile.emailAddress,
-        user?.profile.username,
-        user?.profile.isVerified
-      );
-
-      this.selfUserDto().subscribe((selfUser) => {
-        if (selfUser) {
-          this.selfUser = selfUser;
-        }
-      });
-    });
-  }
+  constructor(private baseApi: BaseApiService) {}
 
   public login(): void {
@@ -53,61 +31,59 @@
   }
 
-  public isLoggedIn(): boolean {
-    if (this.oidcUser) {
-      return !this.oidcUser.expired;
-    }
-    return false;
+  public isLoggedIn(): Observable<boolean> {
+    return from(this.userManager.getUser()).pipe(
+      map((user) => {
+        if (user) {
+          return true;
+        }
+
+        return false;
+      })
+    );
   }
 
-  public isStudent(): boolean {
-    return this.user !== null && this.user.userType === ApplicationUserType.Student;
+  public currentUser(): Observable<ApplicationUser | null> {
+    return from(this.userManager.getUser()).pipe(
+      map((user) => {
+        if (!user) {
+          return null;
+        }
+
+        return new ApplicationUser(
+          user.profile.id,
+          user.profile.userType,
+          user.profile.emailAddress,
+          user.profile.username,
+          user.profile.isVerified
+        );
+      })
+    );
   }
 
-  public isModerator(): boolean {
-    return this.user !== null && this.user.userType === ApplicationUserType.Moderator;
-  }
+  public currentUserToken(): Observable<string> {
+    return from(this.userManager.getUser()).pipe(
+      map((user) => {
+        if (user?.access_token) {
+          return user.access_token;
+        }
 
-  public currentUser(): ApplicationUser | null {
-    return this.user;
-  }
-
-  public currentUserToken(): string {
-    if (this.oidcUser) {
-      return this.oidcUser.access_token;
-    }
-
-    return '';
+        return '';
+      })
+    );
   }
 
   public selfUserDto(): Observable<SelfUserResponse | null> {
-    if (this.isLoggedIn()) {
-      return this.baseApi.getSelfUser();
-    }
-    return of(null);
+    return this.isLoggedIn().pipe(
+      switchMap((loggedIn) => {
+        if (loggedIn) {
+          return this.baseApi.getSelfUser();
+        }
+        return of(null);
+      })
+    );
   }
 
-  public async completeAuthentication(): Promise<void> {
-    return await this.userManager.signinRedirectCallback().then((user: User) => {
-      this.oidcUser = user;
-      this.user = new ApplicationUser(
-        user.profile.id,
-        user.profile.userType,
-        user.profile.emailAddress,
-        user.profile.username,
-        user.profile.isVerified
-      );
-
-      if (!this.selfUser) {
-        this.selfUserDto().subscribe((selfUser) => {
-          if (selfUser) {
-            this.selfUser = selfUser;
-          }
-        });
-      }
-    });
-  }
-
-  public studentCheckedNotifications(): Observable<void> {
-    return this.baseApi.post('v1/students/checked-notifications');
+  public signupCallback(): Observable<boolean> {
+    return from(this.userManager.signinRedirectCallback()).pipe(map((user) => user !== null));
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/core/services/notification.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/services/notification.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/core/services/notification.service.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -22,8 +22,5 @@
 
   public successNotification(title: string, description?: string): void {
-    if (description) {
-      this.toastr.success(this.translate.instant(description), this.translate.instant(title));
-    }
-    this.toastr.success(this.translate.instant(title));
+    this.toastr.success(this.translate.instant(description), this.translate.instant(title));
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/core/services/redirect.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/services/redirect.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/core/services/redirect.service.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,4 +1,5 @@
 import { Injectable } from '@angular/core';
 import { Router } from '@angular/router';
+import { switchMap } from 'rxjs/operators';
 
 import { ApplicationUserType } from 'src/app/shared-app/models';
@@ -12,18 +13,17 @@
 
   public redirectLoggedInUser(): void {
-    const currentUser = this.auth.user;
-
-    if (currentUser) {
-      switch (currentUser.userType) {
-        case ApplicationUserType.Student:
-          this.router.navigateByUrl(`questioning/preview`);
-          break;
-        case ApplicationUserType.Teacher:
-          break;
-        case ApplicationUserType.Moderator:
-          this.router.navigateByUrl(`moderating/categories`);
-          break;
-      }
-    }
+    this.auth
+      .signupCallback()
+      .pipe(switchMap(() => this.auth.currentUser()))
+      .subscribe((currentUser) => {
+        if (currentUser) {
+          switch (currentUser.userType) {
+            case ApplicationUserType.Student:
+              break;
+            case ApplicationUserType.Teacher:
+              break;
+          }
+        }
+      });
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/core/services/services.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/services/services.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/core/services/services.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,1 @@
+export const SERVICES: any[] = [];
Index: src/Clients/Angular/finki-chattery/src/app/core/services/student-question.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/services/student-question.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,30 +1,0 @@
-import { Injectable } from '@angular/core';
-import { AnswerQuestionStateViewModel, AnswerResponseQuestionStateViewModel } from 'src/app/shared-app/models';
-import { AuthService } from '.';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class StudentQuestionService {
-  constructor(private auth: AuthService) {}
-
-  currentUserCanEditAnswer(answer: AnswerQuestionStateViewModel): boolean {
-    return this.auth.selfUser?.student?.uid === answer.student.uid;
-  }
-
-  currentUserCanEditAnswerResponse(answerResponse: AnswerResponseQuestionStateViewModel): boolean {
-    return this.auth.selfUser?.student?.uid === answerResponse.student.uid;
-  }
-
-  currentUserCanDeleteAnswer(answer: AnswerQuestionStateViewModel): boolean {
-    return this.auth.selfUser?.student?.uid === answer.student.uid;
-  }
-
-  currentUserCanNotDeleteAnswerBecauseMarkedCorrectEvenThoughHeIsTheAuthor(answer: AnswerQuestionStateViewModel): boolean {
-    return this.auth.selfUser?.student?.uid === answer.student.uid && answer.correctAnswer;
-  }
-
-  currentUserCanDeleteAnswerResponse(answerResponse: AnswerResponseQuestionStateViewModel): boolean {
-    return this.auth.selfUser?.student?.uid === answerResponse.student.uid;
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/category-facade.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/category-facade.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,42 +1,0 @@
-import { HttpErrorResponse } from '@angular/common/http';
-import { Injectable } from '@angular/core';
-import { Action, Store } from '@ngrx/store';
-import { Observable, throwError } from 'rxjs';
-import { catchError, filter, map } from 'rxjs/operators';
-
-import { CategoryStateViewModel } from 'src/app/shared-app/models';
-import { AddCategory, EffectStartedWorking, GetCategoriesState } from './category-state/category.actions';
-import { categoriesStateQuery } from './category-state/category.selectors';
-import { CategoryState } from './category-state/category.state';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class CategoryFacadeService {
-  effectWorking$: Observable<boolean | HttpErrorResponse>;
-
-  constructor(private store: Store<CategoryState>) {
-    this.effectWorking$ = this.store.select(categoriesStateQuery.effectWorking).pipe(filter((effect) => effect !== null));
-  }
-
-  public getCategories(): Observable<CategoryStateViewModel[]> {
-    return this.store.select(categoriesStateQuery.getCategories);
-  }
-
-  public fetchCategories(): void {
-    this.dispatchEffect(new GetCategoriesState());
-  }
-
-  public addNewCategory(name: string): void {
-    this.dispatchEffect(new AddCategory(name));
-  }
-
-  private dispatch(action: Action): void {
-    this.store.dispatch(action);
-  }
-
-  private dispatchEffect(action: Action): void {
-    this.dispatch(new EffectStartedWorking());
-    this.dispatch(action);
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category-state-request.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category-state-request.models.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,3 +1,0 @@
-export class CreateCategoryRequest {
-  constructor(public name: string) {}
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category-state.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category-state.models.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,4 +1,0 @@
-export class CategoryStateResponse {
-  public uid!: string;
-  public name!: string;
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.actions.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.actions.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,62 +1,0 @@
-import { HttpErrorResponse } from '@angular/common/http';
-import { Action } from '@ngrx/store';
-import { CategoryStateViewModel } from 'src/app/shared-app/models';
-
-export enum CategoryActionTypes {
-  GetCategoriesState = '[Category] Get state',
-  GetCategoriesStateSuccess = '[Category] Get state success',
-  AddCategory = '[Category] AddCategory',
-  AddCategorySuccess = '[Category] AddCategorySuccess success',
-  EffectStartedWorking = '[Category] Effect Started Working',
-  EffectFinishedWorking = '[Category] Effect Finished Working',
-  EffectFinishedWorkingError = '[Category] Effect Finished Working error'
-}
-
-export class GetCategoriesState implements Action {
-  readonly type = CategoryActionTypes.GetCategoriesState;
-
-  constructor() {}
-}
-
-export class GetCategoriesStateSuccess implements Action {
-  readonly type = CategoryActionTypes.GetCategoriesStateSuccess;
-
-  constructor(public payload: CategoryStateViewModel[]) {}
-}
-
-export class AddCategory implements Action {
-  readonly type = CategoryActionTypes.AddCategory;
-
-  constructor(public name: string) {}
-}
-
-export class AddCategorySuccess implements Action {
-  readonly type = CategoryActionTypes.AddCategorySuccess;
-
-  constructor(public payload: CategoryStateViewModel) {}
-}
-
-export class EffectStartedWorking implements Action {
-  readonly type = CategoryActionTypes.EffectStartedWorking;
-
-  constructor() {}
-}
-
-export class EffectFinishedWorking implements Action {
-  readonly type = CategoryActionTypes.EffectFinishedWorking;
-
-  constructor() {}
-}
-
-export class EffectFinishedWorkingError implements Action {
-  readonly type = CategoryActionTypes.EffectFinishedWorkingError;
-
-  constructor(public payload: HttpErrorResponse) {}
-}
-
-export type CategoryAction =
-  | GetCategoriesStateSuccess
-  | AddCategorySuccess
-  | EffectStartedWorking
-  | EffectFinishedWorking
-  | EffectFinishedWorkingError;
Index: src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.effects.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.effects.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,55 +1,0 @@
-import { Injectable } from '@angular/core';
-import { Actions, createEffect, ofType } from '@ngrx/effects';
-import { catchError, mergeMap, switchMap } from 'rxjs/operators';
-import { TranslateFromJsonService } from 'src/app/shared-app/services';
-
-import { BaseApiService } from 'src/app/shared-app/services/base-api.service';
-import { CreateCategoryRequest } from './category-state-request.models';
-import { CategoryStateResponse } from './category-state.models';
-import {
-  AddCategory,
-  AddCategorySuccess,
-  CategoryActionTypes,
-  EffectFinishedWorking,
-  EffectFinishedWorkingError,
-  GetCategoriesState,
-  GetCategoriesStateSuccess
-} from './category.actions';
-import { CategoriesMapper } from './category.mapper';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class CategoriesEffects {
-  constructor(private actions$: Actions, private api: BaseApiService, private translate: TranslateFromJsonService) {}
-
-  getCategoriesState$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<GetCategoriesState>(CategoryActionTypes.GetCategoriesState),
-      switchMap((action) => {
-        return this.api.get<CategoryStateResponse[]>(`v1/categories`).pipe(
-          switchMap((state) => [
-            new GetCategoriesStateSuccess(CategoriesMapper.ToCategoriesStateViewModel(state, this.translate)),
-            new EffectFinishedWorking()
-          ]),
-          catchError((err) => [new EffectFinishedWorkingError(err)])
-        );
-      })
-    );
-  });
-
-  addCategory$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<AddCategory>(CategoryActionTypes.AddCategory),
-      mergeMap((action) => {
-        return this.api.post<string>(`v1/categories`, new CreateCategoryRequest(action.name)).pipe(
-          switchMap((state) => [
-            new AddCategorySuccess(CategoriesMapper.ToCategoryStateViewModel(state, action.name, this.translate)),
-            new EffectFinishedWorking()
-          ]),
-          catchError((err) => [new EffectFinishedWorkingError(err)])
-        );
-      })
-    );
-  });
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.mapper.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.mapper.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,16 +1,0 @@
-import { CategoryStateViewModel } from 'src/app/shared-app/models';
-import { TranslateFromJsonService } from 'src/app/shared-app/services';
-import { CategoryStateResponse } from './category-state.models';
-
-export class CategoriesMapper {
-  public static ToCategoriesStateViewModel(
-    categoriesResponse: CategoryStateResponse[],
-    translate: TranslateFromJsonService
-  ): CategoryStateViewModel[] {
-    return categoriesResponse.map((x) => new CategoryStateViewModel(x.uid, x.name, translate.instant(x.name)));
-  }
-
-  public static ToCategoryStateViewModel(uid: string, name: string, translate: TranslateFromJsonService): CategoryStateViewModel {
-    return new CategoryStateViewModel(uid, name, translate.instant(name));
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.reducers.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.reducers.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,44 +1,0 @@
-import { CategoryAction, CategoryActionTypes } from './category.actions';
-import { CategoryState, initialState } from './category.state';
-
-export function reducer(state = initialState, action: CategoryAction): CategoryState {
-  switch (action.type) {
-    case CategoryActionTypes.GetCategoriesStateSuccess:
-      return {
-        ...state,
-        categories: action.payload
-      };
-    case CategoryActionTypes.AddCategorySuccess: {
-      return {
-        ...state,
-        categories: [action.payload, ...state.categories]
-      };
-    }
-    case CategoryActionTypes.EffectStartedWorking: {
-      return {
-        ...state,
-        effectWorking: true
-      };
-    }
-
-    case CategoryActionTypes.EffectFinishedWorking: {
-      return {
-        ...state,
-        effectWorking: false
-      };
-    }
-
-    case CategoryActionTypes.EffectFinishedWorkingError: {
-      return {
-        ...state,
-        effectWorking: action.payload
-      };
-    }
-
-    default: {
-      return {
-        ...state
-      };
-    }
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.selectors.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.selectors.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,12 +1,0 @@
-import { createFeatureSelector, createSelector } from '@ngrx/store';
-import { CategoryState, categoryStateKey } from './category.state';
-
-export const getCategoriesState = createFeatureSelector<CategoryState>(categoryStateKey);
-
-const getCategories = createSelector(getCategoriesState, (state) => state.categories);
-const effectWorking = createSelector(getCategoriesState, (state) => state.effectWorking);
-
-export const categoriesStateQuery = {
-  effectWorking,
-  getCategories
-};
Index: src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.state.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/category-state/category.state.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,14 +1,0 @@
-import { HttpErrorResponse } from '@angular/common/http';
-import { CategoryStateViewModel } from 'src/app/shared-app/models';
-
-export const categoryStateKey = 'category';
-
-export interface CategoryState {
-  categories: CategoryStateViewModel[];
-  effectWorking: boolean | HttpErrorResponse;
-}
-
-export const initialState: CategoryState = {
-  categories: [],
-  effectWorking: false
-};
Index: src/Clients/Angular/finki-chattery/src/app/core/state/index.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/index.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/index.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,15 +1,5 @@
 import { ActionReducerMap } from '@ngrx/store';
-import { QuestionState } from './question-state/question.state';
-import { reducer as questionReducer } from './question-state/question.reducers';
-import { CategoryState } from './category-state/category.state';
-import { reducer as categoryReducer } from './category-state/category.reducers';
 
-export interface State {
-  question: QuestionState;
-  category: CategoryState;
-}
+export interface State {}
 
-export const reducers: ActionReducerMap<State, any> = {
-  question: questionReducer,
-  category: categoryReducer
-};
+export const reducers: ActionReducerMap<State, any> = {};
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-facade.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-facade.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,142 +1,0 @@
-import { HttpErrorResponse } from '@angular/common/http';
-import { Injectable } from '@angular/core';
-import { Action, Store } from '@ngrx/store';
-import { Observable, Subject } from 'rxjs';
-import { filter, map } from 'rxjs/operators';
-
-import {
-  PreviewQuestionsOrderEnum,
-  PreviewQuestionViewModel,
-  QuestionStateViewModel,
-  SearchQuestionsQueryViewModel,
-  VoteType
-} from 'src/app/shared-app/models';
-import { AuthService } from '../services';
-import {
-  AnswerQuestion,
-  DeleteAnswer,
-  DeleteAnswerResponse,
-  EditAnswerQuestion,
-  EditAnswerResponse,
-  EffectStartedWorking,
-  GetPreviewQuestionsLatest,
-  GetPreviewQuestionsPopular,
-  GetQuestionState,
-  GetSearchQuestions,
-  RespondToAnswer,
-  SetCorrectAnswer,
-  VoteAnswer
-} from './question-state/question.actions';
-import { questionStateQuery } from './question-state/question.selectors';
-import { QuestionState } from './question-state/question.state';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class QuestionFacadeService {
-  private questionSearchedSubject = new Subject<any>();
-
-  effectWorking$: Observable<boolean | HttpErrorResponse>;
-
-  constructor(private store: Store<QuestionState>, private auth: AuthService) {
-    this.effectWorking$ = this.store.select(questionStateQuery.effectWorking).pipe(filter((effect) => effect !== null));
-  }
-
-  public currentQuestionOwnedByCurrentUser(): Observable<boolean> {
-    return this.getQuestion().pipe(map((question) => this.auth.selfUser?.student?.uid === question.student.uid));
-  }
-
-  public questionSearched(): Observable<void> {
-    return this.questionSearchedSubject.asObservable();
-  }
-
-  public getQuestion(): Observable<QuestionStateViewModel> {
-    return this.store
-      .select(questionStateQuery.getQuestion)
-      .pipe(filter((x: QuestionStateViewModel | null): x is QuestionStateViewModel => x !== null));
-  }
-
-  public getSearchQuestions(): Observable<PreviewQuestionViewModel[]> {
-    return this.store.select(questionStateQuery.getSearchQuestions);
-  }
-
-  public getSearchQuestionsQuery(): Observable<SearchQuestionsQueryViewModel> {
-    return this.store
-      .select(questionStateQuery.getSearchQuestionsQuery)
-      .pipe(filter((x: SearchQuestionsQueryViewModel | null): x is SearchQuestionsQueryViewModel => x !== null));
-  }
-
-  public getPreviewQuestionsLatest(): Observable<PreviewQuestionViewModel[]> {
-    return this.store.select(questionStateQuery.getPreviewQuestionsLatest);
-  }
-
-  public getPreviewQuestionsPopular(): Observable<PreviewQuestionViewModel[]> {
-    return this.store.select(questionStateQuery.getPreviewQuestionsPopular);
-  }
-
-  public fetchPreviewQuestions(orderBy: PreviewQuestionsOrderEnum): void {
-    if (orderBy === PreviewQuestionsOrderEnum.Latest) {
-      this.fetchPreviewQuestionsLatest();
-    } else if (orderBy === PreviewQuestionsOrderEnum.Popular) {
-      this.fetchPreviewQuestionsPopular();
-    }
-  }
-
-  public setCorrectAnswer(questionUid: string, answerUid: string): void {
-    this.dispatchEffect(new SetCorrectAnswer(questionUid, answerUid));
-  }
-
-  public voteAnswer(answerUid: string, questionUid: string, voteType: VoteType): void {
-    this.dispatchEffect(new VoteAnswer(questionUid, answerUid, voteType));
-  }
-
-  public respondToAnswer(answerUid: string, questionUid: string, text: string): void {
-    this.dispatchEffect(new RespondToAnswer(questionUid, answerUid, text));
-  }
-
-  public editAnswerResponse(answerUid: string, questionUid: string, answerResponseUid: string, text: string): void {
-    this.dispatchEffect(new EditAnswerResponse(questionUid, answerUid, answerResponseUid, text));
-  }
-
-  public editAnswer(answerUid: string, questionUid: string, text: string): void {
-    this.dispatchEffect(new EditAnswerQuestion(questionUid, answerUid, text));
-  }
-
-  public deleteAnswerResponse(answerUid: string, questionUid: string, answerResponseUid: string): void {
-    this.dispatchEffect(new DeleteAnswerResponse(questionUid, answerUid, answerResponseUid));
-  }
-
-  public deleteAnswer(answerUid: string, questionUid: string): void {
-    this.dispatchEffect(new DeleteAnswer(questionUid, answerUid));
-  }
-
-  public fetchQuestion(questionUid: string): void {
-    this.dispatchEffect(new GetQuestionState(questionUid));
-  }
-
-  public searchQuestions(searchText: string, categories: string[]): void {
-    this.dispatchEffect(new GetSearchQuestions(searchText, categories));
-    this.questionSearchedSubject.next(Math.random());
-  }
-
-  public answerQuestion(questionUid: string, text: string): void {
-    this.dispatchEffect(new AnswerQuestion(questionUid, text));
-  }
-
-  private fetchPreviewQuestionsLatest(): void {
-    this.dispatchEffect(new GetPreviewQuestionsLatest());
-  }
-
-  private fetchPreviewQuestionsPopular(): void {
-    this.dispatchEffect(new GetPreviewQuestionsPopular());
-  }
-
-  private dispatch(action: Action): void {
-    this.store.dispatch(action);
-  }
-
-  private dispatchEffect(action: Action): void {
-    this.dispatch(new EffectStartedWorking());
-    this.dispatch(action);
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-request.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-request.models.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-import { VoteType } from 'src/app/shared-app/models';
-
-export class VoteAnswerRequest {
-  constructor(public voteType: VoteType) {}
-}
-
-export class RespondToAnswerRequest {
-  constructor(public text: string) {}
-}
-
-export class AnswerQuestionRequest {
-  constructor(public text: string) {}
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-response.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-response.models.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,83 +1,0 @@
-import { VoteType } from 'src/app/shared-app/models';
-
-export class QuestionStateResponse {
-  public uid!: string;
-  public title!: string;
-  public text!: string;
-  public createdOn!: moment.Moment;
-  public views!: number;
-  public lastActiveOn!: moment.Moment;
-  public studentResponse!: StudentQuestionStateResponse;
-  public answersResponse!: AnswerQuestionStateResponse[];
-  public categoriesResponse!: QuestionCategoryQuestionStateResponse[];
-  public teamResponse!: TeamQuestionStateResponse | null;
-}
-
-export class StudentQuestionStateResponse {
-  public uid!: string;
-  public index!: string;
-  public imageUrl!: string;
-  public reputation!: number;
-}
-
-export class TeamQuestionStateResponse {
-  public uid!: string;
-  public name!: string;
-}
-
-export class QuestionCategoryQuestionStateResponse {
-  public uid!: string;
-  public name!: string;
-}
-
-export class AnswerQuestionStateResponse {
-  public uid!: string;
-  public text!: string;
-  public correctAnswer!: boolean;
-  public createdOn!: moment.Moment;
-  public votesCount!: number;
-  public studentResponse!: AnswerStudentQuestionStateResponse;
-  public answerResponsesResponse!: AnswerResponseQuestionStateResponse[];
-}
-
-export class AnswerStudentQuestionStateResponse {
-  public uid!: string;
-  public index!: string;
-  public imageUrl!: string;
-  public reputation!: number;
-}
-
-export class AnswerResponseQuestionStateResponse {
-  public uid!: string;
-  public text!: string;
-  public createdOn!: moment.Moment;
-  public studentResponse!: AnswerResponseStudentQuestionStateResponse;
-}
-
-export class AnswerResponseStudentQuestionStateResponse {
-  public uid!: string;
-  public index!: string;
-  public imageUrl!: string;
-  public reputation!: number;
-}
-
-export class PreviewQuestionResponse {
-  public uid!: string;
-  public title!: string;
-  public createdOn!: moment.Moment;
-  public views!: number;
-  public answersCount!: number;
-  public categories!: PreviewQuestionCategoryResponse[];
-}
-
-export class PreviewQuestionCategoryResponse {
-  public uid!: string;
-  public text!: string;
-}
-
-export class VoteAnswerResponse {
-  public answerUid!: string;
-  public voteUid!: string;
-  public voteType!: VoteType;
-  public voteAlreadyExists!: boolean;
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.actions.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.actions.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,221 +1,0 @@
-import { HttpErrorResponse } from '@angular/common/http';
-import { Action } from '@ngrx/store';
-
-import {
-  AnswerQuestionStateViewModel,
-  AnswerResponseQuestionStateViewModel,
-  PreviewQuestionViewModel,
-  QuestionStateViewModel,
-  SearchQuestionsQueryViewModel,
-  VoteAnswerViewModel,
-  VoteType
-} from 'src/app/shared-app/models';
-
-export enum QuestionActionTypes {
-  GetQuestionState = '[Question] Get state',
-  GetQuestionStateSuccess = '[Question] Get state success',
-  RespondToAnswer = '[Question] RespondToAnswer',
-  RespondToAnswerSuccess = '[Question] RespondToAnswer success',
-  SetCorrectAnswer = '[Question] Set Correct Answer',
-  SetCorrectAnswerSuccess = '[Question] Set Correct Answer success',
-  GetPreviewQuestionsLatest = '[Question] Get preview questions Latest',
-  GetPreviewQuestionsLatestSuccess = '[Question] Get preview questions Latest Success',
-  GetPreviewQuestionsPopular = '[Question] Get preview questions Popular',
-  GetPreviewQuestionsPopularSuccess = '[Question] Get preview questions Popular Success',
-  GetSearchQuestions = '[Question] Get search questions',
-  GetSearchQuestionsSuccess = '[Question] Get search questions Success',
-  VoteAnswer = '[Question] Vote answer',
-  VoteAnswerSuccess = '[Question] Vote answer Success',
-  AnswerQuestion = '[Question] AnswerQuestion',
-  AnswerQuestionSuccess = '[Question] AnswerQuestion Success',
-  EditAnswerQuestion = '[Question] EditAnswerQuestion',
-  EditAnswerQuestionSuccess = '[Question] EditAnswerQuestion Success',
-  EditAnswerResponse = '[Question] EditAnswerResponse',
-  EditAnswerResponseSuccess = '[Question] EditAnswerResponse Success',
-  DeleteAnswer = '[Question] DeleteAnswer',
-  DeleteAnswerSuccess = '[Question] DeleteAnswer Success',
-  DeleteAnswerResponse = '[Question] DeleteAnswerResponse',
-  DeleteAnswerResponseSuccess = '[Question] DeleteAnswerResponse Success',
-  EffectStartedWorking = '[Question] Effect Started Working',
-  EffectFinishedWorking = '[Question] Effect Finished Working',
-  EffectFinishedWorkingError = '[Question] Effect Finished Working error'
-}
-
-export class DeleteAnswer implements Action {
-  readonly type = QuestionActionTypes.DeleteAnswer;
-
-  constructor(public questionUid: string, public answerUid: string) {}
-}
-
-export class DeleteAnswerSuccess implements Action {
-  readonly type = QuestionActionTypes.DeleteAnswerSuccess;
-
-  constructor(public payload: string) {}
-}
-
-export class DeleteAnswerResponse implements Action {
-  readonly type = QuestionActionTypes.DeleteAnswerResponse;
-
-  constructor(public questionUid: string, public answerUid: string, public answerResponseUid: string) {}
-}
-
-export class DeleteAnswerResponseSuccess implements Action {
-  readonly type = QuestionActionTypes.DeleteAnswerResponseSuccess;
-
-  constructor(public payload: string, public answerUid: string) {}
-}
-
-export class EditAnswerQuestion implements Action {
-  readonly type = QuestionActionTypes.EditAnswerQuestion;
-
-  constructor(public questionUid: string, public answerUid: string, public text: string) {}
-}
-
-export class EditAnswerQuestionSuccess implements Action {
-  readonly type = QuestionActionTypes.EditAnswerQuestionSuccess;
-
-  constructor(public payload: AnswerQuestionStateViewModel, public answerUid: string) {}
-}
-
-export class EditAnswerResponse implements Action {
-  readonly type = QuestionActionTypes.EditAnswerResponse;
-
-  constructor(public questionUid: string, public answerUid: string, public answerResponseUid: string, public text: string) {}
-}
-
-export class EditAnswerResponseSuccess implements Action {
-  readonly type = QuestionActionTypes.EditAnswerResponseSuccess;
-
-  constructor(public payload: AnswerResponseQuestionStateViewModel, public answerUid: string, public answerResponseUid: string) {}
-}
-
-export class AnswerQuestion implements Action {
-  readonly type = QuestionActionTypes.AnswerQuestion;
-
-  constructor(public questionUid: string, public text: string) {}
-}
-
-export class AnswerQuestionSuccess implements Action {
-  readonly type = QuestionActionTypes.AnswerQuestionSuccess;
-
-  constructor(public payload: AnswerQuestionStateViewModel) {}
-}
-
-export class GetQuestionState implements Action {
-  readonly type = QuestionActionTypes.GetQuestionState;
-
-  constructor(public questionUid: string) {}
-}
-
-export class GetQuestionStateSuccess implements Action {
-  readonly type = QuestionActionTypes.GetQuestionStateSuccess;
-
-  constructor(public payload: QuestionStateViewModel) {}
-}
-
-export class SetCorrectAnswer implements Action {
-  readonly type = QuestionActionTypes.SetCorrectAnswer;
-
-  constructor(public questionUid: string, public answerUid: string) {}
-}
-
-export class SetCorrectAnswerSuccess implements Action {
-  readonly type = QuestionActionTypes.SetCorrectAnswerSuccess;
-
-  constructor(public payload: string) {}
-}
-
-export class GetPreviewQuestionsLatest implements Action {
-  readonly type = QuestionActionTypes.GetPreviewQuestionsLatest;
-
-  constructor() {}
-}
-
-export class GetPreviewQuestionsLatestSuccess implements Action {
-  readonly type = QuestionActionTypes.GetPreviewQuestionsLatestSuccess;
-
-  constructor(public payload: PreviewQuestionViewModel[]) {}
-}
-
-export class GetPreviewQuestionsPopular implements Action {
-  readonly type = QuestionActionTypes.GetPreviewQuestionsPopular;
-
-  constructor() {}
-}
-
-export class GetPreviewQuestionsPopularSuccess implements Action {
-  readonly type = QuestionActionTypes.GetPreviewQuestionsPopularSuccess;
-
-  constructor(public payload: PreviewQuestionViewModel[]) {}
-}
-
-export class GetSearchQuestions implements Action {
-  readonly type = QuestionActionTypes.GetSearchQuestions;
-
-  constructor(public searchText: string, public categories: string[]) {}
-}
-
-export class GetSearchQuestionsSuccess implements Action {
-  readonly type = QuestionActionTypes.GetSearchQuestionsSuccess;
-
-  constructor(public payload: PreviewQuestionViewModel[], public query: SearchQuestionsQueryViewModel) {}
-}
-
-export class VoteAnswer implements Action {
-  readonly type = QuestionActionTypes.VoteAnswer;
-
-  constructor(public questionUid: string, public answerUid: string, public voteType: VoteType) {}
-}
-
-export class VoteAnswerSuccess implements Action {
-  readonly type = QuestionActionTypes.VoteAnswerSuccess;
-
-  constructor(public payload: VoteAnswerViewModel) {}
-}
-
-export class RespondToAnswer implements Action {
-  readonly type = QuestionActionTypes.RespondToAnswer;
-
-  constructor(public questionUid: string, public answerUid: string, public text: string) {}
-}
-
-export class RespondToAnswerSuccess implements Action {
-  readonly type = QuestionActionTypes.RespondToAnswerSuccess;
-
-  constructor(public payload: AnswerResponseQuestionStateViewModel, public answerUid: string) {}
-}
-
-export class EffectStartedWorking implements Action {
-  readonly type = QuestionActionTypes.EffectStartedWorking;
-
-  constructor() {}
-}
-
-export class EffectFinishedWorking implements Action {
-  readonly type = QuestionActionTypes.EffectFinishedWorking;
-
-  constructor() {}
-}
-
-export class EffectFinishedWorkingError implements Action {
-  readonly type = QuestionActionTypes.EffectFinishedWorkingError;
-
-  constructor(public payload: HttpErrorResponse) {}
-}
-
-export type QuestionAction =
-  | GetQuestionStateSuccess
-  | GetPreviewQuestionsLatestSuccess
-  | GetPreviewQuestionsPopularSuccess
-  | GetSearchQuestionsSuccess
-  | VoteAnswerSuccess
-  | SetCorrectAnswerSuccess
-  | RespondToAnswerSuccess
-  | AnswerQuestionSuccess
-  | EditAnswerQuestionSuccess
-  | EditAnswerResponseSuccess
-  | DeleteAnswerSuccess
-  | DeleteAnswerResponseSuccess
-  | EffectStartedWorking
-  | EffectFinishedWorking
-  | EffectFinishedWorkingError;
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.effects.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.effects.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,270 +1,0 @@
-import { Injectable } from '@angular/core';
-import { act, Actions, createEffect, ofType } from '@ngrx/effects';
-import { catchError, filter, mergeMap, switchMap, tap, withLatestFrom } from 'rxjs/operators';
-import { PreviewQuestionsOrderEnum, SearchQuestionsQueryViewModel } from 'src/app/shared-app/models';
-import { TranslateFromJsonService } from 'src/app/shared-app/services';
-
-import { BaseApiService } from 'src/app/shared-app/services/base-api.service';
-import { NotificationService } from '../../services/notification.service';
-import { QuestionFacadeService } from '../question-facade.service';
-import { AnswerQuestionRequest, RespondToAnswerRequest, VoteAnswerRequest } from './question-state-request.models';
-import {
-  AnswerQuestionStateResponse,
-  AnswerResponseQuestionStateResponse,
-  PreviewQuestionResponse,
-  QuestionStateResponse,
-  VoteAnswerResponse
-} from './question-state-response.models';
-import {
-  AnswerQuestion,
-  AnswerQuestionSuccess,
-  DeleteAnswer,
-  DeleteAnswerResponse,
-  DeleteAnswerResponseSuccess,
-  DeleteAnswerSuccess,
-  EditAnswerQuestion,
-  EditAnswerQuestionSuccess,
-  EditAnswerResponse,
-  EditAnswerResponseSuccess,
-  EffectFinishedWorking,
-  EffectFinishedWorkingError,
-  GetPreviewQuestionsLatest,
-  GetPreviewQuestionsLatestSuccess,
-  GetPreviewQuestionsPopular,
-  GetPreviewQuestionsPopularSuccess,
-  GetQuestionState,
-  GetQuestionStateSuccess,
-  GetSearchQuestions,
-  GetSearchQuestionsSuccess,
-  QuestionActionTypes,
-  RespondToAnswer,
-  RespondToAnswerSuccess,
-  SetCorrectAnswer,
-  SetCorrectAnswerSuccess,
-  VoteAnswer,
-  VoteAnswerSuccess
-} from './question.actions';
-import { QuestionMapper } from './question.mapper';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class QuestionEffects {
-  constructor(
-    private actions$: Actions,
-    private api: BaseApiService,
-    private translate: TranslateFromJsonService,
-    private facade: QuestionFacadeService,
-    private notification: NotificationService
-  ) {}
-
-  getQuestionState$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<GetQuestionState>(QuestionActionTypes.GetQuestionState),
-      switchMap((action) => {
-        return this.api.get<QuestionStateResponse>(`v1/questions/${action.questionUid}`).pipe(
-          switchMap((state) => [
-            new GetQuestionStateSuccess(QuestionMapper.ToQuestionStateViewModel(state, this.translate)),
-            new EffectFinishedWorking()
-          ]),
-          catchError((err) => [new EffectFinishedWorkingError(err)])
-        );
-      })
-    );
-  });
-
-  getPreviewQuestionsLatest$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<GetPreviewQuestionsLatest>(QuestionActionTypes.GetPreviewQuestionsLatest),
-      withLatestFrom(this.facade.getPreviewQuestionsLatest()),
-      filter(([action, questions]) => questions.length === 0),
-      switchMap((action) => {
-        return this.api.get<PreviewQuestionResponse[]>(`v1/questions/preview?order=${PreviewQuestionsOrderEnum.Latest}`).pipe(
-          switchMap((state) => [
-            new GetPreviewQuestionsLatestSuccess(QuestionMapper.ToPreviwQuestionsViewModel(state, this.translate)),
-            new EffectFinishedWorking()
-          ]),
-          catchError((err) => [new EffectFinishedWorkingError(err)])
-        );
-      })
-    );
-  });
-
-  getPreviewQuestionsPopular$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<GetPreviewQuestionsPopular>(QuestionActionTypes.GetPreviewQuestionsPopular),
-      withLatestFrom(this.facade.getPreviewQuestionsPopular()),
-      filter(([action, questions]) => questions.length === 0),
-      switchMap((action) => {
-        return this.api.get<PreviewQuestionResponse[]>(`v1/questions/preview?order=${PreviewQuestionsOrderEnum.Popular}`).pipe(
-          switchMap((state) => [
-            new GetPreviewQuestionsPopularSuccess(QuestionMapper.ToPreviwQuestionsViewModel(state, this.translate)),
-            new EffectFinishedWorking()
-          ]),
-          catchError((err) => [new EffectFinishedWorkingError(err)])
-        );
-      })
-    );
-  });
-
-  getSearchQuestions$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<GetSearchQuestions>(QuestionActionTypes.GetSearchQuestions),
-      mergeMap((action) => {
-        const categoriesAsString = action.categories !== null ? action.categories.join(',') : '';
-        return this.api
-          .get<PreviewQuestionResponse[]>(`v1/questions/search?searchText=${action.searchText}&categories=${categoriesAsString}`)
-          .pipe(
-            switchMap((state) => [
-              new GetSearchQuestionsSuccess(
-                QuestionMapper.ToPreviwQuestionsViewModel(state, this.translate),
-                new SearchQuestionsQueryViewModel(action.searchText)
-              ),
-              new EffectFinishedWorking()
-            ]),
-            catchError((err) => [new EffectFinishedWorkingError(err)])
-          );
-      })
-    );
-  });
-
-  voteAnswer$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<VoteAnswer>(QuestionActionTypes.VoteAnswer),
-      mergeMap((action) => {
-        const body = new VoteAnswerRequest(action.voteType);
-        return this.api.post<VoteAnswerResponse>(`v1/questions/${action.questionUid}/answers/${action.answerUid}/votes`, body).pipe(
-          tap((state) => this.notification.successNotification('sucess-vote')),
-          switchMap((state) => [new VoteAnswerSuccess(QuestionMapper.ToVoteAnswerViewModel(state)), new EffectFinishedWorking()]),
-          catchError((err) => [new EffectFinishedWorkingError(err)])
-        );
-      })
-    );
-  });
-
-  setCorrectAnswer$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<SetCorrectAnswer>(QuestionActionTypes.SetCorrectAnswer),
-      mergeMap((action) => {
-        return this.api.put<string>(`v1/questions/${action.questionUid}/answers/${action.answerUid}/correct`).pipe(
-          tap((state) => this.notification.successNotification('success-correct-answer')),
-          switchMap((state) => [new SetCorrectAnswerSuccess(state), new EffectFinishedWorking()]),
-          catchError((err) => [new EffectFinishedWorkingError(err)])
-        );
-      })
-    );
-  });
-
-  respondToAnswer$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<RespondToAnswer>(QuestionActionTypes.RespondToAnswer),
-      mergeMap((action) => {
-        return this.api
-          .post<AnswerResponseQuestionStateResponse>(
-            `v1/questions/${action.questionUid}/answers/${action.answerUid}/answerresponses`,
-            new RespondToAnswerRequest(action.text)
-          )
-          .pipe(
-            tap((state) => this.notification.successNotification('success-answer-response')),
-            switchMap((state) => [
-              new RespondToAnswerSuccess(QuestionMapper.ToAnswerResponseQuestionStateViewModel(state), action.answerUid),
-              new EffectFinishedWorking()
-            ]),
-            catchError((err) => [new EffectFinishedWorkingError(err)])
-          );
-      })
-    );
-  });
-
-  answerQuestion$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<AnswerQuestion>(QuestionActionTypes.AnswerQuestion),
-      mergeMap((action) => {
-        return this.api
-          .post<AnswerQuestionStateResponse>(`v1/questions/${action.questionUid}/answers`, new AnswerQuestionRequest(action.text))
-          .pipe(
-            tap((state) => this.notification.successNotification('success-answer')),
-            switchMap((state) => [
-              new AnswerQuestionSuccess(QuestionMapper.ToAnswerQuestionStateViewModel(state)),
-              new EffectFinishedWorking()
-            ]),
-            catchError((err) => [new EffectFinishedWorkingError(err)])
-          );
-      })
-    );
-  });
-
-  editResponseToAnswer$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<EditAnswerResponse>(QuestionActionTypes.EditAnswerResponse),
-      mergeMap((action) => {
-        return this.api
-          .put<AnswerResponseQuestionStateResponse>(
-            `v1/questions/${action.questionUid}/answers/${action.answerUid}/answerresponses/${action.answerResponseUid}`,
-            new RespondToAnswerRequest(action.text)
-          )
-          .pipe(
-            tap((state) => this.notification.successNotification('success-edit-answer-response')),
-            switchMap((state) => [
-              new EditAnswerResponseSuccess(
-                QuestionMapper.ToAnswerResponseQuestionStateViewModel(state),
-                action.answerUid,
-                action.answerResponseUid
-              ),
-              new EffectFinishedWorking()
-            ]),
-            catchError((err) => [new EffectFinishedWorkingError(err)])
-          );
-      })
-    );
-  });
-
-  editAnswer$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<EditAnswerQuestion>(QuestionActionTypes.EditAnswerQuestion),
-      mergeMap((action) => {
-        return this.api
-          .put<AnswerQuestionStateResponse>(
-            `v1/questions/${action.questionUid}/answers/${action.answerUid}`,
-            new AnswerQuestionRequest(action.text)
-          )
-          .pipe(
-            tap((state) => this.notification.successNotification('success-edit-answer')),
-            switchMap((state) => [
-              new EditAnswerQuestionSuccess(QuestionMapper.ToAnswerQuestionStateViewModel(state), action.answerUid),
-              new EffectFinishedWorking()
-            ]),
-            catchError((err) => [new EffectFinishedWorkingError(err)])
-          );
-      })
-    );
-  });
-
-  deleteResponseToAnswer$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<DeleteAnswerResponse>(QuestionActionTypes.DeleteAnswerResponse),
-      mergeMap((action) => {
-        return this.api
-          .delete<string>(`v1/questions/${action.questionUid}/answers/${action.answerUid}/answerresponses/${action.answerResponseUid}`)
-          .pipe(
-            tap((state) => this.notification.successNotification('success-delete-answer-response')),
-            switchMap((state) => [new DeleteAnswerResponseSuccess(state, action.answerUid), new EffectFinishedWorking()]),
-            catchError((err) => [new EffectFinishedWorkingError(err)])
-          );
-      })
-    );
-  });
-
-  deleteAnswer$ = createEffect(() => {
-    return this.actions$.pipe(
-      ofType<DeleteAnswer>(QuestionActionTypes.DeleteAnswer),
-      mergeMap((action) => {
-        return this.api.delete<string>(`v1/questions/${action.questionUid}/answers/${action.answerUid}`).pipe(
-          tap((state) => this.notification.successNotification('success-delete-answer')),
-          switchMap((state) => [new DeleteAnswerSuccess(state), new EffectFinishedWorking()]),
-          catchError((err) => [new EffectFinishedWorkingError(err)])
-        );
-      })
-    );
-  });
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.mapper.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.mapper.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,141 +1,0 @@
-import * as moment from 'moment';
-import {
-  AnswerQuestionStateViewModel,
-  AnswerResponseQuestionStateViewModel,
-  AnswerResponseStudentQuestionStateViewModel,
-  AnswerStudentQuestionStateViewModel,
-  PreviewQuestionCategoryViewModel,
-  PreviewQuestionViewModel,
-  QuestionCategoryQuestionStateViewModel,
-  QuestionStateViewModel,
-  StudentQuestionStateViewModel,
-  TeamQuestionStateViewModel,
-  VoteAnswerViewModel
-} from 'src/app/shared-app/models';
-import { TranslateFromJsonService } from 'src/app/shared-app/services';
-import {
-  AnswerQuestionStateResponse,
-  AnswerResponseQuestionStateResponse,
-  PreviewQuestionResponse,
-  QuestionStateResponse,
-  VoteAnswerResponse
-} from './question-state-response.models';
-
-export class QuestionMapper {
-  public static ToQuestionStateViewModel(
-    questionStateResponse: QuestionStateResponse,
-    translate: TranslateFromJsonService
-  ): QuestionStateViewModel {
-    let answers: AnswerQuestionStateViewModel[] = [];
-
-    if (questionStateResponse.answersResponse.length > 0) {
-      answers = questionStateResponse.answersResponse.map((x) => QuestionMapper.ToAnswerQuestionStateViewModel(x));
-    }
-
-    let categories: QuestionCategoryQuestionStateViewModel[] = [];
-
-    if (questionStateResponse.categoriesResponse.length > 0) {
-      categories = questionStateResponse.categoriesResponse.map(
-        (x) => new QuestionCategoryQuestionStateViewModel(x.uid, x.name, translate.instant(x.name))
-      );
-    }
-
-    let team: TeamQuestionStateViewModel | null = null;
-
-    if (questionStateResponse.teamResponse) {
-      team = new TeamQuestionStateViewModel(questionStateResponse.teamResponse.uid, questionStateResponse.teamResponse.name);
-    }
-
-    const student = new StudentQuestionStateViewModel(
-      questionStateResponse.studentResponse.uid,
-      questionStateResponse.studentResponse.index,
-      questionStateResponse.studentResponse.imageUrl,
-      questionStateResponse.studentResponse.reputation
-    );
-
-    return new QuestionStateViewModel(
-      questionStateResponse.uid,
-      questionStateResponse.title,
-      questionStateResponse.text,
-      moment(questionStateResponse.createdOn),
-      questionStateResponse.views,
-      moment(questionStateResponse.lastActiveOn),
-      student,
-      answers,
-      categories,
-      team
-    );
-  }
-
-  public static ToPreviwQuestionsViewModel(
-    previewQuestionsResponse: PreviewQuestionResponse[],
-    translate: TranslateFromJsonService
-  ): PreviewQuestionViewModel[] {
-    let questions = new Array<PreviewQuestionViewModel>();
-
-    if (previewQuestionsResponse.length > 0) {
-      questions = previewQuestionsResponse.map((x) => {
-        let categories = new Array<PreviewQuestionCategoryViewModel>();
-
-        if (x.categories.length > 0) {
-          categories = x.categories.map((y) => new PreviewQuestionCategoryViewModel(y.uid, y.text, translate.instant(y.text)));
-        }
-
-        return new PreviewQuestionViewModel(x.uid, x.title, moment(x.createdOn), x.views, x.answersCount, categories);
-      });
-    }
-
-    return questions;
-  }
-
-  public static ToVoteAnswerViewModel(response: VoteAnswerResponse): VoteAnswerViewModel {
-    return new VoteAnswerViewModel(response.answerUid, response.voteUid, response.voteType, response.voteAlreadyExists);
-  }
-
-  public static ToAnswerResponseQuestionStateViewModel(
-    response: AnswerResponseQuestionStateResponse
-  ): AnswerResponseQuestionStateViewModel {
-    const answerResponseStudent = new AnswerResponseStudentQuestionStateViewModel(
-      response.studentResponse.uid,
-      response.studentResponse.index,
-      response.studentResponse.imageUrl,
-      response.studentResponse.reputation
-    );
-
-    return new AnswerResponseQuestionStateViewModel(response.uid, response.text, moment(response.createdOn), answerResponseStudent);
-  }
-
-  public static ToAnswerQuestionStateViewModel(response: AnswerQuestionStateResponse): AnswerQuestionStateViewModel {
-    let answerResponses: AnswerResponseQuestionStateViewModel[] = [];
-
-    if (response.answerResponsesResponse.length > 0) {
-      answerResponses = response.answerResponsesResponse.map((y) => {
-        const answerResponseStudent = new AnswerResponseStudentQuestionStateViewModel(
-          y.studentResponse.uid,
-          y.studentResponse.index,
-          y.studentResponse.imageUrl,
-          y.studentResponse.reputation
-        );
-
-        return new AnswerResponseQuestionStateViewModel(y.uid, y.text, moment(y.createdOn), answerResponseStudent);
-      });
-    }
-
-    const answerStudent = new AnswerStudentQuestionStateViewModel(
-      response.studentResponse.uid,
-      response.studentResponse.index,
-      response.studentResponse.imageUrl,
-      response.studentResponse.reputation
-    );
-
-    return new AnswerQuestionStateViewModel(
-      response.uid,
-      response.text,
-      response.correctAnswer,
-      moment(response.createdOn),
-      response.votesCount,
-      answerStudent,
-      answerResponses
-    );
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.reducers.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.reducers.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,251 +1,0 @@
-import { AnswerQuestionStateViewModel, VoteType } from 'src/app/shared-app/models';
-import { QuestionAction, QuestionActionTypes } from './question.actions';
-import { initialState, QuestionState } from './question.state';
-
-export function reducer(state = initialState, action: QuestionAction): QuestionState {
-  switch (action.type) {
-    case QuestionActionTypes.GetQuestionStateSuccess:
-      return {
-        ...state,
-        question: action.payload
-      };
-    case QuestionActionTypes.GetPreviewQuestionsLatestSuccess:
-      return {
-        ...state,
-        previewQuestionsLatest: action.payload
-      };
-    case QuestionActionTypes.GetPreviewQuestionsPopularSuccess:
-      return {
-        ...state,
-        previewQuestionsPopular: action.payload
-      };
-    case QuestionActionTypes.GetSearchQuestionsSuccess:
-      return {
-        ...state,
-        searchQuestions: action.payload,
-        searchQuestionsQuery: action.query
-      };
-    case QuestionActionTypes.VoteAnswerSuccess: {
-      if (state.question) {
-        return {
-          ...state,
-          question: {
-            ...state.question,
-            answers: state.question.answers.map((x) => {
-              if (x.uid === action.payload.answerUid) {
-                let votesCountNew = x.votesCount;
-
-                switch (action.payload.voteType) {
-                  case VoteType.Upvote:
-                    votesCountNew++;
-                    if (action.payload.voteAlreadyExists) {
-                      votesCountNew++;
-                    }
-                    break;
-                  case VoteType.Downvote:
-                    votesCountNew--;
-                    if (action.payload.voteAlreadyExists) {
-                      votesCountNew--;
-                    }
-                    break;
-                }
-
-                return {
-                  ...x,
-                  votesCount: votesCountNew
-                };
-              }
-
-              return x;
-            })
-          }
-        };
-      }
-
-      return {
-        ...state
-      };
-    }
-    case QuestionActionTypes.SetCorrectAnswerSuccess: {
-      if (state.question) {
-        return {
-          ...state,
-          question: {
-            ...state.question,
-            answers: state.question.answers.map((x) => {
-              if (x.correctAnswer) {
-                return {
-                  ...x,
-                  correctAnswer: false
-                };
-              }
-              if (x.uid === action.payload) {
-                return {
-                  ...x,
-                  correctAnswer: true
-                };
-              }
-              return x;
-            })
-          }
-        };
-      }
-
-      return {
-        ...state
-      };
-    }
-    case QuestionActionTypes.RespondToAnswerSuccess: {
-      if (state.question) {
-        return {
-          ...state,
-          question: {
-            ...state.question,
-            answers: state.question.answers.map((x) => {
-              if (x.uid === action.answerUid) {
-                return {
-                  ...x,
-                  answerResponses: [...x.answerResponses, action.payload]
-                };
-              }
-
-              return x;
-            })
-          }
-        };
-      }
-
-      return {
-        ...state
-      };
-    }
-    case QuestionActionTypes.EditAnswerResponseSuccess: {
-      if (state.question) {
-        return {
-          ...state,
-          question: {
-            ...state.question,
-            answers: state.question.answers.map((x) => {
-              if (x.uid === action.answerUid) {
-                return {
-                  ...x,
-                  answerResponses: [...x.answerResponses.filter((y) => y.uid !== action.answerResponseUid), action.payload]
-                };
-              }
-
-              return x;
-            })
-          }
-        };
-      }
-
-      return {
-        ...state
-      };
-    }
-    case QuestionActionTypes.EditAnswerQuestionSuccess: {
-      if (state.question) {
-        return {
-          ...state,
-          question: {
-            ...state.question,
-            answers: state.question.answers.map((x) => {
-              if (x.uid === action.answerUid) {
-                return {
-                  ...x,
-                  text: action.payload.text
-                };
-              }
-
-              return x;
-            })
-          }
-        };
-      }
-
-      return {
-        ...state
-      };
-    }
-    case QuestionActionTypes.DeleteAnswerSuccess: {
-      if (state.question) {
-        return {
-          ...state,
-          question: {
-            ...state.question,
-            answers: state.question.answers.filter((x) => x.uid !== action.payload)
-          }
-        };
-      }
-
-      return {
-        ...state
-      };
-    }
-    case QuestionActionTypes.DeleteAnswerResponseSuccess: {
-      if (state.question) {
-        return {
-          ...state,
-          question: {
-            ...state.question,
-            answers: state.question.answers.map((x) => {
-              if (x.uid === action.answerUid) {
-                return {
-                  ...x,
-                  answerResponses: x.answerResponses.filter((y) => y.uid !== action.payload)
-                };
-              }
-
-              return x;
-            })
-          }
-        };
-      }
-
-      return {
-        ...state
-      };
-    }
-    case QuestionActionTypes.AnswerQuestionSuccess: {
-      if (state.question) {
-        return {
-          ...state,
-          question: {
-            ...state.question,
-            answers: [...state.question.answers, action.payload]
-          }
-        };
-      }
-
-      return {
-        ...state
-      };
-    }
-    case QuestionActionTypes.EffectStartedWorking: {
-      return {
-        ...state,
-        effectWorking: true
-      };
-    }
-
-    case QuestionActionTypes.EffectFinishedWorking: {
-      return {
-        ...state,
-        effectWorking: false
-      };
-    }
-
-    case QuestionActionTypes.EffectFinishedWorkingError: {
-      return {
-        ...state,
-        effectWorking: action.payload
-      };
-    }
-
-    default: {
-      return {
-        ...state
-      };
-    }
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.selectors.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.selectors.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-import { createFeatureSelector, createSelector } from '@ngrx/store';
-import { QuestionState, questionStateKey } from './question.state';
-
-export const getQuestionState = createFeatureSelector<QuestionState>(questionStateKey);
-
-const getQuestion = createSelector(getQuestionState, (state) => state.question);
-const getPreviewQuestionsLatest = createSelector(getQuestionState, (state) => state.previewQuestionsLatest);
-const getPreviewQuestionsPopular = createSelector(getQuestionState, (state) => state.previewQuestionsPopular);
-const getSearchQuestions = createSelector(getQuestionState, (state) => state.searchQuestions);
-const getSearchQuestionsQuery = createSelector(getQuestionState, (state) => state.searchQuestionsQuery);
-const effectWorking = createSelector(getQuestionState, (state) => state.effectWorking);
-
-export const questionStateQuery = {
-  effectWorking,
-  getQuestion,
-  getPreviewQuestionsLatest,
-  getPreviewQuestionsPopular,
-  getSearchQuestions,
-  getSearchQuestionsQuery
-};
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.state.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.state.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,22 +1,0 @@
-import { HttpErrorResponse } from '@angular/common/http';
-import { PreviewQuestionViewModel, QuestionStateViewModel, SearchQuestionsQueryViewModel } from 'src/app/shared-app/models';
-
-export const questionStateKey = 'question';
-
-export interface QuestionState {
-  question: QuestionStateViewModel | null;
-  previewQuestionsLatest: PreviewQuestionViewModel[];
-  previewQuestionsPopular: PreviewQuestionViewModel[];
-  effectWorking: boolean | HttpErrorResponse;
-  searchQuestions: PreviewQuestionViewModel[];
-  searchQuestionsQuery: SearchQuestionsQueryViewModel | null;
-}
-
-export const initialState: QuestionState = {
-  question: null,
-  previewQuestionsLatest: [],
-  previewQuestionsPopular: [],
-  searchQuestions: [],
-  effectWorking: false,
-  searchQuestionsQuery: null
-};
Index: src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/categories-main/categories-main.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/categories-main/categories-main.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,14 +1,0 @@
-<div class="margin-xl">
-  <h1>Categories</h1>
-  <app-button [buttonType]="ButtonType.CallToAction" (action)="createNewCategory()">Create new category</app-button>
-  <hr />
-  <table mat-table [dataSource]="categories" class="mat-elevation-z8">
-    <ng-container matColumnDef="name">
-      <th mat-header-cell *matHeaderCellDef>Name</th>
-      <td mat-cell *matCellDef="let element">{{ element.translatedName }}</td>
-    </ng-container>
-
-    <tr mat-header-row *matHeaderRowDef="categoriesColumns"></tr>
-    <tr mat-row *matRowDef="let row; columns: categoriesColumns"></tr>
-  </table>
-</div>
Index: src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/categories-main/categories-main.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/categories-main/categories-main.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { CategoriesMainComponent } from './categories-main.component';
-
-describe('CategoriesMainComponent', () => {
-  let component: CategoriesMainComponent;
-  let fixture: ComponentFixture<CategoriesMainComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ CategoriesMainComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(CategoriesMainComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/categories-main/categories-main.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/categories-main/categories-main.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,37 +1,0 @@
-import { HttpErrorResponse } from '@angular/common/http';
-import { Component, OnInit } from '@angular/core';
-import { map } from 'rxjs/operators';
-import { NotificationService } from 'src/app/core/services/notification.service';
-import { CategoryFacadeService } from 'src/app/core/state/category-facade.service';
-import { ButtonType } from 'src/app/shared-app/components/generic/button/button.models';
-import { ModeratingDialogService } from '../../services/moderating-dialog.service';
-
-@Component({
-  selector: 'app-categories-main',
-  templateUrl: './categories-main.component.html',
-  styleUrls: ['./categories-main.component.scss']
-})
-export class CategoriesMainComponent implements OnInit {
-  public categories = this.categoriesFacade.getCategories().pipe(map((x) => (x !== null ? x : [])));
-  public categoriesColumns: string[] = ['name'];
-  public ButtonType = ButtonType;
-
-  constructor(
-    private categoriesFacade: CategoryFacadeService,
-    private dialog: ModeratingDialogService,
-    private notification: NotificationService
-  ) {}
-
-  ngOnInit(): void {
-    this.categoriesFacade.fetchCategories();
-    this.categoriesFacade.effectWorking$.subscribe((effect) => {
-      if (effect instanceof HttpErrorResponse) {
-        this.notification.handleErrorsNotification(effect.error);
-      }
-    });
-  }
-
-  createNewCategory(): void {
-    this.dialog.createNewCategory();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/create-category-dialog/create-category-dialog.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/create-category-dialog/create-category-dialog.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<h1 mat-dialog-title>{{ 'create-new-category' | translate }}</h1>
-<mat-dialog-content>
-  <form [formGroup]="formGroup">
-    <mat-form-field class="full-width margin-bottom-sm" appearance="fill" appHandleInputFormErrors>
-      <mat-label>{{ 'category-title' | translate }}</mat-label>
-      <input matInput [formControl]="textField" />
-    </mat-form-field>
-  </form>
-</mat-dialog-content>
-<mat-dialog-actions>
-  <app-button class="margin-right-sm" [buttonType]="ButtonType.Basic" (action)="dialogRef.close()">
-    {{ 'close-button' | translate }}
-  </app-button>
-  <app-button [buttonType]="ButtonType.CallToAction" [disabled]="!formGroup.valid" (action)="submit()">
-    {{ 'submit-button' | translate }}
-  </app-button>
-</mat-dialog-actions>
Index: src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/create-category-dialog/create-category-dialog.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/create-category-dialog/create-category-dialog.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { CreateCategoryDialogComponent } from './create-category-dialog.component';
-
-describe('CreateCategoryDialogComponent', () => {
-  let component: CreateCategoryDialogComponent;
-  let fixture: ComponentFixture<CreateCategoryDialogComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ CreateCategoryDialogComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(CreateCategoryDialogComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/create-category-dialog/create-category-dialog.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/create-category-dialog/create-category-dialog.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,29 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { FormControl, Validators, FormGroup } from '@angular/forms';
-import { MatDialogRef } from '@angular/material/dialog';
-import { CategoryFacadeService } from 'src/app/core/state/category-facade.service';
-import { ButtonType } from 'src/app/shared-app/components/generic/button/button.models';
-
-@Component({
-  selector: 'app-create-category-dialog',
-  templateUrl: './create-category-dialog.component.html',
-  styleUrls: ['./create-category-dialog.component.scss']
-})
-export class CreateCategoryDialogComponent implements OnInit {
-  public ButtonType = ButtonType;
-  public textField = new FormControl('', [Validators.required, Validators.maxLength(500)]);
-  public formGroup: FormGroup;
-
-  constructor(public dialogRef: MatDialogRef<CreateCategoryDialogComponent>, private categoryFacade: CategoryFacadeService) {
-    this.formGroup = new FormGroup({
-      text: this.textField
-    });
-  }
-
-  ngOnInit(): void {}
-
-  submit(): void {
-    this.categoryFacade.addNewCategory(this.textField.value);
-    this.dialogRef.close();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/moderating-components.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/moderating/components/moderating-components.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,4 +1,0 @@
-import { CategoriesMainComponent } from './categories-main/categories-main.component';
-import { CreateCategoryDialogComponent } from './create-category-dialog/create-category-dialog.component';
-
-export const MODERATING_COMPONENTS: any[] = [CategoriesMainComponent, CreateCategoryDialogComponent];
Index: src/Clients/Angular/finki-chattery/src/app/modules/moderating/moderating.module.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/moderating/moderating.module.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,10 +1,0 @@
-import { NgModule } from '@angular/core';
-import { SharedAppModule } from 'src/app/shared-app/shared-app.module';
-import { MODERATING_COMPONENTS } from './components/moderating-components';
-import { ModeratingRoutingModule } from './moderating.routes';
-
-@NgModule({
-  declarations: [MODERATING_COMPONENTS],
-  imports: [SharedAppModule, ModeratingRoutingModule]
-})
-export class ModeratingModule {}
Index: src/Clients/Angular/finki-chattery/src/app/modules/moderating/moderating.routes.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/moderating/moderating.routes.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,16 +1,0 @@
-import { NgModule } from '@angular/core';
-import { Routes, RouterModule } from '@angular/router';
-import { CategoriesMainComponent } from './components/categories-main/categories-main.component';
-
-const routes: Routes = [
-  {
-    component: CategoriesMainComponent,
-    path: 'categories'
-  }
-];
-
-@NgModule({
-  imports: [RouterModule.forChild(routes)],
-  exports: [RouterModule]
-})
-export class ModeratingRoutingModule {}
Index: src/Clients/Angular/finki-chattery/src/app/modules/moderating/services/moderating-dialog.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/moderating/services/moderating-dialog.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,21 +1,0 @@
-import { Injectable } from '@angular/core';
-import { MatDialog, MatDialogRef } from '@angular/material/dialog';
-import { Observable } from 'rxjs';
-import { CreateCategoryDialogComponent } from '../components/create-category-dialog/create-category-dialog.component';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class ModeratingDialogService {
-  constructor(private dialog: MatDialog) {}
-
-  public createNewCategory(): Observable<any> {
-    let dialogRef: MatDialogRef<CreateCategoryDialogComponent>;
-    dialogRef = this.dialog.open(CreateCategoryDialogComponent, {
-      width: '650px',
-      height: 'auto'
-    });
-
-    return dialogRef.afterClosed();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/ask-question/ask-question.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/ask-question/ask-question.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,1 +1,0 @@
-<app-ask-question-shared (askQuestion)="askQuestionAsStudent($event)"></app-ask-question-shared>
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/ask-question/ask-question.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/ask-question/ask-question.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { AskQuestionComponent } from './ask-question.component';
-
-describe('AskQuestionComponent', () => {
-  let component: AskQuestionComponent;
-  let fixture: ComponentFixture<AskQuestionComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ AskQuestionComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(AskQuestionComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/ask-question/ask-question.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/ask-question/ask-question.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,22 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { Router } from '@angular/router';
-
-import { AskQuestionRequest } from 'src/app/shared-app/models';
-import { QuestioningApiService } from '../../services/questioning-api.service';
-
-@Component({
-  selector: 'app-ask-question',
-  templateUrl: './ask-question.component.html',
-  styleUrls: ['./ask-question.component.scss']
-})
-export class AskQuestionComponent implements OnInit {
-  constructor(private api: QuestioningApiService, private router: Router) {}
-
-  ngOnInit(): void {}
-
-  public askQuestionAsStudent(body: AskQuestionRequest): void {
-    this.api.askQuestion(body).subscribe((questionUid) => {
-      this.router.navigateByUrl(`questioning/${questionUid}`);
-    });
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/question-preview-general/question-preview-general.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/question-preview-general/question-preview-general.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,3 +1,0 @@
-<div>
-  <app-question-preview> </app-question-preview>
-</div>
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/question-preview-general/question-preview-general.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/question-preview-general/question-preview-general.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { QuestionPreviewGeneralComponent } from './question-preview-general.component';
-
-describe('QuestionPreviewGeneralComponent', () => {
-  let component: QuestionPreviewGeneralComponent;
-  let fixture: ComponentFixture<QuestionPreviewGeneralComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ QuestionPreviewGeneralComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(QuestionPreviewGeneralComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/question-preview-general/question-preview-general.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/question-preview-general/question-preview-general.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,21 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { QuestionFacadeService } from 'src/app/core/state/question-facade.service';
-import { ButtonType } from 'src/app/shared-app/components/generic/button/button.models';
-
-@Component({
-  selector: 'app-question-preview-general',
-  templateUrl: './question-preview-general.component.html',
-  styleUrls: ['./question-preview-general.component.scss']
-})
-export class QuestionPreviewGeneralComponent implements OnInit {
-  ButtonType = ButtonType;
-
-  constructor(private questionFacade: QuestionFacadeService, private route: ActivatedRoute) {}
-
-  ngOnInit(): void {
-    this.route.params.subscribe((params) => {
-      this.questionFacade.fetchQuestion(params.questionUid);
-    });
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questioning-components.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questioning-components.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-import { QuestionPreviewGeneralComponent } from './question-preview-general/question-preview-general.component';
-import { QuestioningGeneralComponent } from './questioning-general/questioning-general.component';
-import { QuestionsPreviewGeneralComponent } from './questions-preview-general/questions-preview-general.component';
-import { QuestionsSearchComponent } from './questions-search/questions-search.component';
-import { AskQuestionComponent } from './ask-question/ask-question.component';
-
-export const QUESTIONING_COMPONENTS: any[] = [
-  QuestionPreviewGeneralComponent,
-  QuestionsPreviewGeneralComponent,
-  QuestioningGeneralComponent,
-  QuestionsSearchComponent,
-  AskQuestionComponent
-];
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questioning-general/questioning-general.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questioning-general/questioning-general.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,7 +1,0 @@
-<div class="padding-md" fxLayout="row" fxLayout.sm="column" fxLayout.xs="column" fxL fxLayoutAlign="space-around center">
-  <div fxFlex="20%"></div>
-  <div class="margin-top-md" fxFlex="80%">
-    <router-outlet></router-outlet>
-  </div>
-  <div fxFlex="20%"></div>
-</div>
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questioning-general/questioning-general.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questioning-general/questioning-general.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { QuestioningGeneralComponent } from './questioning-general.component';
-
-describe('QuestioningGeneralComponent', () => {
-  let component: QuestioningGeneralComponent;
-  let fixture: ComponentFixture<QuestioningGeneralComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ QuestioningGeneralComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(QuestioningGeneralComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questioning-general/questioning-general.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questioning-general/questioning-general.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,15 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { CategoryFacadeService } from 'src/app/core/state/category-facade.service';
-
-@Component({
-  selector: 'app-questioning-general',
-  templateUrl: './questioning-general.component.html',
-  styleUrls: ['./questioning-general.component.scss']
-})
-export class QuestioningGeneralComponent implements OnInit {
-  constructor(private categoriesFacade: CategoryFacadeService) {}
-
-  ngOnInit(): void {
-    this.categoriesFacade.fetchCategories();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-preview-general/questions-preview-general.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-preview-general/questions-preview-general.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,12 +1,0 @@
-<div class="margin-x-lg">
-  <h1 class="mat-headline">{{ 'questions-preview' | translate }}</h1>
-  <mat-button-toggle-group [formControl]="questionsSortByForm">
-    <mat-button-toggle [value]="QuestionsSortBy.Latest">{{ 'question-sort-newest' | translate }}</mat-button-toggle>
-    <mat-button-toggle [value]="QuestionsSortBy.Popular">{{ 'question-sort-popular' | translate }}</mat-button-toggle>
-  </mat-button-toggle-group>
-</div>
-<app-preview-question-display
-  *ngFor="let question of previewQuestions$ | async"
-  [question]="question"
-  (questionClicked)="goToQuestion(question.uid)"
-></app-preview-question-display>
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-preview-general/questions-preview-general.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-preview-general/questions-preview-general.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { QuestionsPreviewGeneralComponent } from './questions-preview-general.component';
-
-describe('QuestionsPreviewGeneralComponent', () => {
-  let component: QuestionsPreviewGeneralComponent;
-  let fixture: ComponentFixture<QuestionsPreviewGeneralComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ QuestionsPreviewGeneralComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(QuestionsPreviewGeneralComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-preview-general/questions-preview-general.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-preview-general/questions-preview-general.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,40 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { FormControl } from '@angular/forms';
-import { Router } from '@angular/router';
-import { QuestionFacadeService } from 'src/app/core/state/question-facade.service';
-import { CategoryStateViewModel, PreviewQuestionsOrderEnum } from 'src/app/shared-app/models';
-
-@Component({
-  selector: 'app-questions-preview-general',
-  templateUrl: './questions-preview-general.component.html',
-  styleUrls: ['./questions-preview-general.component.scss']
-})
-export class QuestionsPreviewGeneralComponent implements OnInit {
-  categories?: CategoryStateViewModel[];
-  previewQuestions$ = this.questionFacade.getPreviewQuestionsLatest();
-  QuestionsSortBy = PreviewQuestionsOrderEnum;
-  questionsSortByForm = new FormControl(PreviewQuestionsOrderEnum.Latest);
-
-  constructor(private questionFacade: QuestionFacadeService, private router: Router) {}
-
-  ngOnInit(): void {
-    this.questionFacade.fetchPreviewQuestions(PreviewQuestionsOrderEnum.Latest);
-    this.questionsSortByForm.valueChanges.subscribe((value: PreviewQuestionsOrderEnum) => {
-      this.questionFacade.fetchPreviewQuestions(value);
-
-      if (value === PreviewQuestionsOrderEnum.Latest) {
-        this.previewQuestions$ = this.questionFacade.getPreviewQuestionsLatest();
-      } else if (value === PreviewQuestionsOrderEnum.Popular) {
-        this.previewQuestions$ = this.questionFacade.getPreviewQuestionsPopular();
-      }
-    });
-
-    this.questionFacade.questionSearched().subscribe(() => {
-      this.router.navigateByUrl('questioning/search');
-    });
-  }
-
-  goToQuestion(uid: string): void {
-    this.router.navigateByUrl(`questioning/${uid}`);
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-search/questions-search.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-search/questions-search.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<div class="margin-x-lg">
-  <h1 class="mat-headline">{{ 'questions-search-title' | translate: { searchQuery: (searchQuestionsQuery$ | async)?.text } }}</h1>
-</div>
-<app-preview-question-display
-  *ngFor="let question of searchQuestions$ | async"
-  [question]="question"
-  (questionClicked)="goToQuestion(question.uid)"
-></app-preview-question-display>
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-search/questions-search.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-search/questions-search.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { QuestionsSearchComponent } from './questions-search.component';
-
-describe('QuestionsSearchComponent', () => {
-  let component: QuestionsSearchComponent;
-  let fixture: ComponentFixture<QuestionsSearchComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ QuestionsSearchComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(QuestionsSearchComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-search/questions-search.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-search/questions-search.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,22 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { Router } from '@angular/router';
-
-import { QuestionFacadeService } from 'src/app/core/state/question-facade.service';
-
-@Component({
-  selector: 'app-questions-search',
-  templateUrl: './questions-search.component.html',
-  styleUrls: ['./questions-search.component.scss']
-})
-export class QuestionsSearchComponent implements OnInit {
-  searchQuestions$ = this.questionFacade.getSearchQuestions();
-  searchQuestionsQuery$ = this.questionFacade.getSearchQuestionsQuery();
-
-  constructor(private questionFacade: QuestionFacadeService, private router: Router) {}
-
-  ngOnInit(): void {}
-
-  goToQuestion(uid: string): void {
-    this.router.navigateByUrl(`questioning/${uid}`);
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/questioning.module.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/questioning.module.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,10 +1,0 @@
-import { NgModule } from '@angular/core';
-
-import { QuestioningRoutingModule } from './questioning.routes';
-import { QUESTIONING_COMPONENTS } from './components/questioning-components';
-import { SharedAppModule } from 'src/app/shared-app/shared-app.module';
-@NgModule({
-  declarations: [QUESTIONING_COMPONENTS],
-  imports: [SharedAppModule, QuestioningRoutingModule]
-})
-export class QuestioningModule {}
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/questioning.routes.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/questioning.routes.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,43 +1,0 @@
-import { NgModule } from '@angular/core';
-import { Routes, RouterModule } from '@angular/router';
-import { QuestionPreviewGeneralComponent } from './components/question-preview-general/question-preview-general.component';
-import { QuestioningGeneralComponent } from './components/questioning-general/questioning-general.component';
-import { QuestionsPreviewGeneralComponent } from './components/questions-preview-general/questions-preview-general.component';
-import { QuestionsSearchComponent } from './components/questions-search/questions-search.component';
-import { AuthorizedStudentGuard } from 'src/app/core/guards/authorized-student.guard';
-import { AskQuestionComponent } from './components/ask-question/ask-question.component';
-
-const routes: Routes = [
-  {
-    component: QuestioningGeneralComponent,
-    path: '',
-    children: [
-      {
-        path: 'preview',
-        pathMatch: 'full',
-        component: QuestionsPreviewGeneralComponent
-      },
-      {
-        path: 'search',
-        pathMatch: 'full',
-        component: QuestionsSearchComponent
-      },
-      {
-        path: 'ask',
-        pathMatch: 'full',
-        component: AskQuestionComponent,
-        canActivate: [AuthorizedStudentGuard]
-      },
-      {
-        path: ':questionUid',
-        component: QuestionPreviewGeneralComponent
-      }
-    ]
-  }
-];
-
-@NgModule({
-  imports: [RouterModule.forChild(routes)],
-  exports: [RouterModule]
-})
-export class QuestioningRoutingModule {}
Index: src/Clients/Angular/finki-chattery/src/app/modules/questioning/services/questioning-api.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/modules/questioning/services/questioning-api.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,18 +1,0 @@
-import { HttpClient } from '@angular/common/http';
-import { Injectable } from '@angular/core';
-import { Observable } from 'rxjs';
-import { AskQuestionRequest } from 'src/app/shared-app/models';
-import { BaseApiService } from 'src/app/shared-app/services/base-api.service';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class QuestioningApiService extends BaseApiService {
-  constructor(protected http: HttpClient) {
-    super(http);
-  }
-
-  askQuestion(body: AskQuestionRequest): Observable<string> {
-    return this.post('v1/questions', body);
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/components.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/components.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,37 +1,0 @@
-import { ButtonComponent } from './generic/button/button.component';
-import { DeleteConfirmDialogComponent } from './generic/delete-confirm-dialog/delete-confirm-dialog.component';
-import { FileUploadComponent } from './generic/file-upload/file-upload.component';
-import { FormErrorComponent } from './generic/form-error/form-error.component';
-import { HeaderComponent } from './generic/header/header.component';
-import { TextEditorComponent } from './generic/text-editor/text-editor.component';
-import { VoteComponent } from './generic/vote/vote.component';
-import { AnswerQuestionComponent } from './question/answer-question/answer-question.component';
-import { AskQuestionSharedComponent } from './question/ask-question-shared/ask-question-shared.component';
-import { EditAnswerDialogComponent } from './question/edit-answer-dialog/edit-answer-dialog.component';
-import { EditAnswerResponseDialogComponent } from './question/edit-answer-response-dialog/edit-answer-response-dialog.component';
-import { PreviewQuestionDisplayComponent } from './question/preview-question-display/preview-question-display.component';
-import { PreviewQuestionFullComponent } from './question/preview-question-full/preview-question-full.component';
-import { QuestionPreviewComponent } from './question/question-preview/question-preview.component';
-import { RespondToAnswerDialogComponent } from './question/respond-to-answer-dialog/respond-to-answer-dialog.component';
-import { SearchQuestionComponent } from './question/search-question/search-question.component';
-import { StudentCardComponent } from './question/student-card/student-card.component';
-
-export const COMPONENTS: any[] = [
-  ButtonComponent,
-  FormErrorComponent,
-  FileUploadComponent,
-  QuestionPreviewComponent,
-  VoteComponent,
-  StudentCardComponent,
-  HeaderComponent,
-  SearchQuestionComponent,
-  PreviewQuestionDisplayComponent,
-  AskQuestionSharedComponent,
-  PreviewQuestionFullComponent,
-  TextEditorComponent,
-  RespondToAnswerDialogComponent,
-  AnswerQuestionComponent,
-  EditAnswerDialogComponent,
-  EditAnswerResponseDialogComponent,
-  DeleteConfirmDialogComponent
-];
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/components.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/components.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/components.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,5 @@
+import { ButtonComponent } from './button/button.component';
+import { FileUploadComponent } from './file-upload/file-upload.component';
+import { FormErrorComponent } from './form-error/form-error.component';
+
+export const COMPONENTS: any[] = [ButtonComponent, FormErrorComponent, FileUploadComponent];
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/delete-confirm-dialog/delete-confirm-dialog.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/delete-confirm-dialog/delete-confirm-dialog.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,10 +1,0 @@
-<h1 mat-dialog-title>{{ title | translate }}</h1>
-<mat-dialog-content> </mat-dialog-content>
-<mat-dialog-actions>
-  <app-button class="margin-right-sm" [buttonType]="ButtonType.Basic" (action)="dialogRef.close()">
-    {{ 'close-button' | translate }}
-  </app-button>
-  <app-button [buttonType]="ButtonType.Warn" (action)="dialogRef.close(true)">
-    {{ 'delete-button' | translate }}
-  </app-button>
-</mat-dialog-actions>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/delete-confirm-dialog/delete-confirm-dialog.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/delete-confirm-dialog/delete-confirm-dialog.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { DeleteConfirmDialogComponent } from './delete-confirm-dialog.component';
-
-describe('DeleteConfirmDialogComponent', () => {
-  let component: DeleteConfirmDialogComponent;
-  let fixture: ComponentFixture<DeleteConfirmDialogComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ DeleteConfirmDialogComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(DeleteConfirmDialogComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/delete-confirm-dialog/delete-confirm-dialog.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/delete-confirm-dialog/delete-confirm-dialog.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,17 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { MatDialogRef } from '@angular/material/dialog';
-import { ButtonType } from '../button/button.models';
-
-@Component({
-  selector: 'app-delete-confirm-dialog',
-  templateUrl: './delete-confirm-dialog.component.html',
-  styleUrls: ['./delete-confirm-dialog.component.scss']
-})
-export class DeleteConfirmDialogComponent implements OnInit {
-  title = 'delete-basic-title';
-  ButtonType = ButtonType;
-
-  constructor(public dialogRef: MatDialogRef<DeleteConfirmDialogComponent>) {}
-
-  ngOnInit(): void {}
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,52 +1,0 @@
-<mat-toolbar>
-  <mat-toolbar-row>
-    <span fxLayout="row start" class="cursor" (click)="navigateFromLogo()"
-      ><img
-        class="padding-top-sm"
-        fxFlex="16%"
-        fxFlex.md="30%"
-        fxFlex.sm="40%"
-        fxFlex.xs="100%"
-        alt="finki-chattery"
-        src="assets/images/logo.png"
-    /></span>
-    <span class="right"></span>
-
-    <app-button class="margin-y-xs" *ngIf="auth.isStudent()" (action)="askQuestion()" [buttonType]="ButtonType.CallToAction">{{
-      'header-ask-question' | translate
-    }}</app-button>
-    <app-button [matMenuTriggerFor]="menu" class="margin-y-xs" *ngIf="auth.isStudent()" [buttonType]="ButtonType.Basic">{{
-      'header-student-questions' | translate
-    }}</app-button>
-    <app-button
-      matBadge="{{ auth.selfUser?.student?.notifications?.length }}"
-      matBadgeHidden="{{ studentCheckedNotifications || auth.selfUser?.student?.notifications?.length === 0 }}"
-      [matMenuTriggerFor]="notificationMenu"
-      class="margin-y-xs"
-      *ngIf="auth.isStudent()"
-      (click)="studentCheckedNotificationsClick()"
-      [buttonType]="ButtonType.Basic"
-    >
-      <mat-icon>notifications</mat-icon>
-    </app-button>
-    <app-button class="margin-y-xs" *ngIf="auth.isLoggedIn()" (action)="logout()" [buttonType]="ButtonType.Basic">{{
-      'header-logout' | translate
-    }}</app-button>
-  </mat-toolbar-row>
-  <mat-toolbar-row *ngIf="auth.isStudent()">
-    <app-search-question class="search-questions"></app-search-question>
-  </mat-toolbar-row>
-</mat-toolbar>
-
-<mat-menu #menu="matMenu">
-  <button (click)="goToQuestion(q.questionUid)" mat-menu-item *ngFor="let q of auth.selfUser?.student?.questions">
-    <mat-icon>question_answer</mat-icon>
-    <span>{{ q?.title }}</span>
-  </button>
-</mat-menu>
-
-<mat-menu #notificationMenu="matMenu">
-  <div (click)="goToQuestion(q.questionUid)" mat-menu-item *ngFor="let q of auth.selfUser?.student?.notifications">
-    {{ q?.text }} <span class="time-ago">{{ q?.createdOn | timeAgo }}</span>
-  </div>
-</mat-menu>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.scss
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.scss	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,19 +1,0 @@
-.right {
-  flex: 1 1 auto;
-}
-
-.search-questions {
-  width: 60%;
-  margin: auto;
-}
-
-@media only screen and (max-width: 600px) {
-  .search-questions {
-    width: 100%;
-    margin: 0;
-  }
-}
-
-::ng-deep.mat-menu-panel {
-  max-width: none !important;
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,47 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { Router } from '@angular/router';
-import { AuthService } from 'src/app/core/services';
-import { ButtonType } from '../button/button.models';
-
-@Component({
-  selector: 'app-header',
-  templateUrl: './header.component.html',
-  styleUrls: ['./header.component.scss']
-})
-export class HeaderComponent implements OnInit {
-  ButtonType = ButtonType;
-
-  public studentCheckedNotifications = false;
-
-  constructor(public auth: AuthService, private router: Router) {}
-
-  ngOnInit(): void {}
-
-  logout(): void {
-    this.auth.logout();
-  }
-
-  askQuestion(): void {
-    this.router.navigateByUrl('questioning/ask');
-  }
-
-  navigateFromLogo(): void {
-    if (this.auth.isStudent()) {
-      this.router.navigateByUrl('questioning/preview');
-    }
-    if (this.auth.isModerator()) {
-      this.router.navigateByUrl('moderating/categories');
-    }
-  }
-
-  goToQuestion(questionUid: string): void {
-    this.router.navigateByUrl(`questioning/${questionUid}`);
-  }
-
-  studentCheckedNotificationsClick(): void {
-    if (!this.studentCheckedNotifications) {
-      this.auth.studentCheckedNotifications().subscribe();
-    }
-    this.studentCheckedNotifications = true;
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/text-editor/text-editor.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/text-editor/text-editor.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-<editor
-  class="margin-x-sm"
-  apiKey="fx28x0d64jeufa35u7mcd80fgveayg5c4ap9gnr6posehzny"
-  matInput
-  [init]="configuration"
-  [attr.disabled]="readonly"
-  [initialValue]="text"
-  [formControl]="textForm"
-></editor>
-<mat-error *ngIf="textForm?.touched && textForm?.errors?.required">{{ 'error-message-filed-required' | translate }}</mat-error>
-<mat-error *ngIf="textForm?.touched && textForm?.errors?.maxlength">{{
-  'error-message-max-length' | translate: { maxlength: textForm?.errors?.maxlength?.requiredLength }
-}}</mat-error>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/text-editor/text-editor.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/text-editor/text-editor.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { TextEditorComponent } from './text-editor.component';
-
-describe('TextEditorComponent', () => {
-  let component: TextEditorComponent;
-  let fixture: ComponentFixture<TextEditorComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ TextEditorComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(TextEditorComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/text-editor/text-editor.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/text-editor/text-editor.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,32 +1,0 @@
-import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
-
-@Component({
-  selector: 'app-text-editor',
-  templateUrl: './text-editor.component.html',
-  styleUrls: ['./text-editor.component.scss']
-})
-export class TextEditorComponent implements OnInit, OnChanges {
-  @Input() textForm = new FormControl('', [Validators.required, Validators.maxLength(4000)]);
-  @Input() text?: string;
-  @Input() readonly = false;
-  @Input() configuration: Record<string, any> = {
-    menubar: false,
-    plugins: [
-      'advlist autolink lists link image charmap print preview anchor',
-      'searchreplace visualblocks code fullscreen',
-      'insertdatetime media table paste code help wordcount'
-    ],
-    toolbar:
-      'undo redo | formatselect | bold italic backcolor | code | \
-      alignleft aligncenter alignright alignjustify | \
-      bullist numlist outdent indent | removeformat | help'
-  };
-
-  constructor() {}
-  ngOnChanges(changes: SimpleChanges): void {
-    this.textForm.setValue(this.text);
-  }
-
-  ngOnInit(): void {}
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<div class="main-div">
-  <div class="vote-icons" fxLayout="column" fxLayoutAlign="center center">
-    <mat-icon class="vote-icon" (click)="voted(VoteType.Upvote)" [inline]="true">arrow_drop_up</mat-icon>
-    <div class="text-bold text-center">{{ voteCount }}</div>
-    <mat-icon class="vote-icon margin-bottom-xs" (click)="voted(VoteType.Downvote)" [inline]="true">arrow_drop_down</mat-icon>
-    <mat-icon [inline]="true" matTooltip="{{ 'vote-correct-answer' | translate }}" class="text-center text-bold green" *ngIf="correct"
-      >check</mat-icon
-    >
-    <mat-icon
-      *ngIf="canSetCorrectAnswer && !correct"
-      [inline]="true"
-      class="text-center text-bold green set-correct-answer"
-      (click)="setCorrectAnswer.emit()"
-      >check</mat-icon
-    >
-  </div>
-</div>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.scss
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.scss	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,32 +1,0 @@
-.green {
-  color: green;
-}
-
-.vote-icons mat-icon {
-  font-size: 50px;
-}
-
-.vote-icon {
-  font-size: 70px !important;
-}
-
-mat-icon:hover {
-  cursor: pointer;
-}
-
-.show-on-hover {
-  display: none;
-}
-
-.set-correct-answer {
-  opacity: 0.3;
-  visibility: hidden;
-}
-
-.main-div:hover > .vote-icons > .set-correct-answer {
-  visibility: visible;
-}
-
-.main-div {
-  height: 100%;
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { VoteComponent } from './vote.component';
-
-describe('VoteComponent', () => {
-  let component: VoteComponent;
-  let fixture: ComponentFixture<VoteComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ VoteComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(VoteComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,27 +1,0 @@
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-import { VoteType } from 'src/app/shared-app/models';
-import { ButtonType } from '../button/button.models';
-
-@Component({
-  selector: 'app-vote',
-  templateUrl: './vote.component.html',
-  styleUrls: ['./vote.component.scss']
-})
-export class VoteComponent implements OnInit {
-  @Input() voteCount: number | undefined;
-  @Input() canSetCorrectAnswer: boolean | null = false;
-  @Input() correct = false;
-  @Output() voteClicked = new EventEmitter<VoteType>();
-  @Output() setCorrectAnswer = new EventEmitter<void>();
-
-  VoteType = VoteType;
-  ButtonType = ButtonType;
-
-  constructor() {}
-
-  ngOnInit(): void {}
-
-  public voted(voteType: VoteType): void {
-    this.voteClicked.emit(voteType);
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/answer-question/answer-question.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/answer-question/answer-question.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-<mat-card>
-  <mat-card-title>{{ 'answer-question-title' | translate }}</mat-card-title>
-  <mat-card-content>
-    <form [formGroup]="formGroup">
-      <app-text-editor [textForm]="textForm"></app-text-editor>
-    </form>
-  </mat-card-content>
-  <mat-card-actions>
-    <app-button [disabled]="formGroup.invalid" (action)="answerQuestion()" [buttonType]="ButtonType.CallToAction">{{
-      'answer-question-button' | translate
-    }}</app-button>
-  </mat-card-actions>
-</mat-card>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/answer-question/answer-question.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/answer-question/answer-question.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { AnswerQuestionComponent } from './answer-question.component';
-
-describe('AnswerQuestionComponent', () => {
-  let component: AnswerQuestionComponent;
-  let fixture: ComponentFixture<AnswerQuestionComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ AnswerQuestionComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(AnswerQuestionComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/answer-question/answer-question.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/answer-question/answer-question.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,42 +1,0 @@
-import { HttpErrorResponse } from '@angular/common/http';
-import { Component, OnInit } from '@angular/core';
-import { FormControl, FormGroup, Validators } from '@angular/forms';
-
-import { QuestionFacadeService } from 'src/app/core/state/question-facade.service';
-import { ButtonType } from '../../generic/button/button.models';
-
-@Component({
-  selector: 'app-answer-question',
-  templateUrl: './answer-question.component.html',
-  styleUrls: ['./answer-question.component.scss']
-})
-export class AnswerQuestionComponent implements OnInit {
-  ButtonType = ButtonType;
-  questionUid?: string;
-  textForm = new FormControl('', [Validators.required, Validators.maxLength(4000)]);
-  formGroup: FormGroup;
-
-  constructor(private questionFacade: QuestionFacadeService) {
-    this.formGroup = new FormGroup({
-      text: this.textForm
-    });
-  }
-
-  ngOnInit(): void {
-    this.questionFacade.getQuestion().subscribe((question) => {
-      this.questionUid = question.uid;
-    });
-
-    this.questionFacade.effectWorking$.subscribe((effect) => {
-      if (!(effect instanceof HttpErrorResponse) && effect === false) {
-        this.formGroup.reset();
-      }
-    });
-  }
-
-  answerQuestion(): void {
-    if (this.formGroup.valid && this.questionUid) {
-      this.questionFacade.answerQuestion(this.questionUid, this.textForm.value);
-    }
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/ask-question-shared/ask-question-shared.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/ask-question-shared/ask-question-shared.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,41 +1,0 @@
-<mat-horizontal-stepper linear #stepper>
-  <mat-step [stepControl]="questionFormGroup">
-    <ng-template matStepLabel>{{ 'ask-question-stepper-ask' | translate }}</ng-template>
-    <form [formGroup]="questionFormGroup">
-      <mat-form-field class="full-width margin-bottom-sm" appearance="fill" appHandleInputFormErrors>
-        <mat-label>{{ 'ask-question-question-title' | translate }}</mat-label>
-        <input matInput [formControl]="titleForm" />
-      </mat-form-field>
-
-      <app-text-editor [textForm]="textForm"></app-text-editor>
-
-      <mat-form-field class="full-width margin-bottom-sm" appearance="fill" appHandleInputFormErrors>
-        <mat-label>{{ 'ask-question-categories' | translate }}</mat-label>
-        <mat-select [formControl]="categoriesForm" multiple>
-          <mat-option *ngFor="let category of categoriesList$ | async" [value]="category">{{ category.translatedName }}</mat-option>
-        </mat-select>
-      </mat-form-field>
-
-      <button mat-button [disabled]="questionFormGroup.invalid" matStepperNext>
-        {{ 'ask-question-ask-button-preview' | translate }}
-      </button>
-    </form>
-  </mat-step>
-  <mat-step>
-    <ng-template matStepLabel>{{ 'ask-question-stepper-preview' | translate }}</ng-template>
-    <app-preview-question-full [question]="previewQuestion"></app-preview-question-full>
-    <div>
-      <button class="margin-y-xs" mat-button [disabled]="questionFormGroup.invalid" matStepperPrevious>
-        {{ 'ask-question-ask-button-back' | translate }}
-      </button>
-      <app-button
-        class="margin-y-xs"
-        [disabled]="questionFormGroup.invalid"
-        [buttonType]="ButtonType.CallToAction"
-        (action)="askQuestionEmit()"
-      >
-        {{ 'ask-question-ask-button' | translate }}
-      </app-button>
-    </div>
-  </mat-step>
-</mat-horizontal-stepper>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/ask-question-shared/ask-question-shared.component.scss
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/ask-question-shared/ask-question-shared.component.scss	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,7 +1,0 @@
-::ng-deep .mat-horizontal-content-container {
-  padding: 0 !important;
-}
-
-::ng-deep mat-card {
-  margin: 5px !important;
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/ask-question-shared/ask-question-shared.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/ask-question-shared/ask-question-shared.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,24 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { AskQuestionSharedComponent } from './ask-question-shared.component';
-
-describe('AskQuestionComponent', () => {
-  let component: AskQuestionSharedComponent;
-  let fixture: ComponentFixture<AskQuestionSharedComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [AskQuestionSharedComponent]
-    }).compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(AskQuestionSharedComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/ask-question-shared/ask-question-shared.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/ask-question-shared/ask-question-shared.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,70 +1,0 @@
-import { Component, EventEmitter, OnInit, Output } from '@angular/core';
-import { FormControl, FormGroup, Validators } from '@angular/forms';
-import * as moment from 'moment';
-
-import { CategoryFacadeService } from 'src/app/core/state/category-facade.service';
-import { ButtonType } from 'src/app/shared-app/components/generic/button/button.models';
-import {
-  AskQuestionRequest,
-  QuestionCategoryQuestionStateViewModel,
-  QuestionStateViewModel,
-  StudentQuestionStateViewModel
-} from 'src/app/shared-app/models';
-
-@Component({
-  selector: 'app-ask-question-shared',
-  templateUrl: './ask-question-shared.component.html',
-  styleUrls: ['./ask-question-shared.component.scss']
-})
-export class AskQuestionSharedComponent implements OnInit {
-  @Output() askQuestion = new EventEmitter<AskQuestionRequest>();
-
-  public previewQuestion?: QuestionStateViewModel;
-
-  public titleForm = new FormControl('', [Validators.required, Validators.maxLength(500)]);
-  public textForm = new FormControl('', [Validators.required, Validators.maxLength(4000)]);
-  public categoriesForm = new FormControl([]);
-  public questionFormGroup: FormGroup;
-  public ButtonType = ButtonType;
-  public categoriesList$ = this.categoriesFacade.getCategories();
-
-  constructor(private categoriesFacade: CategoryFacadeService) {
-    this.questionFormGroup = new FormGroup({
-      title: this.titleForm,
-      text: this.textForm,
-      categories: this.categoriesForm
-    });
-  }
-
-  ngOnInit(): void {
-    this.questionFormGroup.valueChanges.subscribe((x) => {
-      const student = new StudentQuestionStateViewModel('', '', '', 0);
-      const categories = this.categoriesForm.value.map(
-        (category: any) => new QuestionCategoryQuestionStateViewModel('', category.name, category.translatedName)
-      );
-
-      this.previewQuestion = new QuestionStateViewModel(
-        '',
-        this.titleForm.value,
-        this.textForm.value,
-        moment(),
-        0,
-        moment(),
-        student,
-        [],
-        categories,
-        null
-      );
-    });
-  }
-
-  public askQuestionEmit(): void {
-    this.askQuestion.emit(
-      new AskQuestionRequest(
-        this.titleForm.value,
-        this.textForm.value,
-        this.categoriesForm.value.map((x: any) => x.uid)
-      )
-    );
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-dialog/edit-answer-dialog.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-dialog/edit-answer-dialog.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,14 +1,0 @@
-<h1 mat-dialog-title>{{ 'edit-answer-title' | translate }}</h1>
-<mat-dialog-content>
-  <form [formGroup]="formGroup">
-    <app-text-editor [textForm]="textField" [text]="this.textFieldValue"></app-text-editor>
-  </form>
-</mat-dialog-content>
-<mat-dialog-actions>
-  <app-button class="margin-right-sm" [buttonType]="ButtonType.Basic" (action)="dialogRef.close()">
-    {{ 'close-button' | translate }}
-  </app-button>
-  <app-button [buttonType]="ButtonType.CallToAction" [disabled]="!formGroup.valid" (action)="submit()">
-    {{ 'submit-button' | translate }}
-  </app-button>
-</mat-dialog-actions>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-dialog/edit-answer-dialog.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-dialog/edit-answer-dialog.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { EditAnswerDialogComponent } from './edit-answer-dialog.component';
-
-describe('EditAnswerDialogComponent', () => {
-  let component: EditAnswerDialogComponent;
-  let fixture: ComponentFixture<EditAnswerDialogComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ EditAnswerDialogComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(EditAnswerDialogComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-dialog/edit-answer-dialog.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-dialog/edit-answer-dialog.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,36 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { FormControl, Validators, FormGroup } from '@angular/forms';
-import { MatDialogRef } from '@angular/material/dialog';
-
-import { QuestionFacadeService } from 'src/app/core/state/question-facade.service';
-import { ButtonType } from '../../generic/button/button.models';
-
-@Component({
-  selector: 'app-edit-answer-dialog',
-  templateUrl: './edit-answer-dialog.component.html',
-  styleUrls: ['./edit-answer-dialog.component.scss']
-})
-export class EditAnswerDialogComponent implements OnInit {
-  public ButtonType = ButtonType;
-  public textField = new FormControl('', [Validators.required, Validators.maxLength(4000)]);
-  public formGroup: FormGroup;
-  public questionUid!: string;
-  public answerUid!: string;
-  public answerResponseUid!: string;
-  public textFieldValue!: string;
-
-  constructor(public dialogRef: MatDialogRef<EditAnswerDialogComponent>, private questionFacade: QuestionFacadeService) {
-    this.formGroup = new FormGroup({
-      text: this.textField
-    });
-  }
-
-  ngOnInit(): void {
-    this.textField.setValue(this.textFieldValue);
-  }
-
-  submit(): void {
-    this.questionFacade.editAnswer(this.answerUid, this.questionUid, this.textField.value);
-    this.dialogRef.close();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-response-dialog/edit-answer-response-dialog.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-response-dialog/edit-answer-response-dialog.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,21 +1,0 @@
-<h1 mat-dialog-title>{{ 'edit-respond-to-answer-title' | translate }}</h1>
-<mat-dialog-content>
-  <form [formGroup]="formGroup">
-    <mat-form-field class="full-width margin-bottom-md" appearance="standard" appHandleInputFormErrors>
-      <textarea
-        matInput
-        autocomplete="off"
-        [placeholder]="'respond-to-answer-title-text-placeholder' | translate"
-        [formControl]="textField"
-      ></textarea>
-    </mat-form-field>
-  </form>
-</mat-dialog-content>
-<mat-dialog-actions>
-  <app-button class="margin-right-sm" [buttonType]="ButtonType.Basic" (action)="dialogRef.close()">
-    {{ 'close-button' | translate }}
-  </app-button>
-  <app-button [buttonType]="ButtonType.CallToAction" [disabled]="!formGroup.valid" (action)="submit()">
-    {{ 'submit-button' | translate }}
-  </app-button>
-</mat-dialog-actions>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-response-dialog/edit-answer-response-dialog.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-response-dialog/edit-answer-response-dialog.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { EditAnswerResponseDialogComponent } from './edit-answer-response-dialog.component';
-
-describe('EditAnswerResponseDialogComponent', () => {
-  let component: EditAnswerResponseDialogComponent;
-  let fixture: ComponentFixture<EditAnswerResponseDialogComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ EditAnswerResponseDialogComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(EditAnswerResponseDialogComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-response-dialog/edit-answer-response-dialog.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/edit-answer-response-dialog/edit-answer-response-dialog.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,36 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { FormControl, Validators, FormGroup } from '@angular/forms';
-import { MatDialogRef } from '@angular/material/dialog';
-
-import { QuestionFacadeService } from 'src/app/core/state/question-facade.service';
-import { ButtonType } from '../../generic/button/button.models';
-
-@Component({
-  selector: 'app-edit-answer-response-dialog',
-  templateUrl: './edit-answer-response-dialog.component.html',
-  styleUrls: ['./edit-answer-response-dialog.component.scss']
-})
-export class EditAnswerResponseDialogComponent implements OnInit {
-  public ButtonType = ButtonType;
-  public textField = new FormControl('', [Validators.required, Validators.maxLength(4000)]);
-  public formGroup: FormGroup;
-  public questionUid!: string;
-  public answerUid!: string;
-  public answerResponseUid!: string;
-  public textFieldValue!: string;
-
-  constructor(public dialogRef: MatDialogRef<EditAnswerResponseDialogComponent>, private questionFacade: QuestionFacadeService) {
-    this.formGroup = new FormGroup({
-      text: this.textField
-    });
-  }
-
-  ngOnInit(): void {
-    this.textField.setValue(this.textFieldValue);
-  }
-
-  submit(): void {
-    this.questionFacade.editAnswerResponse(this.answerUid, this.questionUid, this.answerResponseUid, this.textField.value);
-    this.dialogRef.close();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-display/preview-question-display.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-display/preview-question-display.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,24 +1,0 @@
-<mat-card class="margin-bottom-md cursor" appHoverElevation (click)="handleQuestionCardClicked()">
-  <mat-card-title>{{ question?.title }}</mat-card-title>
-  <mat-card-subtitle>{{
-    'questions-preview-question-subtitle' | translate: { date: question?.createdOn | momentDate: 'LLLL' }
-  }}</mat-card-subtitle>
-
-  <mat-card-content>
-    <div fxLayout="row" fxLayoutGap="15px" fxLayoutAlign="start center">
-      <mat-chip-list>
-        <mat-chip *ngFor="let category of question?.categories">
-          {{ category.nameTranslated }}
-        </mat-chip>
-      </mat-chip-list>
-      <div class="text-center push-end">
-        <mat-icon matBadge="{{ question?.answersCount }}" matBadgeColor="primary">question_answer</mat-icon>
-        <p>{{ 'questions-preview-question-answers' | translate }}</p>
-      </div>
-      <div class="text-center">
-        <mat-icon matBadge="{{ question?.views }}" matBadgeColor="primary">visibility</mat-icon>
-        <p>{{ 'questions-preview-question-views' | translate }}</p>
-      </div>
-    </div>
-  </mat-card-content>
-</mat-card>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-display/preview-question-display.component.scss
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-display/preview-question-display.component.scss	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,11 +1,0 @@
-mat-card-subtitle {
-  margin-bottom: 0;
-}
-
-p {
-  margin-bottom: 0;
-}
-
-.push-end {
-  margin-left: auto;
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-display/preview-question-display.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-display/preview-question-display.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { PreviewQuestionDisplayComponent } from './preview-question-display.component';
-
-describe('PreviewQuestionDisplayComponent', () => {
-  let component: PreviewQuestionDisplayComponent;
-  let fixture: ComponentFixture<PreviewQuestionDisplayComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ PreviewQuestionDisplayComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(PreviewQuestionDisplayComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-display/preview-question-display.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-display/preview-question-display.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,19 +1,0 @@
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-import { PreviewQuestionViewModel } from 'src/app/shared-app/models';
-
-@Component({
-  selector: 'app-preview-question-display',
-  templateUrl: './preview-question-display.component.html',
-  styleUrls: ['./preview-question-display.component.scss']
-})
-export class PreviewQuestionDisplayComponent implements OnInit {
-  @Input() question?: PreviewQuestionViewModel;
-  @Output() questionClicked = new EventEmitter();
-  constructor() {}
-
-  ngOnInit(): void {}
-
-  handleQuestionCardClicked(): void {
-    this.questionClicked.emit();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-full/preview-question-full.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-full/preview-question-full.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,47 +1,0 @@
-<mat-card appHoverElevation>
-  <mat-card-title>{{ question?.title }}</mat-card-title>
-  <mat-card-subtitle
-    [innerHTML]="
-      'question-preview-subtitle'
-        | translate
-          : {
-              createdOn: question?.createdOn | momentDate: 'LLLL',
-              lastActive: question?.lastActiveOn | momentDate: 'LLLL',
-              views: question?.views
-            }
-    "
-  ></mat-card-subtitle>
-  <mat-card-content>
-    <mat-chip-list>
-      <mat-chip *ngFor="let category of question?.categories">
-        {{ category.translatedName }}
-      </mat-chip>
-    </mat-chip-list>
-
-    <app-text-editor
-      [text]="question?.text"
-      [configuration]="{
-        menubar: false,
-        plugins: ['autoresize'],
-        toolbar: ''
-      }"
-      [readonly]="true"
-    ></app-text-editor>
-
-    <div class="align-right">
-      <app-student-card
-        [indexNumber]="question?.student?.index"
-        [imageUrl]="question?.student?.imageUrl"
-        [uid]="question?.student?.uid"
-        [reputation]="question?.student?.reputation"
-        [subtitle]="'question-asked-by-subtitle' | translate: { date: question?.createdOn | momentDate: 'LL' }"
-      ></app-student-card>
-    </div>
-  </mat-card-content>
-  <mat-card-actions>
-    <app-button (action)="scrollToBottom()" [buttonType]="ButtonType.CallToAction">{{
-      'preview-question-full-answer' | translate
-    }}</app-button>
-    <app-button appShareLink [buttonType]="ButtonType.Basic">{{ 'share-link' | translate }}</app-button>
-  </mat-card-actions>
-</mat-card>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-full/preview-question-full.component.scss
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-full/preview-question-full.component.scss	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-.align-right {
-  display: flex;
-  justify-content: right;
-}
-
-mat-card-content {
-  margin-bottom: 0;
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-full/preview-question-full.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-full/preview-question-full.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { PreviewQuestionFullComponent } from './preview-question-full.component';
-
-describe('PreviewQuestionFullComponent', () => {
-  let component: PreviewQuestionFullComponent;
-  let fixture: ComponentFixture<PreviewQuestionFullComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ PreviewQuestionFullComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(PreviewQuestionFullComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-full/preview-question-full.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-full/preview-question-full.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-import { Component, Input, OnInit } from '@angular/core';
-import { QuestionStateViewModel } from 'src/app/shared-app/models';
-import { ButtonType } from '../../generic/button/button.models';
-
-@Component({
-  selector: 'app-preview-question-full',
-  templateUrl: './preview-question-full.component.html',
-  styleUrls: ['./preview-question-full.component.scss']
-})
-export class PreviewQuestionFullComponent implements OnInit {
-  @Input() question?: QuestionStateViewModel;
-  ButtonType = ButtonType;
-  constructor() {}
-
-  ngOnInit(): void {}
-
-  scrollToBottom(): void {
-    window.scrollTo(0, document.body.scrollHeight);
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,89 +1,0 @@
-<div *ngIf="!working">
-  <div class="margin-bottom-xl">
-    <app-preview-question-full [question]="question"></app-preview-question-full>
-  </div>
-
-  <h1 class="mat-headline">{{ 'question-answers' | translate: { answerCount: question.answers.length } }}</h1>
-  <mat-button-toggle-group>
-    <mat-button-toggle>{{ 'answer-sort-oldest' | translate }}</mat-button-toggle>
-    <mat-button-toggle>{{ 'answer-sort-votes' | translate }}</mat-button-toggle>
-  </mat-button-toggle-group>
-
-  <ng-container *ngFor="let answer of question.answers">
-    <mat-card appHoverElevation class="margin-x-md">
-      <mat-card-content>
-        <div fxLayout="row wrap" fxLayoutAlign="space-around none">
-          <app-vote
-            [canSetCorrectAnswer]="canSetCorrectAnswer | async"
-            [voteCount]="answer.votesCount"
-            [correct]="answer.correctAnswer"
-            (voteClicked)="answerVoted($event, answer.uid, question.uid)"
-            (setCorrectAnswer)="setCorrectAnswer(question.uid, answer.uid)"
-            fxFlex="6%"
-          ></app-vote>
-          <div fxFlex="92%">
-            <app-text-editor
-              [text]="answer.text"
-              [configuration]="{
-                menubar: false,
-                plugins: ['autoresize'],
-                toolbar: ''
-              }"
-              [readonly]="true"
-            ></app-text-editor>
-            <div class="align-right">
-              <app-student-card
-                [indexNumber]="answer.student.index"
-                [imageUrl]="answer.student.imageUrl"
-                [uid]="answer.student.uid"
-                [reputation]="answer.student.reputation"
-                [subtitle]="'question-answered-by-subtitle' | translate: { date: answer.createdOn | momentDate: 'LL' }"
-              ></app-student-card>
-            </div>
-
-            <hr />
-            <div *ngFor="let answerResponse of answer.answerResponses">
-              {{ answerResponse.text }}
-              <mat-chip class="cursor">{{ answerResponse.student.index }}</mat-chip> -
-              {{ answerResponse.createdOn | momentDate: 'LL' }}
-              <span
-                class="cursor text-bold padding-right-sm"
-                *ngIf="studentQuestion.currentUserCanEditAnswerResponse(answerResponse)"
-                (click)="editAnswerResponse(question.uid, answer.uid, answerResponse.uid, answerResponse.text)"
-                >{{ 'question-preview-edit-answer-response' | translate }}</span
-              >
-              <span
-                class="cursor text-bold"
-                *ngIf="studentQuestion.currentUserCanDeleteAnswerResponse(answerResponse)"
-                (click)="deleteAnswerResponse(question.uid, answer.uid, answerResponse.uid)"
-                >{{ 'delete-button' | translate }}</span
-              >
-              <hr />
-            </div>
-          </div>
-        </div>
-      </mat-card-content>
-      <mat-card-actions>
-        <app-button (action)="openRespondToAnswerDialog(answer.uid)" [buttonType]="ButtonType.Basic">{{
-          'question-preview-respond-to-answer-button' | translate
-        }}</app-button>
-        <app-button
-          *ngIf="studentQuestion.currentUserCanEditAnswer(answer)"
-          (action)="editAnswer(question.uid, answer.uid, answer.text)"
-          [buttonType]="ButtonType.Basic"
-          >{{ 'question-preview-edit-answer' | translate }}</app-button
-        >
-        <app-button
-          *ngIf="studentQuestion.currentUserCanDeleteAnswer(answer)"
-          [disabled]="studentQuestion.currentUserCanNotDeleteAnswerBecauseMarkedCorrectEvenThoughHeIsTheAuthor(answer)"
-          matTooltip="{{ 'question-preview-can-not-delete-because-marked-correct' | translate }}"
-          [matTooltipDisabled]="!studentQuestion.currentUserCanNotDeleteAnswerBecauseMarkedCorrectEvenThoughHeIsTheAuthor(answer)"
-          (action)="deleteAnswer(question.uid, answer.uid)"
-          [buttonType]="ButtonType.Basic"
-          >{{ 'delete-button' | translate }}</app-button
-        >
-      </mat-card-actions>
-    </mat-card>
-  </ng-container>
-  <app-answer-question></app-answer-question>
-</div>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.scss
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.scss	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-.align-right {
-  display: flex;
-  justify-content: right;
-}
-
-mat-card-content {
-  margin-bottom: 0;
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { QuestionPreviewComponent } from './question-preview.component';
-
-describe('QuestionPreviewComponent', () => {
-  let component: QuestionPreviewComponent;
-  let fixture: ComponentFixture<QuestionPreviewComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ QuestionPreviewComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(QuestionPreviewComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,76 +1,0 @@
-import { HttpErrorResponse } from '@angular/common/http';
-import { Component, OnInit } from '@angular/core';
-import { NotificationService } from 'src/app/core/services/notification.service';
-import { StudentQuestionService } from 'src/app/core/services/student-question.service';
-import { QuestionFacadeService } from 'src/app/core/state/question-facade.service';
-
-import { QuestionStateViewModel, VoteType } from 'src/app/shared-app/models';
-import { SharedDialogService } from 'src/app/shared-app/services/shared-dialog.service';
-import { ButtonType } from '../../generic/button/button.models';
-
-@Component({
-  selector: 'app-question-preview',
-  templateUrl: './question-preview.component.html',
-  styleUrls: ['./question-preview.component.scss']
-})
-export class QuestionPreviewComponent implements OnInit {
-  canSetCorrectAnswer = this.questionFacade.currentQuestionOwnedByCurrentUser();
-  question!: QuestionStateViewModel;
-  working = true;
-  ButtonType = ButtonType;
-  constructor(
-    private questionFacade: QuestionFacadeService,
-    private notification: NotificationService,
-    private dialog: SharedDialogService,
-    public studentQuestion: StudentQuestionService
-  ) {}
-
-  ngOnInit(): void {
-    this.questionFacade.getQuestion().subscribe((question) => {
-      this.question = question;
-      this.working = false;
-    });
-
-    this.questionFacade.effectWorking$.subscribe((effect) => {
-      if (effect instanceof HttpErrorResponse) {
-        this.notification.handleErrorsNotification(effect.error);
-      }
-    });
-  }
-
-  answerVoted(voteType: VoteType, answerUid: string, questionUid: string): void {
-    this.questionFacade.voteAnswer(answerUid, questionUid, voteType);
-  }
-
-  setCorrectAnswer(questionUid: string, answerUid: string): void {
-    this.questionFacade.setCorrectAnswer(questionUid, answerUid);
-  }
-
-  openRespondToAnswerDialog(answerUid: string): void {
-    this.dialog.respondToAnswer(this.question.uid, answerUid);
-  }
-
-  editAnswer(questionUid: string, answerUid: string, text: string): void {
-    this.dialog.editAnswer(questionUid, answerUid, text);
-  }
-
-  editAnswerResponse(questionUid: string, answerUid: string, answerResponseUid: string, text: string): void {
-    this.dialog.editResponseToAnswer(questionUid, answerUid, answerResponseUid, text);
-  }
-
-  deleteAnswer(questionUid: string, answerUid: string): void {
-    this.dialog.confirmDelete().subscribe((canDelete) => {
-      if (canDelete) {
-        this.questionFacade.deleteAnswer(answerUid, questionUid);
-      }
-    });
-  }
-
-  deleteAnswerResponse(questionUid: string, answerUid: string, answerResponseUid: string): void {
-    this.dialog.confirmDelete().subscribe((canDelete) => {
-      if (canDelete) {
-        this.questionFacade.deleteAnswerResponse(answerUid, questionUid, answerResponseUid);
-      }
-    });
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/respond-to-answer-dialog/respond-to-answer-dialog.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/respond-to-answer-dialog/respond-to-answer-dialog.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,21 +1,0 @@
-<h1 mat-dialog-title>{{ 'respond-to-answer-title' | translate }}</h1>
-<mat-dialog-content>
-  <form [formGroup]="formGroup">
-    <mat-form-field class="full-width margin-bottom-md" appearance="standard" appHandleInputFormErrors>
-      <textarea
-        matInput
-        autocomplete="off"
-        [placeholder]="'respond-to-answer-title-text-placeholder' | translate"
-        [formControl]="textField"
-      ></textarea>
-    </mat-form-field>
-  </form>
-</mat-dialog-content>
-<mat-dialog-actions>
-  <app-button class="margin-right-sm" [buttonType]="ButtonType.Basic" (action)="dialogRef.close()">
-    {{ 'close-button' | translate }}
-  </app-button>
-  <app-button [buttonType]="ButtonType.CallToAction" [disabled]="!formGroup.valid" (action)="submit()">
-    {{ 'submit-button' | translate }}
-  </app-button>
-</mat-dialog-actions>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/respond-to-answer-dialog/respond-to-answer-dialog.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/respond-to-answer-dialog/respond-to-answer-dialog.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { RespondToAnswerDialogComponent } from './respond-to-answer-dialog.component';
-
-describe('RespondToAnswerDialogComponent', () => {
-  let component: RespondToAnswerDialogComponent;
-  let fixture: ComponentFixture<RespondToAnswerDialogComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ RespondToAnswerDialogComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(RespondToAnswerDialogComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/respond-to-answer-dialog/respond-to-answer-dialog.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/respond-to-answer-dialog/respond-to-answer-dialog.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,32 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { FormControl, FormGroup, Validators } from '@angular/forms';
-import { MatDialogRef } from '@angular/material/dialog';
-
-import { QuestionFacadeService } from 'src/app/core/state/question-facade.service';
-import { ButtonType } from '../../generic/button/button.models';
-
-@Component({
-  selector: 'app-respond-to-answer-dialog',
-  templateUrl: './respond-to-answer-dialog.component.html',
-  styleUrls: ['./respond-to-answer-dialog.component.scss']
-})
-export class RespondToAnswerDialogComponent implements OnInit {
-  public ButtonType = ButtonType;
-  public textField = new FormControl('', [Validators.required, Validators.maxLength(4000)]);
-  public formGroup: FormGroup;
-  public questionUid!: string;
-  public answerUid!: string;
-
-  constructor(public dialogRef: MatDialogRef<RespondToAnswerDialogComponent>, private questionFacade: QuestionFacadeService) {
-    this.formGroup = new FormGroup({
-      text: this.textField
-    });
-  }
-
-  ngOnInit(): void {}
-
-  submit(): void {
-    this.questionFacade.respondToAnswer(this.answerUid, this.questionUid, this.textField.value);
-    this.dialogRef.close();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/search-question/search-question.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/search-question/search-question.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-<mat-expansion-panel [(expanded)]="isExpanded">
-  <mat-expansion-panel-header>
-    <mat-form-field class="full-width" appearance="standard">
-      <input
-        [placeholder]="'questions-preview-find-question' | translate"
-        matInput
-        autocomplete="off"
-        [formControl]="questionSearchFormContor"
-        (keydown.Space)="$event.stopPropagation()"
-      />
-    </mat-form-field>
-  </mat-expansion-panel-header>
-  <mat-form-field appearance="standard" class="margin-right-md">
-    <mat-select
-      [formControl]="questionCategoriesFormContor"
-      multiple
-      [placeholder]="'questions-preview-find-question-categories' | translate"
-    >
-      <mat-option *ngFor="let category of categories$ | async" [value]="category.uid">{{ category.translatedName }}</mat-option>
-    </mat-select>
-  </mat-form-field>
-  <app-button [buttonType]="ButtonType.CallToAction" [disabled]="questionSearchFormContor.invalid" (action)="searchQuestions()">{{
-    'questions-search' | translate
-  }}</app-button>
-</mat-expansion-panel>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/search-question/search-question.component.scss
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/search-question/search-question.component.scss	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,7 +1,0 @@
-mat-form-field {
-  font-size: initial !important;
-}
-
-mat-expansion-panel {
-  z-index: 1;
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/search-question/search-question.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/search-question/search-question.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { SearchQuestionComponent } from './search-question.component';
-
-describe('SearchQuestionComponent', () => {
-  let component: SearchQuestionComponent;
-  let fixture: ComponentFixture<SearchQuestionComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ SearchQuestionComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(SearchQuestionComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/search-question/search-question.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/search-question/search-question.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,30 +1,0 @@
-import { Component, OnInit } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
-
-import { CategoryFacadeService } from 'src/app/core/state/category-facade.service';
-import { QuestionFacadeService } from 'src/app/core/state/question-facade.service';
-import { ButtonType } from '../../generic/button/button.models';
-
-@Component({
-  selector: 'app-search-question',
-  templateUrl: './search-question.component.html',
-  styleUrls: ['./search-question.component.scss']
-})
-export class SearchQuestionComponent implements OnInit {
-  ButtonType = ButtonType;
-  questionSearchFormContor = new FormControl('', [Validators.required, Validators.maxLength(250)]);
-  questionCategoriesFormContor = new FormControl();
-  categories$ = this.categoriesFacade.getCategories();
-  isExpanded = false;
-
-  constructor(private categoriesFacade: CategoryFacadeService, private questionsFacade: QuestionFacadeService) {}
-
-  ngOnInit(): void {}
-
-  public searchQuestions(): void {
-    this.isExpanded = false;
-    this.questionsFacade.searchQuestions(this.questionSearchFormContor.value, this.questionCategoriesFormContor.value);
-    this.questionSearchFormContor.reset();
-    this.questionCategoriesFormContor.reset();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/student-card/student-card.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/student-card/student-card.component.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<mat-card (click)="cardClicked()">
-  <mat-card-subtitle class="student-subtitle">{{ subtitle }}</mat-card-subtitle>
-  <mat-card-header>
-    <img mat-card-avatar src="{{ imageUrl }}" />
-    <mat-card-title>{{ indexNumber }}</mat-card-title>
-    <mat-card-subtitle>{{ 'student-reputation' | translate: { reputation: reputation } }}</mat-card-subtitle>
-  </mat-card-header>
-</mat-card>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/student-card/student-card.component.scss
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/student-card/student-card.component.scss	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-mat-card {
-  width: fit-content;
-  padding: 0;
-  box-shadow: none !important;
-}
-
-mat-card:hover {
-  cursor: pointer;
-}
-
-.student-subtitle {
-  margin: 0;
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/student-card/student-card.component.spec.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/student-card/student-card.component.spec.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { StudentCardComponent } from './student-card.component';
-
-describe('StudentCardComponent', () => {
-  let component: StudentCardComponent;
-  let fixture: ComponentFixture<StudentCardComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [ StudentCardComponent ]
-    })
-    .compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(StudentCardComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/student-card/student-card.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/student-card/student-card.component.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,23 +1,0 @@
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-
-@Component({
-  selector: 'app-student-card',
-  templateUrl: './student-card.component.html',
-  styleUrls: ['./student-card.component.scss']
-})
-export class StudentCardComponent implements OnInit {
-  @Input() imageUrl: string | undefined;
-  @Input() indexNumber: string | undefined;
-  @Input() uid?: string;
-  @Input() reputation: number | undefined;
-  @Input() subtitle: string | undefined;
-  @Output() studentCardClicked = new EventEmitter<string>();
-
-  constructor() {}
-
-  ngOnInit(): void {}
-
-  cardClicked(): void {
-    this.studentCardClicked.emit(this.uid);
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/directives/directives.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/directives/directives.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/directives/directives.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,9 +1,3 @@
-import {
-  HandleInputFormErrorsDirective,
-  HoverElevationDirective,
-  LoaderDirective,
-  HandleSelectFormErrorsDirective,
-  ShareLinkDirective
-} from '.';
+import { HandleInputFormErrorsDirective, HoverElevationDirective, LoaderDirective, HandleSelectFormErrorsDirective } from '.';
 
 export const DIRECTIVES: any[] = [
@@ -11,5 +5,4 @@
   LoaderDirective,
   HoverElevationDirective,
-  HandleSelectFormErrorsDirective,
-  ShareLinkDirective
+  HandleSelectFormErrorsDirective
 ];
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/directives/index.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/directives/index.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/directives/index.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -3,3 +3,2 @@
 export * from './hover-elevation.directive';
 export * from './handle-select-form-errors.directive';
-export * from './share-link.directive';
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/directives/share-link.directive.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/directives/share-link.directive.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,32 +1,0 @@
-import { Directive, ElementRef, HostListener, Input } from '@angular/core';
-
-import { NotificationService } from 'src/app/core/services/notification.service';
-
-@Directive({
-  selector: '[appShareLink]'
-})
-export class ShareLinkDirective {
-  @Input() link: string | null | undefined;
-
-  el: ElementRef;
-
-  constructor(el: ElementRef, private notification: NotificationService) {
-    this.el = el;
-  }
-
-  @HostListener('click', ['$event']) onClick($event: any): void {
-    let contentToCopy = window.location.href;
-    if (this.link) {
-      contentToCopy = this.link;
-    }
-
-    const copyFromElement = document.createElement('input');
-    copyFromElement.style.display = 'hide';
-    copyFromElement.value = contentToCopy;
-    document.body.appendChild(copyFromElement);
-    copyFromElement.select();
-    document.execCommand('copy');
-    document.body.removeChild(copyFromElement);
-    this.notification.successNotification('share-link-success');
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/models/category-state-view-models.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/models/category-state-view-models.models.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,3 +1,0 @@
-export class CategoryStateViewModel {
-  constructor(public uid: string, public name: string, public translatedName: string) {}
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/models/index.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/models/index.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/models/index.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,6 +1,2 @@
 export * from './error.models';
 export * from './user.models';
-export * from './question-state-view-models.models';
-export * from './category-state-view-models.models';
-export * from './question-state-enums.models';
-export * from './questioning-request.models';
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-enums.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-enums.models.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,9 +1,0 @@
-export enum PreviewQuestionsOrderEnum {
-  Latest,
-  Popular
-}
-
-export enum VoteType {
-  Upvote,
-  Downvote
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-view-models.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-view-models.models.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,80 +1,0 @@
-import { VoteType } from '.';
-
-export class QuestionStateViewModel {
-  constructor(
-    public uid: string,
-    public title: string,
-    public text: string,
-    public createdOn: moment.Moment,
-    public views: number,
-    public lastActiveOn: moment.Moment,
-    public student: StudentQuestionStateViewModel,
-    public answers: AnswerQuestionStateViewModel[],
-    public categories: QuestionCategoryQuestionStateViewModel[],
-    public team: TeamQuestionStateViewModel | null
-  ) {}
-}
-
-export class StudentQuestionStateViewModel {
-  constructor(public uid: string, public index: string, public imageUrl: string, public reputation: number) {}
-}
-
-export class TeamQuestionStateViewModel {
-  constructor(public uid: string, public name: string) {}
-}
-
-export class QuestionCategoryQuestionStateViewModel {
-  constructor(public uid: string, public name: string, public translatedName: string) {}
-}
-
-export class AnswerQuestionStateViewModel {
-  constructor(
-    public uid: string,
-    public text: string,
-    public correctAnswer: boolean,
-    public createdOn: moment.Moment,
-    public votesCount: number,
-    public student: AnswerStudentQuestionStateViewModel,
-    public answerResponses: AnswerResponseQuestionStateViewModel[]
-  ) {}
-}
-
-export class AnswerStudentQuestionStateViewModel {
-  constructor(public uid: string, public index: string, public imageUrl: string, public reputation: number) {}
-}
-
-export class AnswerResponseQuestionStateViewModel {
-  constructor(
-    public uid: string,
-    public text: string,
-    public createdOn: moment.Moment,
-    public student: AnswerResponseStudentQuestionStateViewModel
-  ) {}
-}
-
-export class AnswerResponseStudentQuestionStateViewModel {
-  constructor(public uid: string, public index: string, public imageUrl: string, public reputation: number) {}
-}
-
-export class PreviewQuestionViewModel {
-  constructor(
-    public uid: string,
-    public title: string,
-    public createdOn: moment.Moment,
-    public views: number,
-    public answersCount: number,
-    public categories: PreviewQuestionCategoryViewModel[]
-  ) {}
-}
-
-export class PreviewQuestionCategoryViewModel {
-  constructor(public uid: string, public text: string, public nameTranslated: string) {}
-}
-
-export class SearchQuestionsQueryViewModel {
-  constructor(public text: string) {}
-}
-
-export class VoteAnswerViewModel {
-  constructor(public answerUid: string, public voteUid: string, public voteType: VoteType, public voteAlreadyExists: boolean) {}
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/models/questioning-request.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/models/questioning-request.models.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,3 +1,0 @@
-export class AskQuestionRequest {
-  constructor(public title: string, public text: string, public categories: string[]) {}
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/models/user.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/models/user.models.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/models/user.models.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,4 +1,2 @@
-import * as moment from 'moment';
-
 export class ApplicationUser {
   constructor(
@@ -11,4 +9,8 @@
 }
 
+export class SelfUserResponse {
+  uid!: string;
+}
+
 export enum ApplicationUserType {
   Student = 'Student',
@@ -17,59 +19,2 @@
   Guest = 'Guest'
 }
-
-export class SelfUserResponse {
-  public student?: StudentSelfResponse | null;
-  public teacher?: TeacherSelfResponse | null;
-  public moderator?: ModeratorSelfResponse | null;
-}
-
-export class StudentSelfResponse {
-  public uid!: string;
-  public applicationUserId!: number;
-  public index!: string;
-  public reputation!: number;
-  public imageUrl!: string;
-  public questions!: StudentQuestionResponse[];
-  public teams!: StudentTeamResponse[];
-  public notifications!: StudentNotificationResponse[];
-}
-
-export class StudentNotificationResponse {
-  public uid!: string;
-  public createdOn!: moment.Moment;
-  public questionUid!: string;
-  public text!: string;
-
-  constructor(uid: string, createdOn: moment.Moment, questionUid: string, text: string) {
-    this.uid = uid;
-    this.createdOn = createdOn;
-    this.questionUid = questionUid;
-    this.text = text;
-  }
-}
-
-export class StudentQuestionResponse {
-  public questionUid!: string;
-  public title!: string;
-}
-
-export class StudentTeamResponse {
-  public teamUid!: string;
-  public name!: string;
-}
-
-export class ModeratorSelfResponse {
-  public uid!: string;
-  public applicationUserId!: number;
-}
-
-export class TeacherSelfResponse {
-  public uid!: string;
-  public applicationUserId!: number;
-  public teams!: TeacherTeamResponse[];
-}
-
-export class TeacherTeamResponse {
-  public teamUid!: string;
-  public name!: string;
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/pipes/moment-date.pipe.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/pipes/moment-date.pipe.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/pipes/moment-date.pipe.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -6,5 +6,5 @@
 })
 export class MomentDatePipe implements PipeTransform {
-  transform(value: moment.Moment | undefined | null, dateFormat: string): any {
+  transform(value: moment.Moment, dateFormat: string): any {
     return moment(value).format(dateFormat);
   }
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/services/base-api.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/services/base-api.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/services/base-api.service.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -4,7 +4,5 @@
 
 import { environment } from '@env/environment';
-import { SelfUserResponse, StudentNotificationResponse } from '../models';
-import { map } from 'rxjs/operators';
-import * as moment from 'moment';
+import { SelfUserResponse } from '../models';
 
 @Injectable({
@@ -21,15 +19,5 @@
 
   public getSelfUser(): Observable<SelfUserResponse> {
-    return this.get<SelfUserResponse>('v1/self').pipe(
-      map((x) => {
-        if (x.student) {
-          x.student.notifications = x.student.notifications.map(
-            (y) => new StudentNotificationResponse(y.uid, moment(y.createdOn), y.questionUid, y.text)
-          );
-        }
-
-        return x;
-      })
-    );
+    return this.get<SelfUserResponse>('self');
   }
 
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/services/shared-dialog.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/services/shared-dialog.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,71 +1,0 @@
-import { Injectable } from '@angular/core';
-import { MatDialog, MatDialogRef } from '@angular/material/dialog';
-import { Observable } from 'rxjs';
-import { DeleteConfirmDialogComponent } from '../components/generic/delete-confirm-dialog/delete-confirm-dialog.component';
-import { EditAnswerDialogComponent } from '../components/question/edit-answer-dialog/edit-answer-dialog.component';
-// tslint:disable-next-line: max-line-length
-import { EditAnswerResponseDialogComponent } from '../components/question/edit-answer-response-dialog/edit-answer-response-dialog.component';
-import { RespondToAnswerDialogComponent } from '../components/question/respond-to-answer-dialog/respond-to-answer-dialog.component';
-
-@Injectable({
-  providedIn: 'root'
-})
-export class SharedDialogService {
-  constructor(private dialog: MatDialog) {}
-
-  public respondToAnswer(questionUid: string, answerUid: string): Observable<any> {
-    let dialogRef: MatDialogRef<RespondToAnswerDialogComponent>;
-    dialogRef = this.dialog.open(RespondToAnswerDialogComponent, {
-      width: '650px',
-      height: 'auto'
-    });
-
-    dialogRef.componentInstance.questionUid = questionUid;
-    dialogRef.componentInstance.answerUid = answerUid;
-
-    return dialogRef.afterClosed();
-  }
-
-  public editResponseToAnswer(questionUid: string, answerUid: string, answerResponseUid: string, text: string): Observable<any> {
-    let dialogRef: MatDialogRef<EditAnswerResponseDialogComponent>;
-    dialogRef = this.dialog.open(EditAnswerResponseDialogComponent, {
-      width: '650px',
-      height: 'auto'
-    });
-
-    dialogRef.componentInstance.questionUid = questionUid;
-    dialogRef.componentInstance.answerUid = answerUid;
-    dialogRef.componentInstance.answerResponseUid = answerResponseUid;
-    dialogRef.componentInstance.textFieldValue = text;
-
-    return dialogRef.afterClosed();
-  }
-
-  public editAnswer(questionUid: string, answerUid: string, text: string): Observable<any> {
-    let dialogRef: MatDialogRef<EditAnswerDialogComponent>;
-    dialogRef = this.dialog.open(EditAnswerDialogComponent, {
-      width: '650px',
-      height: 'auto'
-    });
-
-    dialogRef.componentInstance.questionUid = questionUid;
-    dialogRef.componentInstance.answerUid = answerUid;
-    dialogRef.componentInstance.textFieldValue = text;
-
-    return dialogRef.afterClosed();
-  }
-
-  public confirmDelete(title?: string): Observable<any> {
-    let dialogRef: MatDialogRef<DeleteConfirmDialogComponent>;
-    dialogRef = this.dialog.open(DeleteConfirmDialogComponent, {
-      width: '650px',
-      height: 'auto'
-    });
-
-    if (title) {
-      dialogRef.componentInstance.title = title;
-    }
-
-    return dialogRef.afterClosed();
-  }
-}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/services/translate-from-json.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/services/translate-from-json.service.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/services/translate-from-json.service.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -43,6 +43,9 @@
   }
 
-  public instant(key: string): string {
-    return this.translateService.instant(key);
+  public instant(key?: string): string | undefined {
+    if (key) {
+      return this.translateService.instant(key);
+    }
+    return undefined;
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/shared-app.module.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/shared-app.module.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/shared-app.module.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -7,15 +7,15 @@
 import { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';
 import { FileUploadModule } from 'ng2-file-upload';
-import { EditorModule } from '@tinymce/tinymce-angular';
 
-import { COMPONENTS } from './components/components';
+import { COMPONENTS } from './components/generic/components';
 import { SharedMaterialModule } from '../shared-material/shared-material.module';
 import { DIRECTIVES } from './directives/directives';
 import { SERVICES } from './services/services';
 import { PIPES } from './pipes/pipes';
-import { NgPipesModule } from 'ngx-pipes';
+import { FileUploadComponent } from './components/generic/file-upload/file-upload.component';
+import { HandleSelectFormErrorsDirective } from './directives/handle-select-form-errors.directive';
 
 @NgModule({
-  declarations: [COMPONENTS, DIRECTIVES, PIPES],
+  declarations: [COMPONENTS, DIRECTIVES, PIPES, FileUploadComponent, HandleSelectFormErrorsDirective],
   providers: [SERVICES],
   imports: [
@@ -27,7 +27,5 @@
     FlexLayoutModule,
     FileUploadModule,
-    NgxMaterialTimepickerModule,
-    EditorModule,
-    NgPipesModule
+    NgxMaterialTimepickerModule
   ],
   exports: [
@@ -41,8 +39,5 @@
     COMPONENTS,
     DIRECTIVES,
-    PIPES,
-    SharedMaterialModule,
-    EditorModule,
-    NgPipesModule
+    PIPES
   ]
 })
Index: src/Clients/Angular/finki-chattery/src/app/shared-material/shared-material.module.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-material/shared-material.module.ts	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/app/shared-material/shared-material.module.ts	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -20,11 +20,4 @@
 import { MatDatepickerModule } from '@angular/material/datepicker';
 import { MatNativeDateModule } from '@angular/material/core';
-import { MatChipsModule } from '@angular/material/chips';
-import { MatTooltipModule } from '@angular/material/tooltip';
-import { MatButtonToggleModule } from '@angular/material/button-toggle';
-import { MatBadgeModule } from '@angular/material/badge';
-import { MatStepperModule } from '@angular/material/stepper';
-import { MatExpansionModule } from '@angular/material/expansion';
-
 @NgModule({
   imports: [
@@ -47,11 +40,5 @@
     MatTableModule,
     MatDatepickerModule,
-    MatNativeDateModule,
-    MatChipsModule,
-    MatTooltipModule,
-    MatButtonToggleModule,
-    MatBadgeModule,
-    MatStepperModule,
-    MatExpansionModule
+    MatNativeDateModule
   ],
   exports: [
@@ -73,11 +60,5 @@
     MatTableModule,
     MatDatepickerModule,
-    MatNativeDateModule,
-    MatChipsModule,
-    MatTooltipModule,
-    MatButtonToggleModule,
-    MatBadgeModule,
-    MatStepperModule,
-    MatExpansionModule
+    MatNativeDateModule
   ]
 })
Index: src/Clients/Angular/finki-chattery/src/assets/translations/en.json
===================================================================
--- src/Clients/Angular/finki-chattery/src/assets/translations/en.json	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/assets/translations/en.json	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -14,74 +14,4 @@
   "password-not-match": "Passwords don't match",
   "code-date-passed": "The code date has passed",
-  "not-found": "Not found",
-  "question-preview-subtitle": "Asked <b>{{createdOn}}</b>, Last active <b>{{lastActive}}</b>, Viewed <b>{{views}}</b> times",
-  "share-link": "Share",
-  "share-link-success": "Successfully copied link for sharing",
-  "question-asked-by-subtitle": "Asked on: {{date}}",
-  "question-answers": "{{answerCount}} Answers",
-  "question-answered-by-subtitle": "Answered on: {{date}}",
-  "student-reputation": "{{reputation}} reputation",
-  "vote-correct-answer": "This has been accepted as the correct answer by the owner of the question",
-  "answer-sort-oldest": "Oldest",
-  "answer-sort-votes": "Votes",
-  "internet-techologies": "Internet technologies",
-  "software-engineering": "Software engineering",
-  "visual-programming": "Visual programming",
-  "operating-systems": "Operating systems",
-  "internet-programming": "Internet programming",
-  "object-oriented-programming": "Object oriented programming",
-  "calculus": "Calculus",
-  "discrete-mathematics": "Discrete mathematics",
-  "web-programming": "Web programming",
-  "advanced-programming": "Advanced programming",
-  "questions-preview-find-question": "Search for a question",
-  "questions-preview-find-question-categories": "Search in categories",
-  "questions-search": "Search",
-  "questions-preview": "Preview questions",
-  "question-sort-newest": "Newest",
-  "question-sort-popular": "Most popular",
-  "questions-preview-question-subtitle": "Asked on: {{date}}",
-  "questions-preview-question-answers": "Answers",
-  "questions-preview-question-views": "Views",
-  "questions-search-title": "Search results for: {{searchQuery}}",
-  "ask-question-question-title": "Question title",
-  "ask-question-categories": "Add categories to question",
-  "ask-question-ask-button-preview": "Preview question",
-  "header-logout": "Logout",
-  "header-ask-question": "Ask question",
-  "ask-question-stepper-preview": "Preview question",
-  "ask-question-stepper-ask": "Ask question",
-  "ask-question-ask-button-back": "Edit question",
-  "sucess-vote": "Successfully voted answer",
-  "success-correct-answer": "Successfully set correct answer",
-  "success-answer-response": "Successfully responded to answer",
-  "ask-question-ask-button": "Ask question",
-  "question-preview-respond-to-answer-button": "Respond to answer",
-  "respond-to-answer-title": "Respond to answer",
-  "respond-to-answer-title-text-placeholder": "Response text",
-  "close-button": "Close",
-  "submit-button": "Submit",
-  "header-student-questions": "Your questions",
-  "success-answer": "Successfully answered question",
-  "preview-question-full-answer": "Answer question",
-  "answer-question-title": "Give your answer to the question",
-  "answer-question-button": "Answer",
-  "success-edit-answer-response": "Successfully edited response to answer",
-  "success-edit-answer": "Successfully edited answer",
-  "edit-respond-to-answer-title": "Edit answer response",
-  "edit-answer-title": "Edit answer",
-  "question-preview-edit-answer": "Edit answer",
-  "question-preview-edit-answer-response": "Edit response",
-  "success-delete-answer-response": "Successfully deleted answer response",
-  "success-delete-answer": "Successfully deleted answer",
-  "delete-button": "Delete",
-  "delete-basic-title": "Are you sure you want to delete this?",
-  "question-preview-can-not-delete-because-marked-correct": "Even though you are the author of the answer, it can not be deleted because it's marked as correct by the user who asked the question",
-  "StudentDoesNotOwnQuestion": "You do not own this question",
-  "AnswerAlreadyUpvoted": "You have already upvoted this answer",
-  "AnswerAlreadyDownvoted": "You have already downvoted this answer",
-  "StudentHasBadReputation": "You have bad reputation and can not vote",
-  "CategoryNameAlreadyExists": "Category with that name already exists",
-  "category-title": "Category title",
-  "create-new-category": "Create new category"
+  "not-found": "Not found"
 }
Index: src/Clients/Angular/finki-chattery/src/index.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/index.html	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/index.html	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -6,5 +6,5 @@
     <base href="/" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <link rel="icon" type="image/x-icon" href="favicon.png" />
+    <link rel="icon" type="image/x-icon" href="favicon.ico" />
     <link rel="preconnect" href="https://fonts.gstatic.com" />
     <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet" />
Index: src/Clients/Angular/finki-chattery/src/styles.scss
===================================================================
--- src/Clients/Angular/finki-chattery/src/styles.scss	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/Clients/Angular/finki-chattery/src/styles.scss	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -6,4 +6,9 @@
   margin: 0;
   font-family: Roboto, sans-serif;
+}
+
+.logo {
+  width: 200px;
+  height: 35px;
 }
 
@@ -259,6 +264,6 @@
 
 .avatar-image {
-  width: 80px;
-  height: 80px;
+  width: 100px;
+  height: 100px;
   display: block;
   border-radius: 50%;
@@ -280,6 +285,2 @@
   z-index: 1100 !important;
 }
-
-.full-width {
-  width: 100%;
-}
