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%;
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Authentication/AuthenticationPolicy.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Authentication/AuthenticationPolicy.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-﻿namespace FinkiChattery.Api.ApplicationServices.Authentication
-{
-    public static class AuthenticationPolicy
-    {
-        public const string Student = "Student";
-        public const string Moderator = "Moderator";
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Authentication/CurrentUserIsOfRoleRequirementHandler.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Authentication/CurrentUserIsOfRoleRequirementHandler.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,27 +1,0 @@
-﻿using FinkiChattery.Common.User;
-using Microsoft.AspNetCore.Authorization;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.ApplicationServices.Authentication
-{
-    public class CurrentUserIsOfRoleRequirementHandler : AuthorizationHandler<CurrentUserIsOfRoleRequirement>
-    {
-        public CurrentUserIsOfRoleRequirementHandler(ICurrentUser currentUser)
-        {
-            CurrentUser = currentUser;
-        }
-
-        public ICurrentUser CurrentUser { get; }
-
-        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CurrentUserIsOfRoleRequirement requirement)
-        {
-            if (CurrentUser.Role != requirement.UserRole)
-            {
-                context.Fail();
-            }
-
-            context.Succeed(requirement);
-            return Task.CompletedTask;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Authentication/Requirements/CurrentUserIsOfRoleRequirement.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Authentication/Requirements/CurrentUserIsOfRoleRequirement.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,15 +1,0 @@
-﻿using FinkiChattery.Common.User;
-using Microsoft.AspNetCore.Authorization;
-
-namespace FinkiChattery.Api.ApplicationServices.Authentication
-{
-    public class CurrentUserIsOfRoleRequirement : IAuthorizationRequirement
-    {
-        public CurrentUserIsOfRoleRequirement(UserRole userRole)
-        {
-            UserRole = userRole;
-        }
-
-        public UserRole UserRole { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Authentication/Requirements/ModeratorRequirement.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Authentication/Requirements/ModeratorRequirement.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿using FinkiChattery.Common.User;
-
-namespace FinkiChattery.Api.ApplicationServices.Authentication
-{
-    public class ModeratorRequirement : CurrentUserIsOfRoleRequirement
-    {
-        public ModeratorRequirement() : base(UserRole.Moderator)
-        {
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Authentication/Requirements/StudentRequirement.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Authentication/Requirements/StudentRequirement.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿using FinkiChattery.Common.User;
-
-namespace FinkiChattery.Api.ApplicationServices.Authentication
-{
-    public class StudentRequirement : CurrentUserIsOfRoleRequirement
-    {
-        public StudentRequirement() : base(UserRole.Student)
-        {
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/NotifyStudentHisAnswerIsMarkedCorrect.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/NotifyStudentHisAnswerIsMarkedCorrect.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Helpers;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.UnitOfWork;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.ApplicationServices.Questioning.EventHandlers
-{
-    public class NotifyStudentHisAnswerIsMarkedCorrect : IEventHandler<AnswerMarkedAsCorrectEvent>
-    {
-        public NotifyStudentHisAnswerIsMarkedCorrect(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task Handle(AnswerMarkedAsCorrectEvent notification, CancellationToken cancellationToken)
-        {
-            var student = await UnitOfWork.Students.GetByIdAsync(notification.StudentFk);
-            var question = await UnitOfWork.Questions.GetByUidAsync(notification.QuestionUid);
-
-            if (student == null)
-            {
-                return;
-            }
-
-            if (question == null)
-            {
-                return;
-            }
-
-            var studentNotification = new StudentNotification()
-            {
-                StudentFk = student.Id,
-                QuestionUid = notification.QuestionUid,
-                Text = $"Your answer has been marked as correct on question {question.Title}"
-            };
-
-            UnitOfWork.StudentNotifications.Add(studentNotification);
-            await UnitOfWork.SaveAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/NotifyStudentHisAnswerIsVoted.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/NotifyStudentHisAnswerIsVoted.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Helpers;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.UnitOfWork;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.ApplicationServices.Questioning.EventHandlers
-{
-    public class NotifyStudentHisAnswerIsVoted : IEventHandler<AnswerVotedEvent>
-    {
-        public NotifyStudentHisAnswerIsVoted(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task Handle(AnswerVotedEvent notification, CancellationToken cancellationToken)
-        {
-            var student = await UnitOfWork.Students.GetByUidAsync(notification.StudentUid);
-            var question = await UnitOfWork.Questions.GetByUidAsync(notification.QuestionUid);
-
-            if (student == null)
-            {
-                return;
-            }
-
-            if (question == null)
-            {
-                return;
-            }
-
-            var studentNotification = new StudentNotification()
-            {
-                StudentFk = student.Id,
-                QuestionUid = notification.QuestionUid,
-                Text = $"Your answer has been voted on question {question.Title}"
-            };
-
-            UnitOfWork.StudentNotifications.Add(studentNotification);
-            await UnitOfWork.SaveAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/NotifyStudentHisQuestionIsAnswered.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/NotifyStudentHisQuestionIsAnswered.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Helpers;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.UnitOfWork;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.ApplicationServices.Questioning.EventHandlers
-{
-    public class NotifyStudentHisQuestionIsAnswered : IEventHandler<QuestionAnsweredEvent>
-    {
-        public NotifyStudentHisQuestionIsAnswered(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task Handle(QuestionAnsweredEvent notification, CancellationToken cancellationToken)
-        {
-            var student = await UnitOfWork.Students.GetByUidAsync(notification.StudentUid);
-            var question = await UnitOfWork.Questions.GetByUidAsync(notification.QuestionUid);
-
-            if (student == null)
-            {
-                return;
-            }
-
-            if (question == null)
-            {
-                return;
-            }
-
-            var studentNotification = new StudentNotification()
-            {
-                StudentFk = student.Id,
-                QuestionUid = notification.QuestionUid,
-                Text = $"Your question {question.Title} has been answered"
-            };
-
-            UnitOfWork.StudentNotifications.Add(studentNotification);
-            await UnitOfWork.SaveAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/RemoveOtherCorrectAnswersAppartFromTheNewOneAndUpdateStudentReputationsEventHandler.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/RemoveOtherCorrectAnswersAppartFromTheNewOneAndUpdateStudentReputationsEventHandler.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,43 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.UnitOfWork;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.ApplicationServices.Questioning.EventHandlers
-{
-    public class RemoveOtherCorrectAnswersAppartFromTheNewOneAndUpdateStudentReputationsEventHandler : IEventHandler<AnswerMarkedAsCorrectEvent>
-    {
-        public RemoveOtherCorrectAnswersAppartFromTheNewOneAndUpdateStudentReputationsEventHandler(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task Handle(AnswerMarkedAsCorrectEvent notification, CancellationToken cancellationToken)
-        {
-            var questionWithAnswers = await UnitOfWork.Questions.GetQuestionWithAnswersAndStudents(notification.QuestionUid);
-
-            if (questionWithAnswers == null)
-            {
-                return;
-            }
-
-            foreach (var answer in questionWithAnswers.Answers)
-            {
-                if (answer.CorrectAnswer && answer.Uid != notification.AnswerUid)
-                {
-                    answer.CorrectAnswer = false;
-                    answer.Student.Reputation = answer.Student.Reputation - 5;
-                }
-                if (answer.Uid == notification.AnswerUid)
-                {
-                    answer.Student.Reputation = answer.Student.Reputation + 5;
-                }
-            }
-
-            await UnitOfWork.SaveAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateAnswerVotesEventHandler.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateAnswerVotesEventHandler.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,50 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Helpers;
-using FinkiChattery.Persistence.UnitOfWork;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.ApplicationServices.Questioning.EventHandlers
-{
-    public class UpdateAnswerVotesEventHandler : IEventHandler<AnswerVotedEvent>
-    {
-        public UpdateAnswerVotesEventHandler(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task Handle(AnswerVotedEvent notification, CancellationToken cancellationToken)
-        {
-            var answer = await UnitOfWork.Answers.GetByUidAsync(notification.AnswerUid);
-
-            if (answer == null)
-            {
-                return;
-            }
-
-            switch (notification.VoteType)
-            {
-                case VoteType.Upvote:
-                    answer.VotesCount++;
-
-                    if (notification.VoteAlreadyExists)
-                    {
-                        answer.VotesCount++;
-                    }
-                    break;
-                case VoteType.Downvote:
-                    answer.VotesCount--;
-                    if (notification.VoteAlreadyExists)
-                    {
-                        answer.VotesCount--;
-                    }
-                    break;
-            }
-
-            await UnitOfWork.SaveAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateQuestionAnswersCountAndLastActivityEventHandler.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateQuestionAnswersCountAndLastActivityEventHandler.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,34 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.ApplicationServices.Questioning.EventHandlers
-{
-    public class UpdateQuestionAnswersCountAndLastActivityEventHandler : IEventHandler<QuestionAnsweredEvent>
-    {
-        public UpdateQuestionAnswersCountAndLastActivityEventHandler(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task Handle(QuestionAnsweredEvent notification, CancellationToken cancellationToken)
-        {
-            var question = await UnitOfWork.Questions.GetByUidAsync(notification.QuestionUid);
-
-            if (question == null)
-            {
-                return;
-            }
-
-            question.AnswersCount++;
-            question.LastActiveOn = DateTime.UtcNow;
-
-            await UnitOfWork.SaveAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateStudentReputationEventHandler.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateStudentReputationEventHandler.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,49 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Helpers;
-using FinkiChattery.Persistence.UnitOfWork;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.ApplicationServices.Questioning.EventHandlers
-{
-    public class UpdateStudentReputationEventHandler : IEventHandler<AnswerVotedEvent>
-    {
-        public UpdateStudentReputationEventHandler(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task Handle(AnswerVotedEvent notification, CancellationToken cancellationToken)
-        {
-            var student = await UnitOfWork.Students.GetByUidAsync(notification.StudentUid);
-
-            if (student == null)
-            {
-                return;
-            }
-
-            switch (notification.VoteType)
-            {
-                case VoteType.Upvote:
-                    student.Reputation++;
-                    if (notification.VoteAlreadyExists)
-                    {
-                        student.Reputation++;
-                    }
-                    break;
-                case VoteType.Downvote:
-                    student.Reputation--;
-                    if (notification.VoteAlreadyExists)
-                    {
-                        student.Reputation++;
-                    }
-                    break;
-            }
-
-            await UnitOfWork.SaveAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/Mapper/CategoryMapper.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/Mapper/CategoryMapper.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,22 +1,0 @@
-﻿using FinkiChattery.Contracts.Questioning;
-using FinkiChattery.Persistence.Models;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace FinkiChattery.Api.ApplicationServices.Questioning
-{
-    public static class CategoryMapper
-    {
-        public static List<CategoryResponse> ToCategoryDtos(this IEnumerable<Category> categories)
-        {
-            var categoryDtos = new List<CategoryResponse>();
-
-            if (categories.Any())
-            {
-                categoryDtos = categories.Select(x => new CategoryResponse(x.Uid, x.Name)).ToList();
-            }
-
-            return categoryDtos;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/Mapper/QuestionMapper.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/Mapper/QuestionMapper.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,83 +1,0 @@
-﻿#nullable enable
-
-using FinkiChattery.Contracts.Questioning;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace FinkiChattery.Api.ApplicationServices.Questioning
-{
-    public static class QuestionMapper
-    {
-        public static List<PreviewQuestionResponse> ToPreviewQuestionsResponse(this IEnumerable<QuestionPreviewDto> questions)
-        {
-            var questionsResponse = new List<PreviewQuestionResponse>();
-
-            if (questions.Any())
-            {
-                questionsResponse = questions.Select(x =>
-                {
-                    var questionCategoriesResponse = new List<PreviewQuestionCategoryResponse>();
-
-                    if (x.Categories.Any())
-                    {
-                        questionCategoriesResponse = x.Categories.Select(y => new PreviewQuestionCategoryResponse(y.Id, y.Uid, y.Text)).ToList();
-                    }
-
-                    return new PreviewQuestionResponse(x.Id, x.Uid, x.Title, x.Views, x.AnswersCount, x.CreatedOn, questionCategoriesResponse);
-                }).ToList();
-            }
-
-            return questionsResponse;
-        }
-
-        public static QuestionStateResponse ToQuestionStateResponse(this QuestionStateDto questionState)
-        {
-            IEnumerable<AnswerQuestionStateResponse> answers = Enumerable.Empty<AnswerQuestionStateResponse>();
-
-            if (questionState.AnswersDto.Any())
-            {
-                answers = questionState.AnswersDto.Select(x => ToAnswerQuestionStateResponse(x));
-            }
-
-            IEnumerable<QuestionCategoryQuestionStateResponse> questionCategories = Enumerable.Empty<QuestionCategoryQuestionStateResponse>();
-
-            if (questionState.CategoriesDto.Any())
-            {
-                questionCategories = questionState.CategoriesDto.Select(x => new QuestionCategoryQuestionStateResponse(x.Id, x.Uid, x.Name));
-            }
-
-            TeamQuestionStateResponse? team = null;
-
-            if (questionState.TeamDto != null)
-            {
-                team = new TeamQuestionStateResponse(questionState.TeamDto.Id, questionState.TeamDto.Uid, questionState.TeamDto.Name);
-            }
-
-            var student = new StudentQuestionStateResponse(questionState.StudentDto.Id, questionState.StudentDto.Uid, questionState.StudentDto.Index, questionState.StudentDto.ImageUrl, questionState.StudentDto.Reputation);
-
-            return new QuestionStateResponse(questionState.Id, questionState.Uid, questionState.Title, questionState.Text, questionState.CreatedOn, questionState.Views, questionState.LastActiveOn, student, answers, questionCategories, team);
-        }
-
-        public static AnswerQuestionStateResponse ToAnswerQuestionStateResponse(this AnswerQuestionStateDto dto)
-        {
-            IEnumerable<AnswerResponseQuestionStateResponse> answerResponses = Enumerable.Empty<AnswerResponseQuestionStateResponse>();
-
-            if (dto.AnswerResponsesDto.Any())
-            {
-                answerResponses = dto.AnswerResponsesDto.Select(y => ToAnswerResponseQuestionStateResponse(y));
-            }
-
-            var answerStudent = new AnswerStudentQuestionStateResponse(dto.StudentDto.Id, dto.StudentDto.Uid, dto.StudentDto.Index, dto.StudentDto.ImageUrl, dto.StudentDto.Reputation);
-
-            return new AnswerQuestionStateResponse(dto.Id, dto.Uid, dto.Text, dto.CorrectAnswer, dto.CreatedOn, dto.VotesCount, answerStudent, answerResponses);
-        }
-
-        public static AnswerResponseQuestionStateResponse ToAnswerResponseQuestionStateResponse(this AnswerResponseQuestionStateDto dto)
-        {
-            var answerResponseStudent = new AnswerResponseStudentQuestionStateResponse(dto.StudentDto.Id, dto.StudentDto.Uid, dto.StudentDto.Index, dto.StudentDto.ImageUrl, dto.StudentDto.Reputation);
-
-            return new AnswerResponseQuestionStateResponse(dto.Id, dto.Uid, dto.Text, dto.CreatedOn, answerResponseStudent);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/User/Mapper/SelfUserMapper.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/User/Mapper/SelfUserMapper.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,42 +1,0 @@
-﻿using FinkiChattery.Contracts.User;
-using FinkiChattery.Queries.User;
-using System.Linq;
-
-namespace FinkiChattery.Api.ApplicationServices.User
-{
-    public static class SelfUserMapper
-    {
-        public static SelfUserResponse ToSelfUserResponse(this SelfUserDto dto)
-        {
-            if (dto.StudentSelf != null)
-            {
-                var student = new StudentSelfResponse(dto.StudentSelf.Uid,
-                                                      dto.StudentSelf.ApplicationUserId,
-                                                      dto.StudentSelf.Index,
-                                                      dto.StudentSelf.Reputation,
-                                                      dto.StudentSelf.ImageUrl,
-                                                      dto.StudentSelf.Questions.Select(x => new StudentQuestionResponse(x.QuestionUid, x.Title)),
-                                                      dto.StudentSelf.Teams.Select(x => new StudentTeamResponse(x.TeamUid, x.Name)),
-                                                      dto.StudentSelf.Notifications.Select(x => new StudentNotificationResponse(x.Uid, x.Text, x.CreatedOn, x.QuestionUid)));
-
-                return new SelfUserResponse(student);
-            }
-
-            if (dto.TeacherSelf != null)
-            {
-                var teacher = new TeacherSelfResponse(dto.TeacherSelf.Uid, dto.TeacherSelf.ApplicationUserId, dto.TeacherSelf.Teams.Select(x => new TeacherTeamResponse(x.TeamUid, x.Name)));
-
-                return new SelfUserResponse(null, teacher);
-            }
-
-            if (dto.ModeratorSelf != null)
-            {
-                var moderator = new ModeratorSelfResponse(dto.ModeratorSelf.Uid, dto.ModeratorSelf.ApplicationUserId);
-
-                return new SelfUserResponse(null, null, moderator);
-            }
-
-            return new SelfUserResponse();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/Controllers/ApiVersions.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Controllers/ApiVersions.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,7 +1,0 @@
-﻿namespace FinkiChattery.Api.Controllers
-{
-    public static class ApiVersions
-    {
-        public const string ApiVersion1 = "1";
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/Controllers/v1/AnswerResponsesController.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Controllers/v1/AnswerResponsesController.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,50 +1,0 @@
-﻿using FinkiChattery.Api.ApplicationServices.Authentication;
-using FinkiChattery.Api.ApplicationServices.Questioning;
-using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Contracts.Questioning;
-using IdentityServer4.AccessTokenValidation;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.Controllers.v1
-{
-    [ApiVersion(ApiVersions.ApiVersion1)]
-    [Route("api/v{version:apiVersion}/questions/{questionUid:Guid}/answers/{answerUid:Guid}/[controller]")]
-    [ApiController]
-    public class AnswerResponsesController : ControllerBase
-    {
-        public AnswerResponsesController(IMediatorService mediatorService)
-        {
-            MediatorService = mediatorService;
-        }
-
-        public IMediatorService MediatorService { get; }
-
-        [HttpPost]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> AddResponseToAnswer([FromRoute] Guid questionUid, [FromRoute] Guid answerUid, [FromBody] AnswerResponseRequest request)
-        {
-            var answerResponse = await MediatorService.SendAsync(new RespondToAnswerCommand(questionUid, answerUid, request.Text));
-            return Ok(answerResponse.ToAnswerResponseQuestionStateResponse());
-        }
-
-        [HttpPut("{answerResponseUid:Guid}")]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> EditAnswerResponse([FromRoute] Guid questionUid, [FromRoute] Guid answerUid, [FromRoute] Guid answerResponseUid, [FromBody] AnswerResponseRequest request)
-        {
-            var answerResponse = await MediatorService.SendAsync(new EditAnswerResponseCommand(questionUid, answerUid, answerResponseUid, request.Text));
-            return Ok(answerResponse.ToAnswerResponseQuestionStateResponse());
-        }
-
-        [HttpDelete("{answerResponseUid:Guid}")]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> DeleteAnswerResponse([FromRoute] Guid questionUid, [FromRoute] Guid answerUid, [FromRoute] Guid answerResponseUid)
-        {
-            var uid = await MediatorService.SendAsync(new DeleteAnswerResponseCommand(questionUid, answerUid, answerResponseUid));
-            return Ok(uid);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/Controllers/v1/AnswersController.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Controllers/v1/AnswersController.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,58 +1,0 @@
-﻿using FinkiChattery.Api.ApplicationServices.Authentication;
-using FinkiChattery.Api.ApplicationServices.Questioning;
-using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Contracts.Questioning;
-using IdentityServer4.AccessTokenValidation;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.Controllers.v1
-{
-    [ApiVersion(ApiVersions.ApiVersion1)]
-    [Route("api/v{version:apiVersion}/questions/{questionUid:Guid}/[controller]/")]
-    [ApiController]
-    public class AnswersController : ControllerBase
-    {
-        public AnswersController(IMediatorService mediatorService)
-        {
-            MediatorService = mediatorService;
-        }
-
-        public IMediatorService MediatorService { get; }
-
-        [HttpPost]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> AnswerQuestion([FromRoute] Guid questionUid, [FromBody] AnswerQuestionRequest request)
-        {
-            var answer = await MediatorService.SendAsync(new AnswerQuestionCommand(questionUid, request.Text));
-            return Ok(answer.ToAnswerQuestionStateResponse());
-        }
-
-        [HttpPut("{answerUid:Guid}")]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> EditAnswer([FromRoute] Guid questionUid, [FromRoute] Guid answerUid, [FromBody] AnswerQuestionRequest request)
-        {
-            var answer = await MediatorService.SendAsync(new EditAnswerCommand(questionUid, answerUid, request.Text));
-            return Ok(answer.ToAnswerQuestionStateResponse());
-        }
-
-        [HttpDelete("{answerUid:Guid}")]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> DeleteAnswer([FromRoute] Guid questionUid, [FromRoute] Guid answerUid)
-        {
-            var uid = await MediatorService.SendAsync(new DeleteAnswerCommand(questionUid, answerUid));
-            return Ok(uid);
-        }
-
-        [HttpPut("{answerUid:Guid}/correct")]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> MarkAnswerCorrect([FromRoute] Guid questionUid, [FromRoute] Guid answerUid)
-        {
-            await MediatorService.SendAsync(new MarkAnswerCorrectCommand(questionUid, answerUid));
-            return Ok(answerUid);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/Controllers/v1/CategoriesController.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Controllers/v1/CategoriesController.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,42 +1,0 @@
-﻿using FinkiChattery.Api.ApplicationServices.Authentication;
-using FinkiChattery.Api.ApplicationServices.Questioning;
-using FinkiChattery.Commands.Moderating;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Contracts.Moderating;
-using FinkiChattery.Queries.Questioning;
-using IdentityServer4.AccessTokenValidation;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.Controllers.v1
-{
-    [ApiVersion(ApiVersions.ApiVersion1)]
-    [Route("api/v{version:apiVersion}/[controller]")]
-    [ApiController]
-    public class CategoriesController : ControllerBase
-    {
-        public CategoriesController(IMediatorService mediatorService)
-        {
-            MediatorService = mediatorService;
-        }
-
-        public IMediatorService MediatorService { get; }
-
-        [HttpGet]
-        [Authorize]
-        public async Task<IActionResult> GetCategories()
-        {
-            var categoriesList = await MediatorService.SendQueryAsync(new GetCategoriesQuery());
-            return Ok(categoriesList.ToCategoryDtos());
-        }
-
-        [HttpPost]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Moderator)]
-        public async Task<IActionResult> CreateNewCategory([FromBody] CreateCategoryRequest request)
-        {
-            var categoryUid = await MediatorService.SendAsync(new CreateCategoryCommand(request.Name));
-            return Ok(categoryUid);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/Controllers/v1/QuestionsController.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Controllers/v1/QuestionsController.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,59 +1,0 @@
-﻿using FinkiChattery.Api.ApplicationServices.Authentication;
-using FinkiChattery.Api.ApplicationServices.Questioning;
-using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Contracts.Questioning;
-using FinkiChattery.Queries.Questioning;
-using IdentityServer4.AccessTokenValidation;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.Controllers.v1
-{
-    [ApiVersion(ApiVersions.ApiVersion1)]
-    [Route("api/v{version:apiVersion}/[controller]")]
-    [ApiController]
-    public class QuestionsController : ControllerBase
-    {
-        public QuestionsController(IMediatorService mediatorService)
-        {
-            MediatorService = mediatorService;
-        }
-
-        public IMediatorService MediatorService { get; }
-
-        [HttpPost]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> AskQuestion([FromBody] AskQuestionRequest request)
-        {
-            var questionUid = await MediatorService.SendAsync(new AskQuestionCommand(request.Title, request.Text, request.Categories));
-            return Ok(questionUid);
-        }
-
-        [HttpGet("{questionUid:Guid}")]
-        [Authorize]
-        public async Task<IActionResult> GetQuestionState([FromRoute] Guid questionUid)
-        {
-            var questionDto = await MediatorService.SendQueryAsync(new GetQuestionStateQuery(questionUid));
-            return Ok(questionDto.ToQuestionStateResponse());
-        }
-
-        [HttpGet("preview")]
-        [Authorize]
-        public async Task<IActionResult> PreviewQuestions([FromQuery] GetPreviewQuestionsOrderEnum order)
-        {
-            var questions = await MediatorService.SendQueryAsync(new GetPreviewQuestionsQuery(order));
-            return Ok(questions.ToPreviewQuestionsResponse());
-        }
-
-        [HttpGet("search")]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> SearchQuestions([FromQuery] string searchText, [FromQuery] string categories)
-        {
-            var questions = await MediatorService.SendQueryAsync(new SearchQuestionsQuery(searchText, categories));
-            return Ok(questions.ToPreviewQuestionsResponse());
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/Controllers/v1/SelfController.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Controllers/v1/SelfController.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,30 +1,0 @@
-﻿using FinkiChattery.Api.ApplicationServices.User;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Queries.User;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.Controllers.v1
-{
-    [ApiVersion(ApiVersions.ApiVersion1)]
-    [Route("api/v{version:apiVersion}/[controller]/")]
-    [ApiController]
-    public class SelfController : ControllerBase
-    {
-        public SelfController(IMediatorService mediatorService)
-        {
-            MediatorService = mediatorService;
-        }
-
-        public IMediatorService MediatorService { get; }
-
-        [HttpGet]
-        [Authorize]
-        public async Task<IActionResult> Getself()
-        {
-            var selfUserDto = await MediatorService.SendQueryAsync(new GetSelfUserQuery());
-            return Ok(selfUserDto.ToSelfUserResponse());
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/Controllers/v1/StudentsController.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Controllers/v1/StudentsController.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,31 +1,0 @@
-﻿using FinkiChattery.Api.ApplicationServices.Authentication;
-using FinkiChattery.Commands.Notifications;
-using FinkiChattery.Common.Mediator.Interfaces;
-using IdentityServer4.AccessTokenValidation;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.Controllers.v1
-{
-    [ApiVersion(ApiVersions.ApiVersion1)]
-    [Route("api/v{version:apiVersion}/[controller]/")]
-    [ApiController]
-    public class StudentsController : ControllerBase
-    {
-        public StudentsController(IMediatorService mediatorService)
-        {
-            MediatorService = mediatorService;
-        }
-
-        public IMediatorService MediatorService { get; }
-
-        [HttpPost("checked-notifications")]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> AnswerQuestion()
-        {
-            await MediatorService.SendAsync(new StudentCheckedNotificationsCommand());
-            return Ok();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/Controllers/v1/VotesController.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Controllers/v1/VotesController.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,35 +1,0 @@
-﻿using FinkiChattery.Api.ApplicationServices.Authentication;
-using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Contracts.Questioning;
-using FinkiChattery.Persistence.Helpers;
-using IdentityServer4.AccessTokenValidation;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Api.Controllers.v1
-{
-    [ApiVersion(ApiVersions.ApiVersion1)]
-    [Route("api/v{version:apiVersion}/questions/{questionUid:Guid}/answers/{answerUid:Guid}/[controller]")]
-    [ApiController]
-    public class VotesController : ControllerBase
-    {
-        public VotesController(IMediatorService mediatorService)
-        {
-            MediatorService = mediatorService;
-        }
-
-        public IMediatorService MediatorService { get; }
-
-        [HttpPost]
-        [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme, Policy = AuthenticationPolicy.Student)]
-        public async Task<IActionResult> VoteAnswer([FromRoute] Guid questionUid, [FromRoute] Guid answerUid, [FromBody] VoteAnswerRequest request)
-        {
-            VoteType voteType = request.VoteType == VoteTypeRequest.Upvote ? VoteType.Upvote : VoteType.Downvote;
-            var vote = await MediatorService.SendAsync(new VoteAnswerCommand(voteType, answerUid, questionUid));
-            return Ok(new VoteAnswerResponse(answerUid, vote.VoteUid, request.VoteType, vote.VoteAlreadyExists));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/FinkiChattery.Api.csproj
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/FinkiChattery.Api.csproj	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Api/FinkiChattery.Api.csproj	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -3,5 +3,4 @@
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
-    <Configurations>Debug;Release;Debug_Docker</Configurations>
   </PropertyGroup>
 
@@ -9,10 +8,7 @@
     <PackageReference Include="FluentValidation" Version="9.5.4" />
     <PackageReference Include="FluentValidation.AspNetCore" Version="9.5.4" />
-    <PackageReference Include="Hangfire.AspNetCore" Version="1.7.25" />
-    <PackageReference Include="Hangfire.SqlServer" Version="1.7.25" />
     <PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />
     <PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="9.0.0" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.Abstractions" Version="2.2.0" />
-    <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" />
     <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.5">
       <PrivateAssets>all</PrivateAssets>
@@ -23,9 +19,6 @@
 
   <ItemGroup>
-    <ProjectReference Include="..\FinkiChattery.Commands\FinkiChattery.Commands.csproj" />
     <ProjectReference Include="..\FinkiChattery.Common\FinkiChattery.Common.csproj" />
-    <ProjectReference Include="..\FinkiChattery.Contracts\FinkiChattery.Contracts.csproj" />
     <ProjectReference Include="..\FinkiChattery.Persistence\FinkiChattery.Persistence.csproj" />
-    <ProjectReference Include="..\FinkiChattery.Queries\FinkiChattery.Queries.csproj" />
   </ItemGroup>
 
Index: src/FinkiChattery/FinkiChattery.Api/Server/AppSettings.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Server/AppSettings.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Api/Server/AppSettings.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,55 @@
+﻿using Microsoft.Extensions.Configuration;
+using FinkiChattery.Api.Contracts.AppSettings;
+
+namespace FinkiChattery.Api.Services
+{
+    public class AppSettings
+    {
+        public AppSettings(IConfiguration configuration)
+        {
+            Configuration = configuration;
+        }
+
+        public IdentitySettings IdentitySettings
+        {
+            get
+            {
+                var identitySettings = new IdentitySettings();
+                Configuration.GetSection("app:identitySettings").Bind(identitySettings);
+                return identitySettings;
+            }
+        }
+
+        public EmailCredentialsSettings EmailCredentialsSettings
+        {
+            get
+            {
+                var emailSettings = new EmailCredentialsSettings();
+                Configuration.GetSection("app:emailSendingCredentials").Bind(emailSettings);
+                return emailSettings;
+            }
+        }
+
+        public CorsSettings CorsSettings
+        {
+            get
+            {
+                var corsSettings = new CorsSettings();
+                Configuration.GetSection("app:corsSettings").Bind(corsSettings);
+                return corsSettings;
+            }
+        }
+
+        public AwsStorageSettings AwsStorageSettings
+        {
+            get
+            {
+                var awsSettings = new AwsStorageSettings();
+                Configuration.GetSection("app:awsStorageSettings").Bind(awsSettings);
+                return awsSettings;
+            }
+        }
+
+        private IConfiguration Configuration { get; }
+    }
+}
Index: src/FinkiChattery/FinkiChattery.Api/Server/RegisterServices.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Server/RegisterServices.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Api/Server/RegisterServices.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,117 @@
+﻿using FinkiChattery.Api.Services;
+using FinkiChattery.Common.Mediator;
+using FinkiChattery.Common.Mediator.Interfaces;
+using FinkiChattery.Common.User;
+using FinkiChattery.Common.Validation;
+using FinkiChattery.Persistence.Context;
+using FinkiChattery.Persistence.Models;
+using MediatR;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Identity;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace FinkiChattery.Api.Server
+{
+    public static class RegisterServices
+    {
+        public static void AddMediator(this IServiceCollection services)
+        {
+            services.AddScoped<IMediatorService, MediatorService>();
+            services.AddScoped<IEventService, EventService>();
+            services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
+
+            // TODO: REGISTER MEDIATOR HANDLERS WHEN WE CREATE FIRST COMMAND SMENI SO DOMAIN KLASA
+            services.AddMediatR(typeof(RegisterServices));
+        }
+
+        public static void AddSingletonServices(this IServiceCollection services)
+        {
+            services.AddSingleton<AppSettings, AppSettings>();
+        }
+
+        public static void AddIdentityService(this IServiceCollection services, IConfiguration configuration)
+        {
+            var appSettings = new AppSettings(configuration);
+
+            services.AddIdentity<ApplicationUser, ApplicationRole>(o =>
+            {
+                o.User.RequireUniqueEmail = true;
+            })
+            .AddEntityFrameworkStores<ApplicationDbContext>()
+            .AddDefaultTokenProviders();
+
+            services.AddAuthentication(options =>
+            {
+                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
+                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
+            }).AddJwtBearer(o =>
+            {
+                o.Authority = appSettings.IdentitySettings.Authority;
+                o.Audience = appSettings.IdentitySettings.Audience;
+                o.RequireHttpsMetadata = appSettings.IdentitySettings.RequireHttpsMetadata;
+            });
+
+            services.AddAuthorization();
+        }
+
+        public static void AddEmailService(this IServiceCollection services)
+        {
+            // TODO: Add email service
+            // services.AddScoped<IEmailService, EmailService>();
+        }
+
+        public static void AddCurrentUser(this IServiceCollection services)
+        {
+            services.AddScoped(x =>
+            {
+                var httpContext = x.GetRequiredService<IHttpContextAccessor>();
+                return CurrentUser.GetCurrentUser(httpContext);
+            });
+        }
+
+        public static void AddRepos(this IServiceCollection services)
+        {
+        }
+
+        public static void AddOriginUrlSettings(this IServiceCollection services)
+        {
+            // TODO: ADD ORIGIN URLS 
+            /*services.AddScoped<IOriginUrlSettings>(provider =>
+            {
+                var httpContextAccessor = provider.GetService<IHttpContextAccessor>();
+
+                string originUrl = string.Empty;
+                if (httpContextAccessor.HttpContext != null && httpContextAccessor.HttpContext.Request.Headers.TryGetValue("Origin", out StringValues headerValues))
+                {
+                    if (headerValues.FirstOrDefault() != null)
+                    {
+                        originUrl = headerValues.FirstOrDefault();
+                    }
+                }
+
+                return new OriginUrlSettings(originUrl);
+            });*/
+        }
+
+        public static void AddAwsClient(this IServiceCollection services, IConfiguration configuration)
+        {
+            // ADD AWS FOR MAILS AND S3 AND CDN
+            /*            var appSettings = new AppSettings(configuration);
+
+                        services.AddAWSService<IAmazonS3>();
+                        services.AddSingleton<IAmazonS3>(provider =>
+                        {
+                            return new AmazonS3Client(
+                                appSettings.AwsStorageSettings.AccessKey,
+                                appSettings.AwsStorageSettings.SecretKey,
+                                Amazon.RegionEndpoint.GetBySystemName(appSettings.AwsStorageSettings.StorageServerRegion));
+                        });
+                        services.AddScoped<IStorageService, AwsStorageService>();*/
+        }
+
+        // TODO: ADD HANGFIRE AND SCAFOLD DB IN HANGFIREDB
+    }
+
+}
Index: src/FinkiChattery/FinkiChattery.Api/Services/AppSettings.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Services/AppSettings.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,55 +1,0 @@
-﻿using Microsoft.Extensions.Configuration;
-using FinkiChattery.Api.Contracts.AppSettings;
-
-namespace FinkiChattery.Api.Services
-{
-    public class AppSettings
-    {
-        public AppSettings(IConfiguration configuration)
-        {
-            Configuration = configuration;
-        }
-
-        public IdentitySettings IdentitySettings
-        {
-            get
-            {
-                var identitySettings = new IdentitySettings();
-                Configuration.GetSection("app:identitySettings").Bind(identitySettings);
-                return identitySettings;
-            }
-        }
-
-        public EmailCredentialsSettings EmailCredentialsSettings
-        {
-            get
-            {
-                var emailSettings = new EmailCredentialsSettings();
-                Configuration.GetSection("app:emailSendingCredentials").Bind(emailSettings);
-                return emailSettings;
-            }
-        }
-
-        public CorsSettings CorsSettings
-        {
-            get
-            {
-                var corsSettings = new CorsSettings();
-                Configuration.GetSection("app:corsSettings").Bind(corsSettings);
-                return corsSettings;
-            }
-        }
-
-        public AwsStorageSettings AwsStorageSettings
-        {
-            get
-            {
-                var awsSettings = new AwsStorageSettings();
-                Configuration.GetSection("app:awsStorageSettings").Bind(awsSettings);
-                return awsSettings;
-            }
-        }
-
-        private IConfiguration Configuration { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/Services/Hangfire/HangfireConfigurationExtensions.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Services/Hangfire/HangfireConfigurationExtensions.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,17 +1,0 @@
-﻿using Hangfire;
-using Newtonsoft.Json;
-
-namespace FinkiChattery.Api.Services
-{
-    public static class HangfireConfigurationExtensions
-    {
-        public static void UseMediatR(this IGlobalConfiguration configuration)
-        {
-            var jsonSettings = new JsonSerializerSettings
-            {
-                TypeNameHandling = TypeNameHandling.All
-            };
-            configuration.UseSerializerSettings(jsonSettings);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Api/Services/RegisterServices.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Services/RegisterServices.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,158 +1,0 @@
-﻿using FinkiChattery.Api.ApplicationServices.Authentication;
-using FinkiChattery.Api.ApplicationServices.Questioning.EventHandlers;
-using FinkiChattery.Api.Services;
-using FinkiChattery.Commands.Questioning;
-using FinkiChattery.Common.Mediator;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Common.User;
-using FinkiChattery.Common.Validation;
-using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories;
-using FinkiChattery.Persistence.UnitOfWork;
-using FinkiChattery.Queries.Questioning;
-using Hangfire;
-using Hangfire.SqlServer;
-using MediatR;
-using Microsoft.AspNetCore.Authentication.JwtBearer;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using System;
-
-namespace FinkiChattery.Api.Server
-{
-    public static class RegisterServices
-    {
-        public static void AddMediator(this IServiceCollection services)
-        {
-            services.AddScoped<IMediatorService, MediatorService>();
-            services.AddScoped<IEventService, EventService>();
-            services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
-            services.AddMediatR(typeof(AskQuestionCommand), typeof(GetQuestionStateQuery), typeof(UpdateAnswerVotesEventHandler));
-        }
-
-        public static void AddHangfireService(this IServiceCollection services, IConfiguration configuration)
-        {
-            string connectionString = "HangfireConnection";
-#if DEBUG_DOCKER
-            connectionString = "HangfireConnectionDocker";
-#endif
-
-            services.AddHangfire(x =>
-            {
-                x.UseSqlServerStorage(configuration.GetConnectionString(connectionString), new SqlServerStorageOptions
-                {
-                    CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
-                    SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
-                    QueuePollInterval = TimeSpan.Zero,
-                    UseRecommendedIsolationLevel = true,
-                    DisableGlobalLocks = true
-                });
-                x.UseMediatR();
-            });
-            services.AddHangfireServer();
-
-            services.AddScoped<IBackgroundJobClient>(provider =>
-            {
-                return new BackgroundJobClient(JobStorage.Current);
-            });
-        }
-
-        public static void AddSingletonServices(this IServiceCollection services)
-        {
-            services.AddSingleton<AppSettings, AppSettings>();
-        }
-
-        public static void AddIdentityService(this IServiceCollection services, IConfiguration configuration)
-        {
-            var appSettings = new AppSettings(configuration);
-
-            services.AddIdentity<ApplicationUser, ApplicationRole>(o =>
-            {
-                o.User.RequireUniqueEmail = true;
-            })
-            .AddEntityFrameworkStores<ApplicationDbContext>()
-            .AddDefaultTokenProviders();
-
-            services.AddAuthentication(options =>
-            {
-                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
-                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
-            }).AddJwtBearer(o =>
-            {
-                o.Authority = appSettings.IdentitySettings.Authority;
-                o.Audience = appSettings.IdentitySettings.Audience;
-                o.RequireHttpsMetadata = appSettings.IdentitySettings.RequireHttpsMetadata;
-            });
-
-            services.AddScoped<IAuthorizationHandler, CurrentUserIsOfRoleRequirementHandler>();
-
-            services.AddAuthorization(options =>
-            {
-                options.AddPolicy(AuthenticationPolicy.Student, policy => policy.Requirements.Add(new StudentRequirement()));
-                options.AddPolicy(AuthenticationPolicy.Moderator, policy => policy.Requirements.Add(new ModeratorRequirement()));
-
-            });
-        }
-
-        public static void AddEmailService(this IServiceCollection services)
-        {
-            // TODO: Add email service
-            // services.AddScoped<IEmailService, EmailService>();
-        }
-
-        public static void AddCurrentUser(this IServiceCollection services)
-        {
-            services.AddScoped(x =>
-            {
-                var httpContext = x.GetRequiredService<IHttpContextAccessor>();
-                return CurrentUser.GetCurrentUser(httpContext);
-            });
-        }
-
-        public static void AddUnitOfWork(this IServiceCollection services)
-        {
-            services.AddScoped<IUnitOfWork, UnitOfWork>();
-        }
-
-        public static void AddOriginUrlSettings(this IServiceCollection services)
-        {
-            // TODO: ADD ORIGIN URLS 
-            /*services.AddScoped<IOriginUrlSettings>(provider =>
-            {
-                var httpContextAccessor = provider.GetService<IHttpContextAccessor>();
-
-                string originUrl = string.Empty;
-                if (httpContextAccessor.HttpContext != null && httpContextAccessor.HttpContext.Request.Headers.TryGetValue("Origin", out StringValues headerValues))
-                {
-                    if (headerValues.FirstOrDefault() != null)
-                    {
-                        originUrl = headerValues.FirstOrDefault();
-                    }
-                }
-
-                return new OriginUrlSettings(originUrl);
-            });*/
-        }
-
-        public static void AddAwsClient(this IServiceCollection services, IConfiguration configuration)
-        {
-            // ADD AWS FOR MAILS AND S3 AND CDN
-            /*            var appSettings = new AppSettings(configuration);
-
-                        services.AddAWSService<IAmazonS3>();
-                        services.AddSingleton<IAmazonS3>(provider =>
-                        {
-                            return new AmazonS3Client(
-                                appSettings.AwsStorageSettings.AccessKey,
-                                appSettings.AwsStorageSettings.SecretKey,
-                                Amazon.RegionEndpoint.GetBySystemName(appSettings.AwsStorageSettings.StorageServerRegion));
-                        });
-                        services.AddScoped<IStorageService, AwsStorageService>();*/
-        }
-    }
-
-}
Index: src/FinkiChattery/FinkiChattery.Api/Startup.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Startup.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Api/Startup.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -2,8 +2,5 @@
 using FinkiChattery.Api.Server;
 using FinkiChattery.Api.Services;
-using FinkiChattery.Commands.Questioning;
 using FinkiChattery.Persistence.Context;
-using FluentValidation.AspNetCore;
-using Hangfire;
 using Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;
@@ -35,20 +32,14 @@
             services.AddOriginUrlSettings();
             services.AddCurrentUser();
-            services.AddUnitOfWork();
+            services.AddRepos();
             services.AddAwsClient(Configuration);
-            services.AddHangfireService(Configuration);
-
-            string connectionString = "DefaultConnection";
-#if DEBUG_DOCKER
-            connectionString = "DefaultConnectionDocker";
-#endif
 
             services.AddDbContext<ApplicationDbContext>(options =>
-                options.UseSqlServer(Configuration.GetConnectionString(connectionString)));
+                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
 
             services.AddControllers()
-                .ConfigureApiBehaviorOptions(options => options.InvalidModelStateResponseFactory = context => new BadRequestObjectResult(context.ModelState))
-                .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<AskQuestionValidator>());
-            services.AddApiVersioning();
+                .ConfigureApiBehaviorOptions(options => options.InvalidModelStateResponseFactory = context => new BadRequestObjectResult(context.ModelState));
+            // TODO: validators
+            // .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<CreateOrganizerWithOrganizationValidator>());
 
             services.AddCors(options =>
@@ -81,5 +72,4 @@
             {
                 endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
-                endpoints.MapHangfireDashboard();
             });
         }
Index: src/FinkiChattery/FinkiChattery.Api/appsettings.Development.json
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/appsettings.Development.json	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Api/appsettings.Development.json	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -25,12 +25,11 @@
     },
     "corsSettings": {
-      "allowedCorsOrigins": ["http://localhost:4200"]
+      "allowedCorsOrigins": [
+        "http://localhost:4200"
+      ]
     }
   },
   "ConnectionStrings": {
-    "DefaultConnection": "data source=.;initial catalog=FinkiChattery;integrated security=True;application name=FinkiChattery Base App;Pooling=true;Min Pool Size=5;Max Pool Size=30;",
-    "HangfireConnection": "data source=.;initial catalog=FinkiChatteryHangfire;integrated security=True;application name=FinkiChattery Hangfire App;Pooling=true;Min Pool Size=5;Max Pool Size=30;",
-    "DefaultConnectionDocker": "Data Source=localhost;Initial Catalog=FinkiChattery;User ID=sa;Password=Asfa+032;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;Pooling=true;Min Pool Size=5;Max Pool Size=30;",
-    "HangfireConnectionDocker": "Data Source=localhost;Initial Catalog=FinkiChatteryHangfire;User ID=sa;Password=Asfa+032;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;Pooling=true;Min Pool Size=5;Max Pool Size=30;"
+    "DefaultConnection": "data source=.;initial catalog=FinkiChattery;integrated security=True;application name=FinkiChattery Base App;Pooling=true;Min Pool Size=5;Max Pool Size=30;"
   }
 }
Index: src/FinkiChattery/FinkiChattery.Api/appsettings.json
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/appsettings.json	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Api/appsettings.json	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -5,6 +5,5 @@
       "Microsoft": "Warning",
       "Microsoft.Hosting.Lifetime": "Information",
-      "Microsoft.EntityFrameworkCore.Database.Command": "Information",
-      "Hangfire": "Information"
+      "Microsoft.EntityFrameworkCore.Database.Command": "Information"
     }
   },
Index: src/FinkiChattery/FinkiChattery.Commands/FinkiChattery.Commands.csproj
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/FinkiChattery.Commands.csproj	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
-    <Configurations>Debug;Release;Debug_Docker</Configurations>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\FinkiChattery.Common\FinkiChattery.Common.csproj" />
-    <ProjectReference Include="..\FinkiChattery.Persistence\FinkiChattery.Persistence.csproj" />
-  </ItemGroup>
-
-</Project>
Index: src/FinkiChattery/FinkiChattery.Commands/Moderating/CreateCategory/CreateCategoryCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Moderating/CreateCategory/CreateCategoryCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,43 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Moderating
-{
-    public class CreateCategoryCommand : ICommand<Guid>
-    {
-        public CreateCategoryCommand(string categoryName)
-        {
-            CategoryName = categoryName;
-        }
-
-        public string CategoryName { get; }
-    }
-
-    public class CreateCategoryHandler : ICommandHandler<CreateCategoryCommand, Guid>
-    {
-        public CreateCategoryHandler(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task<Guid> Handle(CreateCategoryCommand request, CancellationToken cancellationToken)
-        {
-            var category = new Category()
-            {
-                Name = request.CategoryName
-            };
-
-            UnitOfWork.Categories.Add(category);
-
-            await UnitOfWork.SaveAsync();
-
-            return category.Uid;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Moderating/CreateCategory/CreateCategoryValidator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Moderating/CreateCategory/CreateCategoryValidator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,17 +1,0 @@
-﻿using FinkiChattery.Commands.Moderating.Validators;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation;
-
-namespace FinkiChattery.Commands.Moderating
-{
-    public class CreateCategoryValidator : AbstractValidator<CreateCategoryCommand>
-    {
-        public CreateCategoryValidator(IUnitOfWork unitOfWork)
-        {
-            CascadeMode = CascadeMode.Stop;
-
-            RuleFor(x => x.CategoryName).CategoryTitleValidate();
-            RuleFor(x => x.CategoryName).SetValidator(new CategoryWithNameIsUnique(unitOfWork));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Moderating/ModeratingErrorCodes .cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Moderating/ModeratingErrorCodes .cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,10 +1,0 @@
-﻿using FinkiChattery.Common.Errors;
-
-namespace FinkiChattery.Commands.Moderating
-{
-    public class ModeratingErrorCodes : ErrorCodes
-    {
-        public const string CategoryNameLengthInvalid = "CategoryNameLengthInvalid";
-        public const string CategoryNameAlreadyExists = "CategoryNameAlreadyExists";
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Moderating/Validators/CategoryWithNameIsUnique.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Moderating/Validators/CategoryWithNameIsUnique.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,29 +1,0 @@
-﻿using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Moderating.Validators
-{
-    public class CategoryWithNameIsUnique : AsyncValidatorBase
-    {
-        public CategoryWithNameIsUnique(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var categoryName = (string)context.PropertyValue;
-
-            return await UnitOfWork.Categories.CategoryWithNameIsUnique(categoryName);
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return ModeratingErrorCodes.CategoryNameAlreadyExists;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Moderating/Validators/ModeratingFluentValidationRules.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Moderating/Validators/ModeratingFluentValidationRules.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,12 +1,0 @@
-﻿using FluentValidation;
-
-namespace FinkiChattery.Commands.Moderating.Validators
-{
-    public static class ModeratingFluentValidationRules
-    {
-        public static IRuleBuilderOptions<T, string> CategoryTitleValidate<T>(this IRuleBuilder<T, string> ruleBuilder)
-        {
-            return ruleBuilder.NotNull().WithMessage(ModeratingErrorCodes.CantBeNull).MaximumLength(500).WithMessage(ModeratingErrorCodes.CategoryNameLengthInvalid);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Notifications/StudentCheckedNotificationsCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Notifications/StudentCheckedNotificationsCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using MediatR;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Notifications
-{
-    public class StudentCheckedNotificationsCommand : ICommand<Unit>
-    {
-        public StudentCheckedNotificationsCommand()
-        {
-        }
-    }
-
-    public class StudentCheckedNotificationsHandler : ICommandHandler<StudentCheckedNotificationsCommand, Unit>
-    {
-        public StudentCheckedNotificationsHandler(ICurrentUser currentUser, IUnitOfWork unitOfWork)
-        {
-            CurrentUser = currentUser;
-            UnitOfWork = unitOfWork;
-        }
-
-        public ICurrentUser CurrentUser { get; }
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task<Unit> Handle(StudentCheckedNotificationsCommand request, CancellationToken cancellationToken)
-        {
-            var student = await UnitOfWork.Students.GetStudent(CurrentUser.Id);
-
-            student.LastCheckedNotifications = System.DateTime.UtcNow;
-
-            await UnitOfWork.SaveAsync();
-
-            return Unit.Value;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/AnswerQuestion/AnswerQuestionCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/AnswerQuestion/AnswerQuestionCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,70 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class AnswerQuestionCommand : ICommand<AnswerQuestionStateDto>
-    {
-        public AnswerQuestionCommand(Guid questionUid, string text)
-        {
-            QuestionUid = questionUid;
-            Text = text;
-        }
-
-        public Guid QuestionUid { get; }
-        public string Text { get; }
-    }
-
-    public class AnswerQuestionHandler : ICommandHandler<AnswerQuestionCommand, AnswerQuestionStateDto>
-    {
-        public AnswerQuestionHandler(IUnitOfWork unitOfWork, ICurrentUser currentUser, IEventService eventService)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-            EventService = eventService;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-        public IEventService EventService { get; }
-
-        public async Task<AnswerQuestionStateDto> Handle(AnswerQuestionCommand request, CancellationToken cancellationToken)
-        {
-            var question = await UnitOfWork.Questions.GetByUidAsync(request.QuestionUid);
-            var student = await UnitOfWork.Students.GetStudent(CurrentUser.Id);
-
-            var answer = new Answer()
-            {
-                Text = request.Text,
-                QuestionFk = question.Id,
-                StudentFk = student.Id,
-            };
-
-            UnitOfWork.Answers.Add(answer);
-            await UnitOfWork.SaveAsync();
-
-            EventService.Enqueue(new QuestionAnsweredEvent(question.Uid, answer.Uid, student.Uid));
-
-            return new AnswerQuestionStateDto(answer.Id,
-                                              answer.Uid,
-                                              answer.Text,
-                                              answer.CorrectAnswer,
-                                              answer.CreatedOn,
-                                              answer.VotesCount,
-                                              new AnswerStudentQuestionStateDto(student.Id,
-                                                                                student.Uid,
-                                                                                student.IndexNumber,
-                                                                                student.ImageUrl,
-                                                                                student.Reputation),
-                                              Enumerable.Empty<AnswerResponseQuestionStateDto>());
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/AnswerQuestion/AnswerQuestionValidator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/AnswerQuestion/AnswerQuestionValidator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,19 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class AnswerQuestionValidator : AbstractValidator<AnswerQuestionCommand>
-    {
-        public AnswerQuestionValidator(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            CascadeMode = CascadeMode.Stop;
-
-            RuleFor(x => x.Text).AnswerTextValidate();
-            RuleFor(x => x.QuestionUid).SetValidator(new QuestionWithUidsExist(unitOfWork));
-            RuleFor(x => x).SetValidator(new StudentHasGoodReputationAndCanVoteAndAnswer(unitOfWork, currentUser));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/AnswerQuestion/QuestionAnsweredEvent.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/AnswerQuestion/QuestionAnsweredEvent.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,19 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using System;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class QuestionAnsweredEvent : IEvent
-    {
-        public QuestionAnsweredEvent(Guid questionUid, Guid answerUid, Guid studentUid)
-        {
-            QuestionUid = questionUid;
-            AnswerUid = answerUid;
-            StudentUid = studentUid;
-        }
-
-        public Guid QuestionUid { get; }
-        public Guid AnswerUid { get; }
-        public Guid StudentUid { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/AskQuestion/AskQuestionCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/AskQuestion/AskQuestionCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,62 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class AskQuestionCommand : ICommand<Guid>
-    {
-        public AskQuestionCommand(string title, string text, IEnumerable<Guid> categories)
-        {
-            Title = title;
-            Text = text;
-            Categories = categories;
-        }
-
-        public string Title { get; }
-        public string Text { get; }
-        public IEnumerable<Guid> Categories { get; }
-    }
-
-    public class AskQuestionHandler : ICommandHandler<AskQuestionCommand, Guid>
-    {
-        public AskQuestionHandler(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-
-        public async Task<Guid> Handle(AskQuestionCommand request, CancellationToken cancellationToken)
-        {
-            var questionCategories = await UnitOfWork.Categories.GetCategories(request.Categories);
-            var currentStudent = await UnitOfWork.Students.GetStudent(CurrentUser.Id);
-
-            var questionDatabaseEntity = new Question()
-            {
-                Title = request.Title,
-                Text = request.Text,
-                StudentFk = currentStudent.Id,
-            };
-
-            foreach (var item in questionCategories)
-            {
-                questionDatabaseEntity.QuestionCategories.Add(new QuestionCategory()
-                {
-                    CategoryFk = item.Id
-                });
-            }
-
-            UnitOfWork.Questions.Add(questionDatabaseEntity);
-            await UnitOfWork.SaveAsync();
-            return questionDatabaseEntity.Uid;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/AskQuestion/AskQuestionValidator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/AskQuestion/AskQuestionValidator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class AskQuestionValidator : AbstractValidator<AskQuestionCommand>
-    {
-        public AskQuestionValidator(IUnitOfWork unitOfWork)
-        {
-            RuleFor(x => x.Title).QuestionTitleValidate();
-            RuleFor(x => x.Text).QuestionTextValidate();
-            RuleFor(x => x.Categories).Cascade(CascadeMode.Stop).ListNotNull().SetValidator(new CategoriesUidsExist(unitOfWork));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/DeleteAnswer/DeleteAnswerCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/DeleteAnswer/DeleteAnswerCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,47 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class DeleteAnswerCommand : ICommand<Guid>
-    {
-        public DeleteAnswerCommand(Guid questionUid, Guid answerUid)
-        {
-            QuestionUid = questionUid;
-            AnswerUid = answerUid;
-        }
-
-        public Guid QuestionUid { get; }
-        public Guid AnswerUid { get; }
-    }
-
-    public class DeleteAnswerHandler : ICommandHandler<DeleteAnswerCommand, Guid>
-    {
-        public DeleteAnswerHandler(IUnitOfWork unitOfWork, ICurrentUser currentUser, IEventService eventService)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-            EventService = eventService;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-        public IEventService EventService { get; }
-
-        public async Task<Guid> Handle(DeleteAnswerCommand request, CancellationToken cancellationToken)
-        {
-            var answer = await UnitOfWork.Answers.GetByUidAsync(request.AnswerUid);
-
-            UnitOfWork.Answers.Delete(answer);
-
-            await UnitOfWork.SaveAsync();
-
-            return answer.Uid;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/DeleteAnswer/DeleteAnswerValidator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/DeleteAnswer/DeleteAnswerValidator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators;
-using FinkiChattery.Commands.Questioning.Validators.Contracts;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class DeleteAnswerValidator : AbstractValidator<DeleteAnswerCommand>
-    {
-        public DeleteAnswerValidator(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            CascadeMode = CascadeMode.Stop;
-
-            RuleFor(x => new AnswerInQuestionWithUidExistsDto(x.QuestionUid, x.AnswerUid)).SetValidator(new AnswerInQuestionWithUidExists(unitOfWork));
-            RuleFor(x => x.AnswerUid).SetValidator(new StudentIsOwnerOfAnswer(unitOfWork, currentUser));
-            RuleFor(x => x.AnswerUid).SetValidator(new AnswerIsNotAlreadyMarkedAsCorrect(unitOfWork));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/DeleteAnswerResponse/DeleteAnswerResponseCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/DeleteAnswerResponse/DeleteAnswerResponseCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class DeleteAnswerResponseCommand : ICommand<Guid>
-    {
-        public DeleteAnswerResponseCommand(Guid questionUid, Guid answerUid, Guid answerResponseUid)
-        {
-            QuestionUid = questionUid;
-            AnswerUid = answerUid;
-            AnswerResponseUid = answerResponseUid;
-        }
-
-        public Guid QuestionUid { get; }
-        public Guid AnswerUid { get; }
-        public Guid AnswerResponseUid { get; }
-    }
-
-    public class DeleteAnswerResponseHandler : ICommandHandler<DeleteAnswerResponseCommand, Guid>
-    {
-        public DeleteAnswerResponseHandler(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-
-        public async Task<Guid> Handle(DeleteAnswerResponseCommand request, CancellationToken cancellationToken)
-        {
-            var answerResponse = await UnitOfWork.AnswerResponses.GetByUidAsync(request.AnswerResponseUid);
-
-            UnitOfWork.AnswerResponses.Delete(answerResponse);
-
-            await UnitOfWork.SaveAsync();
-
-            return answerResponse.Uid;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/DeleteAnswerResponse/DeleteAnswerResponseValidator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/DeleteAnswerResponse/DeleteAnswerResponseValidator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,19 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators;
-using FinkiChattery.Commands.Questioning.Validators.Contracts;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class DeleteAnswerResponseValidator : AbstractValidator<DeleteAnswerResponseCommand>
-    {
-        public DeleteAnswerResponseValidator(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            CascadeMode = CascadeMode.Stop;
-
-            RuleFor(x => new AnswerInQuestionWithUidExistsDto(x.QuestionUid, x.AnswerUid)).SetValidator(new AnswerInQuestionWithUidExists(unitOfWork));
-            RuleFor(x => x.AnswerResponseUid).SetValidator(new StudentIsOwnerOfAnswerResponse(unitOfWork, currentUser));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/EditAnswer/EditAnswerCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/EditAnswer/EditAnswerCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,63 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class EditAnswerCommand : ICommand<AnswerQuestionStateDto>
-    {
-        public EditAnswerCommand(Guid questionUid, Guid answerUid, string text)
-        {
-            QuestionUid = questionUid;
-            AnswerUid = answerUid;
-            Text = text;
-        }
-
-        public Guid QuestionUid { get; }
-        public Guid AnswerUid { get; }
-        public string Text { get; }
-    }
-
-    public class EditAnswerHandler : ICommandHandler<EditAnswerCommand, AnswerQuestionStateDto>
-    {
-        public EditAnswerHandler(IUnitOfWork unitOfWork, ICurrentUser currentUser, IEventService eventService)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-            EventService = eventService;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-        public IEventService EventService { get; }
-
-        public async Task<AnswerQuestionStateDto> Handle(EditAnswerCommand request, CancellationToken cancellationToken)
-        {
-            var answer = await UnitOfWork.Answers.GetByUidAsync(request.AnswerUid);
-            var student = await UnitOfWork.Students.GetStudent(CurrentUser.Id);
-
-            answer.Text = request.Text;
-
-            await UnitOfWork.SaveAsync();
-
-            return new AnswerQuestionStateDto(answer.Id,
-                                              answer.Uid,
-                                              answer.Text,
-                                              answer.CorrectAnswer,
-                                              answer.CreatedOn,
-                                              answer.VotesCount,
-                                              new AnswerStudentQuestionStateDto(student.Id,
-                                                                                student.Uid,
-                                                                                student.IndexNumber,
-                                                                                student.ImageUrl,
-                                                                                student.Reputation),
-                                              Enumerable.Empty<AnswerResponseQuestionStateDto>());
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/EditAnswer/EditAnswerValidator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/EditAnswer/EditAnswerValidator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators;
-using FinkiChattery.Commands.Questioning.Validators.Contracts;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class EditAnswerValidator : AbstractValidator<EditAnswerCommand>
-    {
-        public EditAnswerValidator(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            CascadeMode = CascadeMode.Stop;
-
-            RuleFor(x => x.Text).AnswerTextValidate();
-            RuleFor(x => new AnswerInQuestionWithUidExistsDto(x.QuestionUid, x.AnswerUid)).SetValidator(new AnswerInQuestionWithUidExists(unitOfWork));
-            RuleFor(x => x.AnswerUid).SetValidator(new StudentIsOwnerOfAnswer(unitOfWork, currentUser));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/EditAnswerResponse/EditAnswerResponseCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/EditAnswerResponse/EditAnswerResponseCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,58 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class EditAnswerResponseCommand : ICommand<AnswerResponseQuestionStateDto>
-    {
-        public EditAnswerResponseCommand(Guid questionUid, Guid answerUid, Guid answerResponseUid, string text)
-        {
-            QuestionUid = questionUid;
-            AnswerUid = answerUid;
-            AnswerResponseUid = answerResponseUid;
-            Text = text;
-        }
-
-        public Guid QuestionUid { get; }
-        public Guid AnswerUid { get; }
-        public Guid AnswerResponseUid { get; }
-        public string Text { get; }
-    }
-
-    public class EditAnswerResponseHandler : ICommandHandler<EditAnswerResponseCommand, AnswerResponseQuestionStateDto>
-    {
-        public EditAnswerResponseHandler(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-
-        public async Task<AnswerResponseQuestionStateDto> Handle(EditAnswerResponseCommand request, CancellationToken cancellationToken)
-        {
-            var answerResponse = await UnitOfWork.AnswerResponses.GetByUidAsync(request.AnswerResponseUid);
-            var student = await UnitOfWork.Students.GetStudent(CurrentUser.Id);
-
-            answerResponse.Text = request.Text;
-
-            await UnitOfWork.SaveAsync();
-
-            return new AnswerResponseQuestionStateDto(answerResponse.Id,
-                                                      answerResponse.Uid,
-                                                      answerResponse.Text,
-                                                      answerResponse.CreatedOn,
-                                                      new AnswerResponseStudentQuestionStateDto(student.Id,
-                                                                                                student.Uid,
-                                                                                                student.IndexNumber,
-                                                                                                student.ImageUrl,
-                                                                                                student.Reputation));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/EditAnswerResponse/EditAnswerResponseValidator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/EditAnswerResponse/EditAnswerResponseValidator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators;
-using FinkiChattery.Commands.Questioning.Validators.Contracts;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class EditAnswerResponseValidator : AbstractValidator<EditAnswerResponseCommand>
-    {
-        public EditAnswerResponseValidator(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            CascadeMode = CascadeMode.Stop;
-
-            RuleFor(x => x.Text).AnswerResponseTextValidate();
-            RuleFor(x => new AnswerInQuestionWithUidExistsDto(x.QuestionUid, x.AnswerUid)).SetValidator(new AnswerInQuestionWithUidExists(unitOfWork));
-            RuleFor(x => x.AnswerResponseUid).SetValidator(new StudentIsOwnerOfAnswerResponse(unitOfWork, currentUser));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/MarkAnswerCorrect/AnswerMarkedAsCorrectEvent.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/MarkAnswerCorrect/AnswerMarkedAsCorrectEvent.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,19 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using System;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class AnswerMarkedAsCorrectEvent : IEvent
-    {
-        public AnswerMarkedAsCorrectEvent(Guid questionUid, Guid answerUid, long studentFk)
-        {
-            QuestionUid = questionUid;
-            AnswerUid = answerUid;
-            StudentFk = studentFk;
-        }
-
-        public Guid QuestionUid { get; }
-        public Guid AnswerUid { get; }
-        public long StudentFk { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/MarkAnswerCorrect/MarkAnswerCorrectCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/MarkAnswerCorrect/MarkAnswerCorrectCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,45 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class MarkAnswerCorrectCommand : ICommand<Guid>
-    {
-        public MarkAnswerCorrectCommand(Guid questionUid, Guid answerUid)
-        {
-            QuestionUid = questionUid;
-            AnswerUid = answerUid;
-        }
-
-        public Guid QuestionUid { get; }
-        public Guid AnswerUid { get; }
-    }
-
-    public class MarkAnswerCorrectHandler : ICommandHandler<MarkAnswerCorrectCommand, Guid>
-    {
-        public MarkAnswerCorrectHandler(IUnitOfWork unitOfWork, IEventService eventService)
-        {
-            UnitOfWork = unitOfWork;
-            EventService = eventService;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public IEventService EventService { get; }
-
-        public async Task<Guid> Handle(MarkAnswerCorrectCommand request, CancellationToken cancellationToken)
-        {
-            var answer = await UnitOfWork.Answers.GetByUidAsync(request.AnswerUid);
-            answer.CorrectAnswer = true;
-
-            await UnitOfWork.SaveAsync();
-
-            EventService.Enqueue(new AnswerMarkedAsCorrectEvent(request.QuestionUid, request.AnswerUid, answer.StudentFk));
-
-            return answer.Uid;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/MarkAnswerCorrect/MarkAnswerCorrectValidator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/MarkAnswerCorrect/MarkAnswerCorrectValidator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators;
-using FinkiChattery.Commands.Questioning.Validators.Contracts;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class MarkAnswerCorrectValidator : AbstractValidator<MarkAnswerCorrectCommand>
-    {
-        public MarkAnswerCorrectValidator(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            CascadeMode = CascadeMode.Stop;
-
-            RuleFor(x => x.QuestionUid).SetValidator(new StudentIsOwnerOfQuestion(unitOfWork, currentUser));
-            RuleFor(x => new AnswerInQuestionWithUidExistsDto(x.QuestionUid, x.AnswerUid)).SetValidator(new AnswerInQuestionWithUidExists(unitOfWork));
-            RuleFor(x => x.AnswerUid).SetValidator(new AnswerIsNotAlreadyMarkedAsCorrect(unitOfWork));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/QuestioningErrorCodes.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/QuestioningErrorCodes.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,23 +1,0 @@
-﻿using FinkiChattery.Common.Errors;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class QuestioningErrorCodes : ErrorCodes
-    {
-        public const string QuestionTitleLengthInvalid = "QuestionTitleLengthInvalid";
-        public const string QuestionTextLengthInvalid = "QuestionTextLengthInvalid";
-        public const string AnswerResponseTextLengthInvalid = "AnswerResponseTextLengthInvalid";
-        public const string CategoriesDontExist = "CategoriesDontExist";
-        public const string TeamDontExist = "TeamDontExist";
-        public const string AnswerAlreadyUpvoted = "AnswerAlreadyUpvoted";
-        public const string AnswerAlreadyDownvoted = "AnswerAlreadyDownvoted";
-        public const string StudentHasBadReputation = "StudentHasBadReputation"; 
-        public const string AnswerTextLengthInvalid = "AnswerTextLengthInvalid";
-        public const string QuestionNotFound = "QuestionNotFound";
-        public const string AnswerInQuestionNotFound = "AnswerInQuestionNotFound"; 
-        public const string StudentDoesNotOwnQuestion = "StudentDoesNotOwnQuestion";
-        public const string StudentDoesNotOwnAnswer = "StudentDoesNotOwnAnswer";
-        public const string StudentDoesNotOwnAnswerResponse = "StudentDoesNotOwnAnswerResponse";
-        public const string AnswerIsAlreadyMarkedAsCorrect = "AnswerIsAlreadyMarkedAsCorrect";
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/RespondToAnswer/RespondToAnswerCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/RespondToAnswer/RespondToAnswerCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,63 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class RespondToAnswerCommand : ICommand<AnswerResponseQuestionStateDto>
-    {
-        public RespondToAnswerCommand(Guid questionUid, Guid answerUid, string text)
-        {
-            QuestionUid = questionUid;
-            AnswerUid = answerUid;
-            Text = text;
-        }
-
-        public Guid QuestionUid { get; }
-        public Guid AnswerUid { get; }
-        public string Text { get; }
-    }
-
-    public class RespondToAnswerHandler : ICommandHandler<RespondToAnswerCommand, AnswerResponseQuestionStateDto>
-    {
-        public RespondToAnswerHandler(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-
-        public async Task<AnswerResponseQuestionStateDto> Handle(RespondToAnswerCommand request, CancellationToken cancellationToken)
-        {
-            var answer = await UnitOfWork.Answers.GetByUidAsync(request.AnswerUid);
-            var student = await UnitOfWork.Students.GetStudent(CurrentUser.Id);
-
-            var answerResponse = new AnswerResponse()
-            {
-                Text = request.Text,
-                StudentFk = student.Id,
-                AnswerFk = answer.Id
-            };
-
-            UnitOfWork.AnswerResponses.Add(answerResponse);
-            await UnitOfWork.SaveAsync();
-
-            return new AnswerResponseQuestionStateDto(answerResponse.Id,
-                                                      answerResponse.Uid,
-                                                      answerResponse.Text,
-                                                      answerResponse.CreatedOn,
-                                                      new AnswerResponseStudentQuestionStateDto(student.Id,
-                                                                                                student.Uid,
-                                                                                                student.IndexNumber,
-                                                                                                student.ImageUrl,
-                                                                                                student.Reputation));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/RespondToAnswer/RespondToAnswerValidator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/RespondToAnswer/RespondToAnswerValidator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,18 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators;
-using FinkiChattery.Commands.Questioning.Validators.Contracts;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class RespondToAnswerValidator : AbstractValidator<RespondToAnswerCommand>
-    {
-        public RespondToAnswerValidator(IUnitOfWork unitOfWork)
-        {
-            CascadeMode = CascadeMode.Stop;
-
-            RuleFor(x => x.Text).AnswerResponseTextValidate();
-            RuleFor(x => new AnswerInQuestionWithUidExistsDto(x.QuestionUid, x.AnswerUid)).SetValidator(new AnswerInQuestionWithUidExists(unitOfWork));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/AnswerInQuestionWithUidExists.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/AnswerInQuestionWithUidExists.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,30 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators.Contracts;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public class AnswerInQuestionWithUidExists : AsyncValidatorBase
-    {
-        public AnswerInQuestionWithUidExists(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var dto = (AnswerInQuestionWithUidExistsDto)context.PropertyValue;
-
-            return await UnitOfWork.Answers.AnswerInQuestionExists(dto.QuestionUid, dto.AnswerUid);
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return QuestioningErrorCodes.AnswerInQuestionNotFound;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/AnswerIsNotAlreadyMarkedAsCorrect.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/AnswerIsNotAlreadyMarkedAsCorrect.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public class AnswerIsNotAlreadyMarkedAsCorrect : AsyncValidatorBase
-    {
-        public AnswerIsNotAlreadyMarkedAsCorrect(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var answerUid = (Guid)context.PropertyValue;
-
-            var answer = await UnitOfWork.Answers.GetByUidAsync(answerUid);
-
-            return !answer.CorrectAnswer;
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return QuestioningErrorCodes.AnswerIsAlreadyMarkedAsCorrect;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/CategoriesUidsExist.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/CategoriesUidsExist.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,31 +1,0 @@
-﻿using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public class CategoriesUidsExist : AsyncValidatorBase
-    {
-        public CategoriesUidsExist(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var categoriesUids = (IEnumerable<Guid>)context.PropertyValue;
-
-            return await UnitOfWork.Categories.CategoriesExist(categoriesUids);
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return QuestioningErrorCodes.CategoriesDontExist;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/Contracts/AnswerInQuestionWithUidExistsDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/Contracts/AnswerInQuestionWithUidExistsDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System;
-
-namespace FinkiChattery.Commands.Questioning.Validators.Contracts
-{
-    public class AnswerInQuestionWithUidExistsDto
-    {
-        public AnswerInQuestionWithUidExistsDto(Guid questionUid, Guid answerUid)
-        {
-            QuestionUid = questionUid;
-            AnswerUid = answerUid;
-        }
-
-        public Guid QuestionUid { get; }
-        public Guid AnswerUid { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/Contracts/VoteAnswerByStudentIsValidDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/Contracts/VoteAnswerByStudentIsValidDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,17 +1,0 @@
-﻿using FinkiChattery.Persistence.Helpers;
-using System;
-
-namespace FinkiChattery.Commands.Questioning.Validators.Contracts
-{
-    public class VoteAnswerByStudentIsValidDto
-    {
-        public VoteAnswerByStudentIsValidDto(VoteType voteType, Guid answerUid)
-        {
-            VoteType = voteType;
-            AnswerUid = answerUid;
-        }
-
-        public VoteType VoteType { get; }
-        public Guid AnswerUid { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/QuestionWithUidsExist.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/QuestionWithUidsExist.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,30 +1,0 @@
-﻿using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public class QuestionWithUidsExist : AsyncValidatorBase
-    {
-        public QuestionWithUidsExist(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var questionUid = (Guid)context.PropertyValue;
-
-            return (await UnitOfWork.Questions.GetByUidAsync(questionUid)) != null;
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return QuestioningErrorCodes.QuestionNotFound;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/QuestioningFluentValidationRules.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/QuestioningFluentValidationRules.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,33 +1,0 @@
-﻿using FluentValidation;
-using System.Collections.Generic;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public static class QuestioningFluentValidationRules
-    {
-        public static IRuleBuilderOptions<T, string> QuestionTitleValidate<T>(this IRuleBuilder<T, string> ruleBuilder)
-        {
-            return ruleBuilder.NotNull().WithMessage(QuestioningErrorCodes.CantBeNull).MaximumLength(500).WithMessage(QuestioningErrorCodes.QuestionTitleLengthInvalid);
-        }
-
-        public static IRuleBuilderOptions<T, string> QuestionTextValidate<T>(this IRuleBuilder<T, string> ruleBuilder)
-        {
-            return ruleBuilder.NotNull().WithMessage(QuestioningErrorCodes.CantBeNull).MaximumLength(4000).WithMessage(QuestioningErrorCodes.QuestionTextLengthInvalid);
-        }
-
-        public static IRuleBuilderOptions<T, string> AnswerResponseTextValidate<T>(this IRuleBuilder<T, string> ruleBuilder)
-        {
-            return ruleBuilder.NotNull().WithMessage(QuestioningErrorCodes.CantBeNull).MaximumLength(4000).WithMessage(QuestioningErrorCodes.AnswerResponseTextLengthInvalid);
-        }
-
-        public static IRuleBuilderOptions<T, string> AnswerTextValidate<T>(this IRuleBuilder<T, string> ruleBuilder)
-        {
-            return ruleBuilder.NotNull().WithMessage(QuestioningErrorCodes.CantBeNull).MaximumLength(4000).WithMessage(QuestioningErrorCodes.AnswerTextLengthInvalid);
-        }
-
-        public static IRuleBuilderOptions<T, IEnumerable<U>> ListNotNull<T, U>(this IRuleBuilder<T, IEnumerable<U>> ruleBuilder)
-        {
-            return ruleBuilder.NotNull().WithMessage(QuestioningErrorCodes.CantBeNull);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/StudentHasGoodReputationAndCanVoteAndAnswer.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/StudentHasGoodReputationAndCanVoteAndAnswer.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,37 +1,0 @@
-﻿using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public class StudentHasGoodReputationAndCanVoteAndAnswer : AsyncValidatorBase
-    {
-        public StudentHasGoodReputationAndCanVoteAndAnswer(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var student = await UnitOfWork.Students.GetStudent(CurrentUser.Id);
-
-            if (student.ReportReputation > 100)
-            {
-                return false;
-            }
-
-            return true;
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return QuestioningErrorCodes.StudentHasBadReputation;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/StudentIsOwnerOfAnswer.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/StudentIsOwnerOfAnswer.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,33 +1,0 @@
-﻿using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public class StudentIsOwnerOfAnswer : AsyncValidatorBase
-    {
-        public StudentIsOwnerOfAnswer(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var answerUid = (Guid)context.PropertyValue;
-
-            return await UnitOfWork.Answers.AnswerIsOwnedByStudent(answerUid, CurrentUser.Id);
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return QuestioningErrorCodes.StudentDoesNotOwnAnswer;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/StudentIsOwnerOfAnswerResponse.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/StudentIsOwnerOfAnswerResponse.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,33 +1,0 @@
-﻿using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public class StudentIsOwnerOfAnswerResponse : AsyncValidatorBase
-    {
-        public StudentIsOwnerOfAnswerResponse(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var answerResponseUid = (Guid)context.PropertyValue;
-
-            return await UnitOfWork.AnswerResponses.StudentIsOwnerOfAnswerResponse(answerResponseUid, CurrentUser.Id);
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return QuestioningErrorCodes.StudentDoesNotOwnAnswerResponse;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/StudentIsOwnerOfQuestion.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/StudentIsOwnerOfQuestion.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,33 +1,0 @@
-﻿using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public class StudentIsOwnerOfQuestion : AsyncValidatorBase
-    {
-        public StudentIsOwnerOfQuestion(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var questionUid = (Guid)context.PropertyValue;
-
-            return await UnitOfWork.Questions.QuestionIsOwnedByStudent(questionUid, CurrentUser.Id);
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return QuestioningErrorCodes.StudentDoesNotOwnQuestion;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/TeamWithUidExist.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/TeamWithUidExist.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,29 +1,0 @@
-﻿using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public class TeamWithUidExist : AsyncValidatorBase
-    {
-        public TeamWithUidExist(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var teamUid = (Guid)context.PropertyValue;
-            return await UnitOfWork.Teams.TeamWithUidExists(teamUid);
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return QuestioningErrorCodes.TeamDontExist;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/VoteAnswerByStudentIsValid.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/Validators/VoteAnswerByStudentIsValid.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,47 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators.Contracts;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.Helpers;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation.Validators;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning.Validators
-{
-    public class VoteAnswerByStudentIsValid : AsyncValidatorBase
-    {
-        public VoteAnswerByStudentIsValid(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-        private VoteType _voteType { get; set; }
-
-        protected override async Task<bool> IsValidAsync(PropertyValidatorContext context, CancellationToken cancellation)
-        {
-            var dto = (VoteAnswerByStudentIsValidDto)context.PropertyValue;
-
-            _voteType = dto.VoteType;
-
-            return dto.VoteType switch
-            {
-                VoteType.Upvote => !await UnitOfWork.Votes.StudentHasUpvotedAnswer(dto.AnswerUid, CurrentUser.Id),
-                VoteType.Downvote => !await UnitOfWork.Votes.StudentHasDownvotedAnswer(dto.AnswerUid, CurrentUser.Id),
-                _ => !await UnitOfWork.Votes.StudentHasUpvotedAnswer(dto.AnswerUid, CurrentUser.Id),
-            };
-        }
-
-        protected override string GetDefaultMessageTemplate()
-        {
-            return _voteType switch
-            {
-                VoteType.Upvote => QuestioningErrorCodes.AnswerAlreadyUpvoted,
-                VoteType.Downvote => QuestioningErrorCodes.AnswerAlreadyDownvoted,
-                _ => QuestioningErrorCodes.AnswerAlreadyUpvoted
-            };
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/AnswerVotedEvent.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/AnswerVotedEvent.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,24 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Helpers;
-using System;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class AnswerVotedEvent : IEvent
-    {
-        public AnswerVotedEvent(Guid questionUid, Guid answerUid, Guid studentUid, VoteType voteType, bool voteAlreadyExists)
-        {
-            QuestionUid = questionUid;
-            AnswerUid = answerUid;
-            StudentUid = studentUid;
-            VoteType = voteType;
-            VoteAlreadyExists = voteAlreadyExists;
-        }
-
-        public Guid QuestionUid { get; }
-        public Guid AnswerUid { get; }
-        public Guid StudentUid { get; }
-        public VoteType VoteType { get; }
-        public bool VoteAlreadyExists { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerCommand.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,71 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.Mediator.Interfaces;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.Helpers;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class VoteAnswerCommand : ICommand<VoteAnswerDto>
-    {
-        public VoteAnswerCommand(VoteType voteType, Guid answerUid, Guid questionUid)
-        {
-            VoteType = voteType;
-            AnswerUid = answerUid;
-            QuestionUid = questionUid;
-        }
-
-        public VoteType VoteType { get; }
-        public Guid AnswerUid { get; }
-        public Guid QuestionUid { get; }
-    }
-
-    public class VoteAnswerHandler : ICommandHandler<VoteAnswerCommand, VoteAnswerDto>
-    {
-        public VoteAnswerHandler(IUnitOfWork unitOfWork, ICurrentUser currentUser, IEventService eventService)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-            EventService = eventService;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-        public IEventService EventService { get; }
-
-        public async Task<VoteAnswerDto> Handle(VoteAnswerCommand request, CancellationToken cancellationToken)
-        {
-            var student = await UnitOfWork.Students.GetStudent(CurrentUser.Id);
-            var answer = await UnitOfWork.Answers.GetByUidAsync(request.AnswerUid);
-            var vote = await UnitOfWork.Votes.GetVoteForAnswerByStudent(request.AnswerUid, CurrentUser.Id);
-            var voteAlreadyExists = false;
-
-            if (vote == null)
-            {
-                vote = new Vote()
-                {
-                    AnswerFk = answer.Id,
-                    StudentFk = student.Id,
-                    VoteType = request.VoteType
-                };
-
-                UnitOfWork.Votes.Add(vote);
-            } 
-            else
-            {
-                vote.VoteType = request.VoteType;
-                voteAlreadyExists = true;
-            }
-
-            await UnitOfWork.SaveAsync();
-
-            EventService.Enqueue(new AnswerVotedEvent(request.QuestionUid, request.AnswerUid, student.Uid, request.VoteType, voteAlreadyExists));
-
-            return new VoteAnswerDto(vote.Uid, voteAlreadyExists);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class VoteAnswerDto
-    {
-        public VoteAnswerDto(Guid voteUid, bool voteAlreadyExists)
-        {
-            VoteUid = voteUid;
-            VoteAlreadyExists = voteAlreadyExists;
-        }
-
-        public Guid VoteUid { get; }
-        public bool VoteAlreadyExists { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerValidator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerValidator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,19 +1,0 @@
-﻿using FinkiChattery.Commands.Questioning.Validators;
-using FinkiChattery.Commands.Questioning.Validators.Contracts;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using FluentValidation;
-
-namespace FinkiChattery.Commands.Questioning
-{
-    public class VoteAnswerValidator : AbstractValidator<VoteAnswerCommand>
-    {
-        public VoteAnswerValidator(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            CascadeMode = CascadeMode.Stop;
-
-            RuleFor(x => x).SetValidator(new StudentHasGoodReputationAndCanVoteAndAnswer(unitOfWork, currentUser));
-            RuleFor(x => new VoteAnswerByStudentIsValidDto(x.VoteType, x.AnswerUid)).SetValidator(new VoteAnswerByStudentIsValid(unitOfWork, currentUser));
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Common/Errors/ErrorCodes.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Common/Errors/ErrorCodes.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Common/Errors/ErrorCodes.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,7 +1,6 @@
 ﻿namespace FinkiChattery.Common.Errors
 {
-    public class ErrorCodes
+    public static class ErrorCodes
     {
-        public const string CantBeNull = "CantBeNull";
     }
 }
Index: src/FinkiChattery/FinkiChattery.Common/FinkiChattery.Common.csproj
===================================================================
--- src/FinkiChattery/FinkiChattery.Common/FinkiChattery.Common.csproj	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Common/FinkiChattery.Common.csproj	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -3,10 +3,8 @@
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
-    <Configurations>Debug;Release;Debug_Docker</Configurations>
   </PropertyGroup>
 
   <ItemGroup>
     <PackageReference Include="FluentValidation" Version="9.5.4" />
-    <PackageReference Include="Hangfire.Core" Version="1.7.25" />
     <PackageReference Include="MediatR" Version="9.0.0" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.Abstractions" Version="2.2.0" />
Index: src/FinkiChattery/FinkiChattery.Common/Mediator/Contracs/IQuery.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Common/Mediator/Contracs/IQuery.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-﻿using MediatR;
-
-namespace FinkiChattery.Common.Mediator.Contracs
-{
-    public interface IQuery<TResult> : IRequest<TResult>
-    {
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Common/Mediator/Contracs/IQueryHandler.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Common/Mediator/Contracs/IQueryHandler.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,9 +1,0 @@
-﻿using MediatR;
-
-namespace FinkiChattery.Common.Mediator.Contracs
-{
-    public interface IQueryHandler<TQuery, TResult> : IRequestHandler<TQuery, TResult>
-        where TQuery : IQuery<TResult>
-    {
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Common/Mediator/EventService.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Common/Mediator/EventService.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Common/Mediator/EventService.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,5 +1,3 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.Mediator.Interfaces;
-using Hangfire;
+﻿using FinkiChattery.Common.Mediator.Interfaces;
 
 namespace FinkiChattery.Common.Mediator
@@ -7,20 +5,4 @@
     public class EventService : IEventService
     {
-        public EventService(IBackgroundJobClient backgroundJob)
-        {
-            BackgroundJob = backgroundJob;
-        }
-
-        public IBackgroundJobClient BackgroundJob { get; }
-
-        public void Enqueue(string jobName, IEvent request)
-        {
-            BackgroundJob.Enqueue<IMediatorService>(bridge => bridge.PublishAsync(jobName, request));
-        }
-
-        public void Enqueue(IEvent request)
-        {
-            BackgroundJob.Enqueue<IMediatorService>(bridge => bridge.PublishAsync(request));
-        }
     }
 }
Index: src/FinkiChattery/FinkiChattery.Common/Mediator/Interfaces/IEventService.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Common/Mediator/Interfaces/IEventService.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Common/Mediator/Interfaces/IEventService.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,11 +1,6 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-
-namespace FinkiChattery.Common.Mediator.Interfaces
+﻿namespace FinkiChattery.Common.Mediator.Interfaces
 {
     public interface IEventService
     {
-        void Enqueue(string jobName, IEvent request);
-
-        void Enqueue(IEvent request);
     }
 }
Index: src/FinkiChattery/FinkiChattery.Common/Mediator/Interfaces/IMediatorService.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Common/Mediator/Interfaces/IMediatorService.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Common/Mediator/Interfaces/IMediatorService.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -10,12 +10,4 @@
 
         Task<TResponse> SendAsync<TResponse>(ICommand<TResponse> request);
-
-        Task<TResponse> SendQueryAsync<TResponse>(IQuery<TResponse> request, CancellationToken cancellationToken);
-
-        Task<TResponse> SendQueryAsync<TResponse>(IQuery<TResponse> request);
-
-        Task PublishAsync<TNotification>(TNotification notification) where TNotification : IEvent;
-
-        Task PublishAsync<TNotification>(string jobName, TNotification notification) where TNotification : IEvent;
     }
 }
Index: src/FinkiChattery/FinkiChattery.Common/Mediator/MediatorService.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Common/Mediator/MediatorService.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Common/Mediator/MediatorService.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,6 +1,5 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
+﻿using MediatR;
+using FinkiChattery.Common.Mediator.Contracs;
 using FinkiChattery.Common.Mediator.Interfaces;
-using MediatR;
-using System.ComponentModel;
 using System.Threading;
 using System.Threading.Tasks;
@@ -26,25 +25,4 @@
             return await mediator.Send(request);
         }
-
-        public async Task PublishAsync<TNotification>(TNotification notification) where TNotification : IEvent
-        {
-            await mediator.Publish(notification, default);
-        }
-
-        [DisplayName("{0}")]
-        public async Task PublishAsync<TNotification>(string jobName, TNotification notification) where TNotification : IEvent
-        {
-            await mediator.Publish(notification, default);
-        }
-
-        public async Task<TResponse> SendQueryAsync<TResponse>(IQuery<TResponse> request, CancellationToken cancellationToken)
-        {
-            return await mediator.Send(request, cancellationToken);
-        }
-
-        public async Task<TResponse> SendQueryAsync<TResponse>(IQuery<TResponse> request)
-        {
-            return await mediator.Send(request);
-        }
     }
 }
Index: src/FinkiChattery/FinkiChattery.Contracts/Base/Response.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Base/Response.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,18 +1,0 @@
-﻿using System;
-using System.Text.Json.Serialization;
-
-namespace FinkiChattery.Contracts.Base
-{
-    public abstract class Response
-    {
-        public Response(long id, Guid uid)
-        {
-            Id = id;
-            Uid = uid;
-        }
-
-        [JsonIgnore]
-        public long Id { get; }
-        public Guid Uid { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/FinkiChattery.Contracts.csproj
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/FinkiChattery.Contracts.csproj	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Contracts/FinkiChattery.Contracts.csproj	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -3,5 +3,4 @@
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
-    <Configurations>Debug;Release;Debug_Docker</Configurations>
   </PropertyGroup>
 
Index: src/FinkiChattery/FinkiChattery.Contracts/Moderating/CreateCategory/CreateCategoryRequest.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Moderating/CreateCategory/CreateCategoryRequest.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,7 +1,0 @@
-﻿namespace FinkiChattery.Contracts.Moderating
-{
-    public class CreateCategoryRequest
-    {
-        public string Name { get; set; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/Questioning/AnswerQuestion/AnswerQuestionRequest.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Questioning/AnswerQuestion/AnswerQuestionRequest.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,7 +1,0 @@
-﻿namespace FinkiChattery.Contracts.Questioning
-{
-    public class AnswerQuestionRequest
-    {
-        public string Text { get; set; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/Questioning/AskQuestion/AskQuestionRequest.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Questioning/AskQuestion/AskQuestionRequest.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,14 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-
-namespace FinkiChattery.Contracts.Questioning
-{
-    public class AskQuestionRequest
-    {
-        public string Title { get; set; }
-
-        public string Text { get; set; }
-
-        public IEnumerable<Guid> Categories { get; set; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/Questioning/GetCategories/CategoryResponse.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Questioning/GetCategories/CategoryResponse.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System;
-
-namespace FinkiChattery.Contracts.Questioning
-{
-    public class CategoryResponse
-    {
-        public CategoryResponse(Guid uid, string name)
-        {
-            Uid = uid;
-            Name = name;
-        }
-
-        public Guid Uid { get; }
-        public string Name { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/Questioning/GetPreviewQuestions/PreviewQuestionResponse.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Questioning/GetPreviewQuestions/PreviewQuestionResponse.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,34 +1,0 @@
-﻿using FinkiChattery.Contracts.Base;
-using System;
-using System.Collections.Generic;
-
-namespace FinkiChattery.Contracts.Questioning
-{
-    public class PreviewQuestionResponse : Response
-    {
-        public PreviewQuestionResponse(long id, Guid uid, string title, long views, long answersCount, DateTime createdOn, IEnumerable<PreviewQuestionCategoryResponse> categories) : base(id, uid)
-        {
-            Title = title;
-            Views = views;
-            AnswersCount = answersCount;
-            CreatedOn = createdOn;
-            Categories = categories;
-        }
-
-        public string Title { get; }
-        public long Views { get; }
-        public long AnswersCount { get; }
-        public DateTime CreatedOn { get; }
-        public IEnumerable<PreviewQuestionCategoryResponse> Categories { get; }
-    }
-
-    public class PreviewQuestionCategoryResponse : Response
-    {
-        public PreviewQuestionCategoryResponse(long id, Guid uid, string text) : base(id, uid)
-        {
-            Text = text;
-        }
-
-        public string Text { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/Questioning/GetQuestionState/QuestionStateResponse.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Questioning/GetQuestionState/QuestionStateResponse.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,170 +1,0 @@
-﻿#nullable enable
-
-using System;
-using System.Collections.Generic;
-using System.Text.Json.Serialization;
-
-namespace FinkiChattery.Contracts.Questioning
-{
-    public class QuestionStateResponse
-    {
-        public QuestionStateResponse(long id, Guid uid, string title, string text, DateTime createdOn, long views, DateTime lastActiveOn, StudentQuestionStateResponse studentResponse, IEnumerable<AnswerQuestionStateResponse> answersResponse, IEnumerable<QuestionCategoryQuestionStateResponse> categoriesResponse, TeamQuestionStateResponse? teamResponse)
-        {
-            Id = id;
-            Uid = uid;
-            Title = title;
-            Text = text;
-            CreatedOn = createdOn;
-            Views = views;
-            LastActiveOn = lastActiveOn;
-            StudentResponse = studentResponse;
-            AnswersResponse = answersResponse;
-            CategoriesResponse = categoriesResponse;
-            TeamResponse = teamResponse;
-        }
-
-        [JsonIgnore]
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Title { get; }
-        public string Text { get; }
-        public DateTime CreatedOn { get; }
-        public long Views { get; }
-        public DateTime LastActiveOn { get; }
-        public StudentQuestionStateResponse StudentResponse { get; }
-        public IEnumerable<AnswerQuestionStateResponse> AnswersResponse { get; }
-        public IEnumerable<QuestionCategoryQuestionStateResponse> CategoriesResponse { get; }
-        public TeamQuestionStateResponse? TeamResponse { get; }
-    }
-
-    public class StudentQuestionStateResponse
-    {
-        public StudentQuestionStateResponse(long id, Guid uid, string index, string imageUrl, long reputation)
-        {
-            Id = id;
-            Uid = uid;
-            Index = index;
-            ImageUrl = imageUrl;
-            Reputation = reputation;
-        }
-
-        [JsonIgnore]
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Index { get; }
-        public string ImageUrl { get; }
-        public long Reputation { get; }
-    }
-
-    public class TeamQuestionStateResponse
-    {
-        public TeamQuestionStateResponse(long id, Guid uid, string name)
-        {
-            Id = id;
-            Uid = uid;
-            Name = name;
-        }
-
-        [JsonIgnore]
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Name { get; }
-    }
-
-    public class QuestionCategoryQuestionStateResponse
-    {
-        public QuestionCategoryQuestionStateResponse(long id, Guid uid, string name)
-        {
-            Id = id;
-            Uid = uid;
-            Name = name;
-        }
-
-        [JsonIgnore]
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Name { get; }
-    }
-
-    public class AnswerQuestionStateResponse
-    {
-        public AnswerQuestionStateResponse(long id, Guid uid, string text, bool correctAnswer, DateTime createdOn, long votesCount, AnswerStudentQuestionStateResponse studentResponse, IEnumerable<AnswerResponseQuestionStateResponse> answerResponsesResponse)
-        {
-            Id = id;
-            Uid = uid;
-            Text = text;
-            CorrectAnswer = correctAnswer;
-            CreatedOn = createdOn;
-            VotesCount = votesCount;
-            StudentResponse = studentResponse;
-            AnswerResponsesResponse = answerResponsesResponse;
-        }
-
-        [JsonIgnore]
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Text { get; }
-        public bool CorrectAnswer { get; }
-        public DateTime CreatedOn { get; }
-        public long VotesCount { get; }
-        public AnswerStudentQuestionStateResponse StudentResponse { get; }
-        public IEnumerable<AnswerResponseQuestionStateResponse> AnswerResponsesResponse { get; }
-    }
-
-    public class AnswerStudentQuestionStateResponse
-    {
-        public AnswerStudentQuestionStateResponse(long id, Guid uid, string index, string imageUrl, long reputation)
-        {
-            Id = id;
-            Uid = uid;
-            Index = index;
-            ImageUrl = imageUrl;
-            Reputation = reputation;
-        }
-
-        [JsonIgnore]
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Index { get; }
-        public string ImageUrl { get; }
-        public long Reputation { get; }
-    }
-
-    public class AnswerResponseQuestionStateResponse
-    {
-        public AnswerResponseQuestionStateResponse(long id, Guid uid, string text, DateTime createdOn, AnswerResponseStudentQuestionStateResponse studentResponse)
-        {
-            Id = id;
-            Uid = uid;
-            Text = text;
-            CreatedOn = createdOn;
-            StudentResponse = studentResponse;
-        }
-
-        [JsonIgnore]
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Text { get; }
-        public DateTime CreatedOn { get; }
-        public AnswerResponseStudentQuestionStateResponse StudentResponse { get; }
-    }
-
-    public class AnswerResponseStudentQuestionStateResponse
-    {
-        public AnswerResponseStudentQuestionStateResponse(long id, Guid uid, string index, string imageUrl, long reputation)
-        {
-            Id = id;
-            Uid = uid;
-            Index = index;
-            ImageUrl = imageUrl;
-            Reputation = reputation;
-        }
-
-        [JsonIgnore]
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Index { get; }
-        public string ImageUrl { get; }
-        public long Reputation { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/Questioning/RespondToAnswer/AnswerResponseRequest.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Questioning/RespondToAnswer/AnswerResponseRequest.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,7 +1,0 @@
-﻿namespace FinkiChattery.Contracts.Questioning
-{
-    public class AnswerResponseRequest
-    {
-        public string Text { get; set; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/Questioning/VoteAnswer/VoteAnswerRequest.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Questioning/VoteAnswer/VoteAnswerRequest.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,10 +1,0 @@
-﻿using System.ComponentModel.DataAnnotations;
-
-namespace FinkiChattery.Contracts.Questioning
-{
-    public class VoteAnswerRequest
-    {
-        [EnumDataType(typeof(VoteTypeRequest))]
-        public VoteTypeRequest VoteType { get; set; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/Questioning/VoteAnswer/VoteAnswerResponse.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Questioning/VoteAnswer/VoteAnswerResponse.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-﻿using System;
-
-namespace FinkiChattery.Contracts.Questioning
-{
-    public class VoteAnswerResponse
-    {
-        public VoteAnswerResponse(Guid answerUid, Guid voteUid, VoteTypeRequest voteType, bool voteAlreadyExists)
-        {
-            AnswerUid = answerUid;
-            VoteUid = voteUid;
-            VoteType = voteType;
-            VoteAlreadyExists = voteAlreadyExists;
-        }
-
-        public Guid AnswerUid { get; }
-        public Guid VoteUid { get; }
-        public VoteTypeRequest VoteType { get; }
-        public bool VoteAlreadyExists { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/Questioning/VoteAnswer/VoteTypeRequest.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Questioning/VoteAnswer/VoteTypeRequest.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-﻿namespace FinkiChattery.Contracts.Questioning
-{
-    public enum VoteTypeRequest
-    {
-        Upvote,
-        Downvote
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Contracts/User/GetSelfUser/SelfUserResponse.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/User/GetSelfUser/SelfUserResponse.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,124 +1,0 @@
-﻿#nullable enable
-
-using System;
-using System.Collections.Generic;
-
-
-namespace FinkiChattery.Contracts.User
-{
-    public class SelfUserResponse
-    {
-        public SelfUserResponse(StudentSelfResponse? student = null, TeacherSelfResponse? teacher = null, ModeratorSelfResponse? moderator = null)
-        {
-            Student = student;
-            Teacher = teacher;
-            Moderator = moderator;
-        }
-
-        public StudentSelfResponse? Student { get; }
-        public TeacherSelfResponse? Teacher { get; }
-        public ModeratorSelfResponse? Moderator { get; }
-    }
-
-    public class StudentSelfResponse
-    {
-        public StudentSelfResponse(Guid uid, long applicationUserId, string index, long reputation, string imageUrl, IEnumerable<StudentQuestionResponse> questions, IEnumerable<StudentTeamResponse> teams, IEnumerable<StudentNotificationResponse> notifications)
-        {
-            Uid = uid;
-            ApplicationUserId = applicationUserId;
-            Index = index;
-            Reputation = reputation;
-            ImageUrl = imageUrl;
-            Questions = questions;
-            Teams = teams;
-            Notifications = notifications;
-        }
-
-        public Guid Uid { get; }
-        public long ApplicationUserId { get; }
-        public string Index { get; }
-        public long Reputation { get; }
-        public string ImageUrl { get; }
-        public IEnumerable<StudentQuestionResponse> Questions { get; }
-        public IEnumerable<StudentTeamResponse> Teams { get; }
-        public IEnumerable<StudentNotificationResponse> Notifications { get; }
-    }
-
-    public class StudentNotificationResponse
-    {
-        public StudentNotificationResponse(Guid uid, string text, DateTime createdOn, Guid questionUid)
-        {
-            Uid = uid;
-            Text = text;
-            CreatedOn = createdOn;
-            QuestionUid = questionUid;
-        }
-
-        public Guid Uid { get; }
-        public string Text { get; }
-        public DateTime CreatedOn { get; }
-        public Guid QuestionUid { get; }
-    }
-
-    public class StudentQuestionResponse
-    {
-        public StudentQuestionResponse(Guid questionUid, string title)
-        {
-            QuestionUid = questionUid;
-            Title = title;
-        }
-
-        public Guid QuestionUid { get; }
-        public string Title { get; }
-    }
-
-    public class StudentTeamResponse
-    {
-        public StudentTeamResponse(Guid teamUid, string name)
-        {
-            TeamUid = teamUid;
-            Name = name;
-        }
-
-        public Guid TeamUid { get; }
-        public string Name { get; }
-    }
-
-    public class ModeratorSelfResponse
-    {
-        public ModeratorSelfResponse(Guid uid, long applicationUserId)
-        {
-            Uid = uid;
-            ApplicationUserId = applicationUserId;
-        }
-
-        public Guid Uid { get; }
-        public long ApplicationUserId { get; }
-    }
-
-    public class TeacherSelfResponse
-    {
-        public TeacherSelfResponse(Guid uid, long applicationUserId, IEnumerable<TeacherTeamResponse> teams)
-        {
-            Uid = uid;
-            ApplicationUserId = applicationUserId;
-            Teams = teams;
-        }
-
-        public Guid Uid { get; }
-        public long ApplicationUserId { get; }
-        public IEnumerable<TeacherTeamResponse> Teams { get; }
-    }
-
-    public class TeacherTeamResponse
-    {
-        public TeacherTeamResponse(Guid teamUid, string name)
-        {
-            TeamUid = teamUid;
-            Name = name;
-        }
-
-        public Guid TeamUid { get; }
-        public string Name { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Database/FinkiChattery.Database.publish.xml
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/FinkiChattery.Database.publish.xml	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,15 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <IncludeCompositeObjects>True</IncludeCompositeObjects>
-    <TargetDatabaseName>FinkiChattery</TargetDatabaseName>
-    <DeployScriptFileName>FinkiChattery.Database.sql</DeployScriptFileName>
-    <TargetConnectionString>Data Source=.;Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False</TargetConnectionString>
-    <ProfileVersionNumber>1</ProfileVersionNumber>
-  </PropertyGroup>
-  <ItemGroup>
-    <SqlCmdVariable Include="BuildConfiguration">
-      <Value>Debug</Value>
-    </SqlCmdVariable>
-  </ItemGroup>
-</Project>
Index: src/FinkiChattery/FinkiChattery.Database/FinkiChattery.Database.refactorlog
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/FinkiChattery.Database.refactorlog	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,1 +1,0 @@
-﻿
Index: src/FinkiChattery/FinkiChattery.Database/FinkiChattery.Database.sqlproj
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/FinkiChattery.Database.sqlproj	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Database/FinkiChattery.Database.sqlproj	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,3 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
+﻿<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
   <PropertyGroup>
@@ -8,5 +8,5 @@
     <ProjectVersion>4.1</ProjectVersion>
     <ProjectGuid>{5e1219f5-fc7d-4138-811d-26934e946d30}</ProjectGuid>
-    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider</DSP>
+    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql130DatabaseSchemaProvider</DSP>
     <OutputType>Database</OutputType>
     <RootPath>
@@ -55,6 +55,6 @@
     <VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
   </PropertyGroup>
-  <Import Condition="'$(NetCoreBuild)' != 'true' AND '$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
-  <Import Condition="'$(NetCoreBuild)' != 'true' AND '$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
+  <Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
+  <Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
   <ItemGroup>
     <Folder Include="Properties" />
@@ -66,43 +66,21 @@
     <Folder Include="dbo\Tables\User" />
     <Folder Include="dbo\Tables\User\Seed" />
-    <Folder Include="dbo\Tables\Category" />
-    <Folder Include="dbo\Tables\Team" />
-    <Folder Include="dbo\Tables\Student" />
-    <Folder Include="FullTextSearch" />
-    <Folder Include="dbo\Tables\Answer" />
-    <Folder Include="dbo\Tables\AnswerResponse" />
-    <Folder Include="dbo\Tables\Question" />
-    <Folder Include="dbo\Tables\QuestionCategory" />
-    <Folder Include="Snapshots" />
-    <Folder Include="dbo\Tables\Vote" />
-    <Folder Include="dbo\Tables\Moderator" />
-    <Folder Include="dbo\Tables\StudentNotification" />
   </ItemGroup>
   <ItemGroup>
+    <Build Include="dbo\Tables\Category.sql" />
+    <Build Include="dbo\Tables\Team.sql" />
+    <Build Include="dbo\Tables\Moderator.sql" />
+    <Build Include="dbo\Tables\Student.sql" />
     <Build Include="dbo\Tables\Teacher.sql" />
+    <Build Include="dbo\Tables\Question.sql" />
     <Build Include="dbo\Tables\StudentTeam.sql" />
     <Build Include="dbo\Tables\TeacherTeam.sql" />
+    <Build Include="dbo\Tables\Answer.sql" />
+    <Build Include="dbo\Tables\QuestionCategory.sql" />
+    <Build Include="dbo\Tables\AnswerResponse.sql" />
+    <Build Include="dbo\Tables\Upvote.sql" />
     <Build Include="dbo\Tables\User\AspNetRoleClaims.sql" />
     <Build Include="dbo\Tables\User\AspNetRoles.sql" />
     <None Include="dbo\Tables\User\Seed\Users.Debug.Seed.sql" />
-    <Build Include="dbo\Tables\Category\Category.sql" />
-    <None Include="dbo\Tables\Category\Category.Seed.sql" />
-    <Build Include="dbo\Tables\Team\Team.sql" />
-    <Build Include="dbo\Tables\Student\Student.sql" />
-    <None Include="dbo\Tables\Student\Student.Debug.Seed.sql" />
-    <Build Include="FullTextSearch\FullTextIndexQuestion.sql" />
-    <Build Include="FullTextSearch\QuestionFullTextCatalog.sql" />
-    <Build Include="dbo\Tables\Question\Question.sql" />
-    <None Include="dbo\Tables\Question\Question.Debug.Seed.sql" />
-    <Build Include="dbo\Tables\Answer\Answer.sql" />
-    <None Include="dbo\Tables\Answer\Answer.Debug.Seed.sql" />
-    <Build Include="dbo\Tables\AnswerResponse\AnswerResponse.sql" />
-    <None Include="dbo\Tables\AnswerResponse\AnswerResponse.Debug.Seed.sql" />
-    <Build Include="dbo\Tables\QuestionCategory\QuestionCategory.sql" />
-    <None Include="dbo\Tables\QuestionCategory\QuestionCategory.Debug.Seed.sql" />
-    <Build Include="dbo\Tables\Vote\Vote.sql" />
-    <Build Include="dbo\Tables\Moderator\Moderator.sql" />
-    <None Include="dbo\Tables\Moderator\Moderator.Debug.Seed.sql" />
-    <Build Include="dbo\Tables\StudentNotification\StudentNotification.sql" />
   </ItemGroup>
   <ItemGroup>
@@ -111,5 +89,4 @@
     <PreDeploy Include="dbo\Scripts\Script.PreDeployment.sql" />
     <None Include="FinkiChattery.Database.publish.xml" />
-    <None Include="Snapshots\FinkiChattery.Database_20210922_17-47-58.dacpac" />
   </ItemGroup>
   <ItemGroup>
@@ -135,6 +112,3 @@
     </SqlCmdVariable>
   </ItemGroup>
-  <ItemGroup>
-    <RefactorLog Include="FinkiChattery.Database.refactorlog" />
-  </ItemGroup>
 </Project>
Index: src/FinkiChattery/FinkiChattery.Database/FinkiChattery.Database.sqlproj_backup
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/FinkiChattery.Database.sqlproj_backup	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,122 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <Name>FinkiChattery.Database</Name>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectVersion>4.1</ProjectVersion>
-    <ProjectGuid>{5e1219f5-fc7d-4138-811d-26934e946d30}</ProjectGuid>
-    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider</DSP>
-    <OutputType>Database</OutputType>
-    <RootPath>
-    </RootPath>
-    <RootNamespace>FinkiChattery.Database</RootNamespace>
-    <AssemblyName>FinkiChattery.Database</AssemblyName>
-    <ModelCollation>1033,CI</ModelCollation>
-    <DefaultFileStructure>BySchemaAndSchemaType</DefaultFileStructure>
-    <DeployToDatabase>True</DeployToDatabase>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <TargetLanguage>CS</TargetLanguage>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <SqlServerVerification>False</SqlServerVerification>
-    <IncludeCompositeObjects>True</IncludeCompositeObjects>
-    <TargetDatabaseSet>True</TargetDatabaseSet>
-    <DefaultCollation>SQL_Latin1_General_CP1_CI_AS</DefaultCollation>
-    <DefaultFilegroup>PRIMARY</DefaultFilegroup>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <OutputPath>bin\Release\</OutputPath>
-    <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
-    <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <DefineDebug>false</DefineDebug>
-    <DefineTrace>true</DefineTrace>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <DefineDebug>true</DefineDebug>
-    <DefineTrace>true</DefineTrace>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup>
-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
-    <!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
-    <SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
-    <VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
-  </PropertyGroup>
-  <Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
-  <Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
-  <ItemGroup>
-    <Folder Include="Properties" />
-    <Folder Include="dbo\" />
-    <Folder Include="dbo\Tables\" />
-    <Folder Include="dbo\Scripts" />
-    <Folder Include="dbo\Scripts\PreDeploymentScripts" />
-    <Folder Include="dbo\Scripts\PostDeploymentScripts" />
-    <Folder Include="dbo\Tables\User" />
-    <Folder Include="dbo\Tables\User\Seed" />
-    <Folder Include="dbo\Tables\Category" />
-    <Folder Include="dbo\Tables\Team" />
-    <Folder Include="dbo\Tables\Student" />
-    <Folder Include="FullTextSearch" />
-  </ItemGroup>
-  <ItemGroup>
-    <Build Include="dbo\Tables\Moderator.sql" />
-    <Build Include="dbo\Tables\Teacher.sql" />
-    <Build Include="dbo\Tables\Question.sql" />
-    <Build Include="dbo\Tables\StudentTeam.sql" />
-    <Build Include="dbo\Tables\TeacherTeam.sql" />
-    <Build Include="dbo\Tables\Answer.sql" />
-    <Build Include="dbo\Tables\QuestionCategory.sql" />
-    <Build Include="dbo\Tables\AnswerResponse.sql" />
-    <Build Include="dbo\Tables\Upvote.sql" />
-    <Build Include="dbo\Tables\User\AspNetRoleClaims.sql" />
-    <Build Include="dbo\Tables\User\AspNetRoles.sql" />
-    <None Include="dbo\Tables\User\Seed\Users.Debug.Seed.sql" />
-    <Build Include="dbo\Tables\Category\Category.sql" />
-    <None Include="dbo\Tables\Category\Category.Seed.sql" />
-    <Build Include="dbo\Tables\Team\Team.sql" />
-    <Build Include="dbo\Tables\Student\Student.sql" />
-    <None Include="dbo\Tables\Student\Student.Debug.Seed.sql" />
-    <Build Include="FullTextSearch\FullTextIndexQuestion.sql" />
-    <Build Include="FullTextSearch\QuestionFullTextCatalog.sql" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="dbo\Scripts\PreDeploymentScripts\Debug.PreDeployment.sql" />
-    <None Include="dbo\Scripts\PreDeploymentScripts\Production.PreDeployment.sql" />
-    <PreDeploy Include="dbo\Scripts\Script.PreDeployment.sql" />
-    <None Include="FinkiChattery.Database.publish.xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <PostDeploy Include="dbo\Scripts\Script.PostDeployment.sql" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="dbo\Scripts\PostDeploymentScripts\Debug.PostDeployment.sql" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="dbo\Scripts\PostDeploymentScripts\Production.PostDeployment.sql" />
-  </ItemGroup>
-  <ItemGroup>
-    <Build Include="dbo\Tables\User\AspNetUserClaims.sql" />
-    <Build Include="dbo\Tables\User\AspNetUserLogins.sql" />
-    <Build Include="dbo\Tables\User\AspNetUserRoles.sql" />
-    <Build Include="dbo\Tables\User\AspNetUsers.sql" />
-    <Build Include="dbo\Tables\User\AspNetUserTokens.sql" />
-  </ItemGroup>
-  <ItemGroup>
-    <SqlCmdVariable Include="BuildConfiguration">
-      <DefaultValue>Debug</DefaultValue>
-      <Value>$(SqlCmdVar__1)</Value>
-    </SqlCmdVariable>
-  </ItemGroup>
-</Project>
Index: src/FinkiChattery/FinkiChattery.Database/FullTextSearch/FullTextIndexQuestion.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/FullTextSearch/FullTextIndexQuestion.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,3 +1,0 @@
-﻿CREATE FULLTEXT INDEX ON [dbo].[Question] ([Search])
-KEY INDEX [PK_Question] ON [QuestionFullTextCatalog]
-WITH (CHANGE_TRACKING AUTO, STOPLIST OFF)
Index: src/FinkiChattery/FinkiChattery.Database/FullTextSearch/QuestionFullTextCatalog.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/FullTextSearch/QuestionFullTextCatalog.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,4 +1,0 @@
-﻿CREATE FULLTEXT CATALOG [QuestionFullTextCatalog]
-    WITH ACCENT_SENSITIVITY = OFF
-    AS DEFAULT
-    AUTHORIZATION [dbo];
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/PostDeploymentScripts/Debug.PostDeployment.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/PostDeploymentScripts/Debug.PostDeployment.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/PostDeploymentScripts/Debug.PostDeployment.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,8 +1,1 @@
-﻿:r ./../../Tables/User/Seed/Users.Debug.Seed.sql
-:r ./../../Tables/Category/Category.Seed.sql
-:r ./../../Tables/Student/Student.Debug.Seed.sql
-:r ./../../Tables/Question/Question.Debug.Seed.sql
-:r ./../../Tables/Answer/Answer.Debug.Seed.sql
-:r ./../../Tables/AnswerResponse/AnswerResponse.Debug.Seed.sql
-:r ./../../Tables/QuestionCategory/QuestionCategory.Debug.Seed.sql
-:r ./../../Tables/Moderator/Moderator.Debug.Seed.sql
+﻿:r .\..\..\Tables\User\Seed\Users.Debug.Seed.sql
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/PostDeploymentScripts/Production.PostDeployment.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/PostDeploymentScripts/Production.PostDeployment.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/PostDeploymentScripts/Production.PostDeployment.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,1 +1,1 @@
-﻿:r ./../../Tables/Category/Category.Seed.sql
+﻿
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/Script.PostDeployment.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/Script.PostDeployment.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/Script.PostDeployment.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -4,5 +4,5 @@
 		PRINT 'Deploying DEBUG scripts';
 	END
-	:r ./PostDeploymentScripts/Debug.PostDeployment.sql
+	:r .\PostDeploymentScripts\Debug.PostDeployment.sql
 	BEGIN --Run scripts 
 		PRINT 'End deploying DEBUG scripts';
@@ -15,5 +15,5 @@
 		PRINT 'Deploying PRODUCTION scripts' 
 	END
-		:r ./PostDeploymentScripts/Production.PostDeployment.sql
+		:r .\PostDeploymentScripts\Production.PostDeployment.sql
 		BEGIN --Run scripts 
 		PRINT 'End deploying PRODUCTION scripts' 
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/Script.PreDeployment.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/Script.PreDeployment.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Scripts/Script.PreDeployment.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -4,5 +4,5 @@
 		PRINT 'Deploying DEBUG pre deployment scripts';
 	END
-	:r ./PreDeploymentScripts/Debug.PreDeployment.sql
+	:r .\PreDeploymentScripts\Debug.PreDeployment.sql
 	BEGIN --Run scripts 
 		PRINT 'End deploying DEBUG pre deployment scripts';
@@ -15,5 +15,5 @@
 		PRINT 'Deploying PRODUCTION pre deployment scripts' 
 	END
-	:r ./PreDeploymentScripts/Production.PreDeployment.sql
+	:r .\PreDeploymentScripts\Production.PreDeployment.sql
 	BEGIN --Run scripts 
 		PRINT 'End deploying PRODUCTION pre deployment scripts' 
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Answer.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Answer.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Answer.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,23 @@
+﻿CREATE TABLE [dbo].[Answer] (
+    [Id]            BIGINT           IDENTITY (1, 1) NOT NULL,
+    [Uid]           UNIQUEIDENTIFIER NOT NULL,
+    [Text]          NVARCHAR (1)     NOT NULL,
+    [QuestionFk]    BIGINT           NOT NULL,
+    [StudentFk]     BIGINT           NOT NULL,
+    [CorrectAnswer] BIT              NOT NULL,
+    [CreatedOn]     SMALLDATETIME    NOT NULL,
+    CONSTRAINT [PK_Answer] PRIMARY KEY CLUSTERED ([Id] ASC),
+    CONSTRAINT [FK_Answer_Question_QuestionFk] FOREIGN KEY ([QuestionFk]) REFERENCES [dbo].[Question] ([Id]),
+    CONSTRAINT [FK_Answer_Student_StudentFk] FOREIGN KEY ([StudentFk]) REFERENCES [dbo].[Student] ([Id])
+);
+
+
+GO
+CREATE NONCLUSTERED INDEX [IX_Answer_QuestionFk]
+    ON [dbo].[Answer]([QuestionFk] ASC);
+
+
+GO
+CREATE NONCLUSTERED INDEX [IX_Answer_StudentFk]
+    ON [dbo].[Answer]([StudentFk] ASC);
+
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Answer/Answer.Debug.Seed.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Answer/Answer.Debug.Seed.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿BEGIN
-    SET IDENTITY_INSERT [dbo].[Answer] ON
-    MERGE [dbo].[Answer] AS T
-    USING
-    (
-        SELECT *
-        FROM
-    (
-        VALUES
-            (1, N'aee193c3-9d36-4ed8-81b2-15eb4ff305f1', N'Answer 1', 1, 1, 1, GETUTCDATE(), 5),
-            (2, N'bee193c3-9d36-4ed8-81b2-15eb4ff305f1', N'Answer 2', 1, 1, 0, GETUTCDATE(), 5),
-            (3, N'cee193c3-9d36-4ed8-81b2-15eb4ff305f1', N'Answer 3', 2, 1, 1, GETUTCDATE(), 5),
-            (4, N'dee193c3-9d36-4ed8-81b2-15eb4ff305f1', N'Answer 4', 2, 1, 0, GETUTCDATE(), 5)
-    ) AS temp ([Id], [Uid], [Text], [QuestionFk], [StudentFk], [CorrectAnswer], [CreatedOn], [VotesCount])
-    ) AS S
-    ON T.[ID] = S.[ID]
-    WHEN MATCHED THEN
-        UPDATE SET T.[Uid] = S.[Uid],
-                   T.[Text] = S.[Text],
-                   T.[QuestionFk] = S.[QuestionFk],
-                   T.[StudentFk] = S.[StudentFk],
-                   T.[CorrectAnswer] = S.[CorrectAnswer],
-                   T.[VotesCount] = S.[VotesCount]
-    WHEN NOT MATCHED THEN
-        INSERT
-        (
-            [Id],
-            [Uid],
-            [Text],
-            [QuestionFk],
-            [StudentFk],
-            [CorrectAnswer],
-            [CreatedOn],
-            [VotesCount]
-        )
-        VALUES
-        (S.[Id], S.[Uid], S.[Text], S.[QuestionFk], S.[StudentFk], S.[CorrectAnswer], S.[CreatedOn], S.[VotesCount]);
-    SET IDENTITY_INSERT [dbo].[Answer] OFF
-END
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Answer/Answer.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Answer/Answer.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,24 +1,0 @@
-﻿CREATE TABLE [dbo].[Answer] (
-    [Id]            BIGINT           IDENTITY (1, 1) NOT NULL,
-    [Uid]           UNIQUEIDENTIFIER NOT NULL,
-    [Text]          NVARCHAR (4000)  NOT NULL,
-    [QuestionFk]    BIGINT           NOT NULL,
-    [StudentFk]     BIGINT           NOT NULL,
-    [CorrectAnswer] BIT              NOT NULL,
-    [CreatedOn]     SMALLDATETIME    NOT NULL,
-    [VotesCount] BIGINT NOT NULL DEFAULT 0, 
-    CONSTRAINT [PK_Answer] PRIMARY KEY CLUSTERED ([Id] ASC),
-    CONSTRAINT [FK_Answer_Question_QuestionFk] FOREIGN KEY ([QuestionFk]) REFERENCES [dbo].[Question] ([Id]),
-    CONSTRAINT [FK_Answer_Student_StudentFk] FOREIGN KEY ([StudentFk]) REFERENCES [dbo].[Student] ([Id])
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_Answer_QuestionFk]
-    ON [dbo].[Answer]([QuestionFk] ASC);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_Answer_StudentFk]
-    ON [dbo].[Answer]([StudentFk] ASC);
-
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/AnswerResponse.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/AnswerResponse.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Tables/AnswerResponse.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,17 @@
+﻿CREATE TABLE [dbo].[AnswerResponse] (
+    [Id]        BIGINT           IDENTITY (1, 1) NOT NULL,
+    [Uid]       UNIQUEIDENTIFIER NOT NULL,
+    [Text]      NVARCHAR (1)     NOT NULL,
+    [AnswerFk]  BIGINT           NOT NULL,
+    [StudentFk] BIGINT           NOT NULL,
+    [CreatedOn] SMALLDATETIME    NOT NULL,
+    CONSTRAINT [PK_AnswerResponse] PRIMARY KEY CLUSTERED ([Id] ASC),
+    CONSTRAINT [FK_AnswerResponse_Answer_AnswerFk] FOREIGN KEY ([AnswerFk]) REFERENCES [dbo].[Answer] ([Id]),
+    CONSTRAINT [FK_AnswerResponse_Student_AnswerFk] FOREIGN KEY ([AnswerFk]) REFERENCES [dbo].[Student] ([Id])
+);
+
+
+GO
+CREATE NONCLUSTERED INDEX [IX_AnswerResponse_AnswerFk]
+    ON [dbo].[AnswerResponse]([AnswerFk] ASC);
+
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/AnswerResponse/AnswerResponse.Debug.Seed.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/AnswerResponse/AnswerResponse.Debug.Seed.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,40 +1,0 @@
-﻿BEGIN
-    SET IDENTITY_INSERT [dbo].[AnswerResponse] ON
-    MERGE [dbo].[AnswerResponse] AS T
-    USING
-    (
-        SELECT *
-        FROM
-    (
-        VALUES
-            (1, N'aee193c3-9d36-4ed8-81b2-15eb4ff305f1', N'Answer response 1', 1, 1, GETUTCDATE()),
-            (2, N'bee193c3-9d36-4ed8-81b2-15eb4ff305f1', N'Answer response 2', 1, 1, GETUTCDATE()),
-            (3, N'cee193c3-9d36-4ed8-81b2-15eb4ff305f1', N'Answer response 3', 2, 1, GETUTCDATE()),
-            (4, N'dee193c3-9d36-4ed8-81b2-15eb4ff305f1', N'Answer response 4', 2, 1, GETUTCDATE()),
-            (5, N'f0486b3e-39d0-4350-81dc-7583c7a6be28', N'Answer response 5', 3, 1, GETUTCDATE()),
-            (6, N'378bcf7e-012a-413a-9493-aa2dc590ca65', N'Answer response 6', 3, 1, GETUTCDATE()),
-            (7, N'a8f5a8bb-3c35-4866-a981-44bb4200873b', N'Answer response 7', 4, 1, GETUTCDATE()),
-            (8, N'8b1b8b78-2baa-4112-99c4-af3c9991c47d', N'Answer response 8', 4, 1, GETUTCDATE())
-    ) AS temp ([Id], [Uid], [Text], [AnswerFk], [StudentFk], [CreatedOn])
-    ) AS S
-    ON T.[ID] = S.[ID]
-    WHEN MATCHED THEN
-        UPDATE SET T.[Uid] = S.[Uid],
-                   T.[Text] = S.[Text],
-                   T.[AnswerFk] = S.[AnswerFk],
-                   T.[StudentFk] = S.[StudentFk],
-                   T.[CreatedOn] = S.[CreatedOn]
-    WHEN NOT MATCHED THEN
-        INSERT
-        (
-            [Id],
-            [Uid],
-            [Text],
-            [AnswerFk],
-            [StudentFk],
-            [CreatedOn]
-        )
-        VALUES
-        (S.[Id], S.[Uid], S.[Text], S.[AnswerFk], S.[StudentFk], S.[CreatedOn]);
-    SET IDENTITY_INSERT [dbo].[AnswerResponse] OFF
-END
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/AnswerResponse/AnswerResponse.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/AnswerResponse/AnswerResponse.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,17 +1,0 @@
-﻿CREATE TABLE [dbo].[AnswerResponse] (
-    [Id]        BIGINT           IDENTITY (1, 1) NOT NULL,
-    [Uid]       UNIQUEIDENTIFIER NOT NULL,
-    [Text]      NVARCHAR (4000)  NOT NULL,
-    [AnswerFk]  BIGINT           NOT NULL,
-    [StudentFk] BIGINT           NOT NULL,
-    [CreatedOn] SMALLDATETIME    NOT NULL,
-    CONSTRAINT [PK_AnswerResponse] PRIMARY KEY CLUSTERED ([Id] ASC),
-    CONSTRAINT [FK_AnswerResponse_Answer_AnswerFk] FOREIGN KEY ([AnswerFk]) REFERENCES [dbo].[Answer] ([Id]) ON DELETE CASCADE,
-    CONSTRAINT [FK_AnswerResponse_Student_AnswerFk] FOREIGN KEY ([StudentFk]) REFERENCES [dbo].[Student] ([Id])
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_AnswerResponse_AnswerFk]
-    ON [dbo].[AnswerResponse]([AnswerFk] ASC);
-
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Category.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Category.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Category.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,7 @@
+﻿CREATE TABLE [dbo].[Category] (
+    [Id]   BIGINT           IDENTITY (1, 1) NOT NULL,
+    [Uid]  UNIQUEIDENTIFIER NOT NULL,
+    [Name] NVARCHAR (1)     NOT NULL,
+    CONSTRAINT [PK_Category] PRIMARY KEY CLUSTERED ([Id] ASC)
+);
+
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Category/Category.Seed.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Category/Category.Seed.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿BEGIN
-SET IDENTITY_INSERT [dbo].[Category] ON
-MERGE [dbo].[Category] AS T
-USING
-(
-	SELECT *
-	FROM (
-	VALUES
-		(1, N'aee193c3-9d36-4ed8-81b2-15eb4ff305f1',  N'internet-techologies'),
-		(2, N'7d19a33f-d4a9-4498-8beb-07a5ce75d638',  N'software-engineering'),
-		(3, N'8317013c-7eb8-4ca9-83c5-0342895e4061',  N'visual-programming'),
-		(4, N'11d42b97-a343-499e-b3c6-13fbfd3785f4',  N'internet-programming'),
-		(5, N'b2e4f54d-664e-4301-9642-9a6e9ef8df84',  N'object-oriented-programming'),
-		(6, N'77146a56-48b3-4e29-910a-54b7449f8c2b',  N'calculus'),
-		(7, N'c1a7bc19-34b5-4434-ad6b-f6e0fa90c946',  N'discrete-mathematics'),
-		(8, N'9f324879-0e63-4d3d-a945-e88d290a23f1',  N'advanced-programming'),
-		(9, N'6dd8f274-32ba-4b4b-8270-fea799e9b2e2',  N'web-programming'),
-		(10, N'a4493d42-e01f-4092-a700-47a0847c8c4e',  N'operating-systems')
-		)
-		AS temp ([ID], [Uid], [Name])
-) AS S
-ON T.[ID] = S.[ID]
-WHEN MATCHED THEN UPDATE SET
-	  T.[Uid]						= S.[Uid],
-	  T.[Name]						= S.[Name]
-WHEN NOT MATCHED THEN
-INSERT
-([ID], [Uid], [Name])
-VALUES
-(S.[ID], S.[Uid], S.[Name]);
-SET IDENTITY_INSERT [dbo].[Category] OFF
-END
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Category/Category.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Category/Category.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,7 +1,0 @@
-﻿CREATE TABLE [dbo].[Category] (
-    [Id]   BIGINT           IDENTITY (1, 1) NOT NULL,
-    [Uid]  UNIQUEIDENTIFIER NOT NULL,
-    [Name] NVARCHAR (500)     NOT NULL,
-    CONSTRAINT [PK_Category] PRIMARY KEY CLUSTERED ([Id] ASC)
-);
-
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Moderator.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Moderator.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Moderator.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,13 @@
+﻿CREATE TABLE [dbo].[Moderator] (
+    [Id]                BIGINT           IDENTITY (1, 1) NOT NULL,
+    [Uid]               UNIQUEIDENTIFIER NOT NULL,
+    [ApplicationUserFk] BIGINT           NOT NULL,
+    CONSTRAINT [PK_Moderator] PRIMARY KEY CLUSTERED ([Id] ASC),
+    CONSTRAINT [FK_Moderator_AspNetUsers_ApplicationUserFk] FOREIGN KEY ([ApplicationUserFk]) REFERENCES [dbo].[AspNetUsers] ([Id])
+);
+
+
+GO
+CREATE UNIQUE NONCLUSTERED INDEX [IX_Moderator_ApplicationUserFk]
+    ON [dbo].[Moderator]([ApplicationUserFk] ASC);
+
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Moderator/Moderator.Debug.Seed.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Moderator/Moderator.Debug.Seed.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,27 +1,0 @@
-﻿BEGIN
-    SET IDENTITY_INSERT [dbo].[Moderator] ON
-    MERGE [dbo].[Moderator] AS T
-    USING
-    (
-        SELECT *
-        FROM
-    (
-        VALUES
-            (1, N'aee193c3-9d36-4ed8-81b2-15eb4ff305f1', 2)
-    ) AS temp ([Id], [Uid], [ApplicationUserFk])
-    ) AS S
-    ON T.[ID] = S.[ID]
-    WHEN MATCHED THEN
-        UPDATE SET T.[Uid] = S.[Uid],
-                   T.[ApplicationUserFk] = S.[ApplicationUserFk]
-    WHEN NOT MATCHED THEN
-        INSERT
-        (
-            [Id],
-            [Uid],
-            [ApplicationUserFk]
-        )
-        VALUES
-        (S.[Id], S.[Uid], S.[ApplicationUserFk]);
-    SET IDENTITY_INSERT [dbo].[Moderator] OFF
-END
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Moderator/Moderator.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Moderator/Moderator.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-﻿CREATE TABLE [dbo].[Moderator] (
-    [Id]                BIGINT           IDENTITY (1, 1) NOT NULL,
-    [Uid]               UNIQUEIDENTIFIER NOT NULL,
-    [ApplicationUserFk] BIGINT           NOT NULL,
-    CONSTRAINT [PK_Moderator] PRIMARY KEY CLUSTERED ([Id] ASC),
-    CONSTRAINT [FK_Moderator_AspNetUsers_ApplicationUserFk] FOREIGN KEY ([ApplicationUserFk]) REFERENCES [dbo].[AspNetUsers] ([Id])
-);
-
-
-GO
-CREATE UNIQUE NONCLUSTERED INDEX [IX_Moderator_ApplicationUserFk]
-    ON [dbo].[Moderator]([ApplicationUserFk] ASC);
-
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Question.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Question.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Question.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,25 @@
+﻿CREATE TABLE [dbo].[Question] (
+    [Id]           BIGINT           IDENTITY (1, 1) NOT NULL,
+    [Uid]          UNIQUEIDENTIFIER NOT NULL,
+    [Title]        NVARCHAR (1)     NOT NULL,
+    [Text]         NVARCHAR (MAX)   NULL,
+    [StudentFk]    BIGINT           NOT NULL,
+    [CreatedOn]    SMALLDATETIME    NOT NULL,
+    [TeamFk]       BIGINT           NULL,
+    [Views]        BIGINT           DEFAULT (CONVERT([bigint],(0))) NOT NULL,
+    [LastActiveOn] SMALLDATETIME    NOT NULL,
+    CONSTRAINT [PK_Question] PRIMARY KEY CLUSTERED ([Id] ASC),
+    CONSTRAINT [FK_Question_Student_StudentFk] FOREIGN KEY ([StudentFk]) REFERENCES [dbo].[Student] ([Id]),
+    CONSTRAINT [FK_Question_Team_TeamFk] FOREIGN KEY ([TeamFk]) REFERENCES [dbo].[Team] ([Id])
+);
+
+
+GO
+CREATE NONCLUSTERED INDEX [IX_Question_StudentFk]
+    ON [dbo].[Question]([StudentFk] ASC);
+
+
+GO
+CREATE NONCLUSTERED INDEX [IX_Question_TeamFk]
+    ON [dbo].[Question]([TeamFk] ASC);
+
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Question/Question.Debug.Seed.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Question/Question.Debug.Seed.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿BEGIN
-    SET IDENTITY_INSERT [dbo].[Question] ON
-    MERGE [dbo].[Question] AS T
-    USING
-    (
-        SELECT *
-        FROM
-    (
-        VALUES
-            (1, N'aee193c3-9d36-4ed8-81b2-15eb4ff305f1', N'Question 1', 'Question 1 text', 1, GETUTCDATE(), NULL, 0,
-             GETUTCDATE(), 2
-            ),
-            (2, N'bee193c3-9d36-4ed8-81b2-15eb4ff305f1', N'Question 2', 'Question 2 text', 1, GETUTCDATE(), NULL, 0,
-             GETUTCDATE(), 2
-            )
-    ) AS temp ([ID], [Uid], [Title], [Text], [StudentFk], [CreatedOn], [TeamFk], [Views], [LastActiveOn], [AnswersCount])
-    ) AS S
-    ON T.[ID] = S.[ID]
-    WHEN MATCHED THEN
-        UPDATE SET T.[Uid] = S.[Uid],
-                   T.[Title] = S.[Title],
-                   T.[Text] = S.[Text],
-                   T.[StudentFk] = S.[StudentFk],
-                   T.[CreatedOn] = S.[CreatedOn],
-                   T.[TeamFk] = S.[TeamFk],
-                   T.[Views] = S.[Views],
-                   T.[LastActiveOn] = S.[LastActiveOn],
-                   T.[AnswersCount] = S.[AnswersCount]
-    WHEN NOT MATCHED THEN
-        INSERT
-        (
-            [ID],
-            [Uid],
-            [Title],
-            [Text],
-            [StudentFk],
-            [CreatedOn],
-            [TeamFk],
-            [Views],
-            [LastActiveOn],
-            [AnswersCount]
-        )
-        VALUES
-        (S.[ID], S.[Uid], S.[Title], S.[Text], S.[StudentFk], S.[CreatedOn], S.[TeamFk], S.[Views], S.[LastActiveOn], S.[AnswersCount]);
-    SET IDENTITY_INSERT [dbo].[Question] OFF
-END
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Question/Question.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Question/Question.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,27 +1,0 @@
-﻿CREATE TABLE [dbo].[Question] (
-    [Id]           BIGINT           IDENTITY (1, 1) NOT NULL,
-    [Uid]          UNIQUEIDENTIFIER NOT NULL,
-    [Title]        NVARCHAR (500)   NOT NULL,
-    [Text]         NVARCHAR (MAX)   NULL,
-    [StudentFk]    BIGINT           NOT NULL,
-    [CreatedOn]    SMALLDATETIME    NOT NULL,
-    [TeamFk]       BIGINT           NULL,
-    [Views]        BIGINT           DEFAULT (CONVERT([bigint],(0))) NOT NULL,
-    [LastActiveOn] SMALLDATETIME    NOT NULL,
-    [Search]       AS ([Title] + ' ' + [Text]), 
-    [AnswersCount] BIGINT           NOT NULL DEFAULT 0, 
-    CONSTRAINT [PK_Question] PRIMARY KEY CLUSTERED ([Id] ASC),
-    CONSTRAINT [FK_Question_Student_StudentFk] FOREIGN KEY ([StudentFk]) REFERENCES [dbo].[Student] ([Id]),
-    CONSTRAINT [FK_Question_Team_TeamFk] FOREIGN KEY ([TeamFk]) REFERENCES [dbo].[Team] ([Id])
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_Question_StudentFk]
-    ON [dbo].[Question]([StudentFk] ASC);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_Question_TeamFk]
-    ON [dbo].[Question]([TeamFk] ASC);
-
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/QuestionCategory.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/QuestionCategory.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Tables/QuestionCategory.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,15 @@
+﻿CREATE TABLE [dbo].[QuestionCategory] (
+    [Id]         BIGINT           IDENTITY (1, 1) NOT NULL,
+    [Uid]        UNIQUEIDENTIFIER NOT NULL,
+    [QuestionFk] BIGINT           NOT NULL,
+    [CategoryFk] BIGINT           NOT NULL,
+    CONSTRAINT [PK_QuestionCategory] PRIMARY KEY CLUSTERED ([Id] ASC),
+    CONSTRAINT [FK_QuestionCategory_Category_QuestionFk] FOREIGN KEY ([QuestionFk]) REFERENCES [dbo].[Category] ([Id]),
+    CONSTRAINT [FK_QuestionCategory_Question_QuestionFk] FOREIGN KEY ([QuestionFk]) REFERENCES [dbo].[Question] ([Id])
+);
+
+
+GO
+CREATE NONCLUSTERED INDEX [IX_QuestionCategory_QuestionFk]
+    ON [dbo].[QuestionCategory]([QuestionFk] ASC);
+
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/QuestionCategory/QuestionCategory.Debug.Seed.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/QuestionCategory/QuestionCategory.Debug.Seed.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,31 +1,0 @@
-﻿BEGIN
-    SET IDENTITY_INSERT [dbo].[QuestionCategory] ON
-    MERGE [dbo].[QuestionCategory] AS T
-    USING
-    (
-        SELECT *
-        FROM
-    (
-        VALUES
-            (1, N'aee193c3-9d36-4ed8-81b2-15eb4ff305f1', 1, 1),
-            (2, N'bee193c3-9d36-4ed8-81b2-15eb4ff305f1', 1, 2),
-            (3, N'cee193c3-9d36-4ed8-81b2-15eb4ff305f1', 1, 3)
-    ) AS temp ([Id], [Uid], [QuestionFk], [CategoryFk])
-    ) AS S
-    ON T.[ID] = S.[ID]
-    WHEN MATCHED THEN
-        UPDATE SET T.[Uid] = S.[Uid],
-                   T.[QuestionFk] = S.[QuestionFk],
-                   T.[CategoryFk] = S.[CategoryFk]
-    WHEN NOT MATCHED THEN
-        INSERT
-        (
-            [Id],
-            [Uid],
-            [QuestionFk],
-            [CategoryFk]
-        )
-        VALUES
-        (S.[Id], S.[Uid], S.[QuestionFk], S.[CategoryFk]);
-    SET IDENTITY_INSERT [dbo].[QuestionCategory] OFF
-END
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/QuestionCategory/QuestionCategory.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/QuestionCategory/QuestionCategory.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,15 +1,0 @@
-﻿CREATE TABLE [dbo].[QuestionCategory] (
-    [Id]         BIGINT           IDENTITY (1, 1) NOT NULL,
-    [Uid]        UNIQUEIDENTIFIER NOT NULL,
-    [QuestionFk] BIGINT           NOT NULL,
-    [CategoryFk] BIGINT           NOT NULL,
-    CONSTRAINT [PK_QuestionCategory] PRIMARY KEY CLUSTERED ([Id] ASC),
-    CONSTRAINT [FK_QuestionCategory_Category_CategoryFk] FOREIGN KEY ([CategoryFk]) REFERENCES [dbo].[Category] ([Id]),
-    CONSTRAINT [FK_QuestionCategory_Question_QuestionFk] FOREIGN KEY ([QuestionFk]) REFERENCES [dbo].[Question] ([Id])
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_QuestionCategory_QuestionFk]
-    ON [dbo].[QuestionCategory]([QuestionFk] ASC);
-
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Student.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Student.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Student.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,17 @@
+﻿CREATE TABLE [dbo].[Student] (
+    [Id]                BIGINT           IDENTITY (1, 1) NOT NULL,
+    [Uid]               UNIQUEIDENTIFIER NOT NULL,
+    [ApplicationUserFk] BIGINT           NOT NULL,
+    [IndexNumber]       NVARCHAR (1)     NOT NULL,
+    [Reputation]        BIGINT           DEFAULT (CONVERT([bigint],(0))) NOT NULL,
+    [ReportReputation]  BIGINT           DEFAULT (CONVERT([bigint],(0))) NOT NULL,
+    [ImageUrl]          NVARCHAR (1)     NOT NULL,
+    CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ([Id] ASC),
+    CONSTRAINT [FK_Student_AspNetUsers_ApplicationUserFk] FOREIGN KEY ([ApplicationUserFk]) REFERENCES [dbo].[AspNetUsers] ([Id])
+);
+
+
+GO
+CREATE UNIQUE NONCLUSTERED INDEX [IX_Student_ApplicationUserFk]
+    ON [dbo].[Student]([ApplicationUserFk] ASC);
+
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Student/Student.Debug.Seed.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Student/Student.Debug.Seed.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,27 +1,0 @@
-﻿BEGIN
-SET IDENTITY_INSERT [dbo].[Student] ON
-MERGE [dbo].[Student] AS T
-USING
-(
-	SELECT *
-	FROM (
-	VALUES
-		(1, N'aee193c3-9d36-4ed8-81b2-15eb4ff305f1', 1, N'193245', 0, 0, N'https://www.pixsy.com/wp-content/uploads/2021/04/ben-sweet-2LowviVHZ-E-unsplash-1.jpeg')
-		)
-		AS temp ([ID], [Uid], [ApplicationUserFk], [IndexNumber], [Reputation], [ReportReputation], [ImageUrl])
-) AS S
-ON T.[ID] = S.[ID]
-WHEN MATCHED THEN UPDATE SET
-	  T.[Uid]						= S.[Uid],
-	  T.[ApplicationUserFk]			= S.[ApplicationUserFk],
-	  T.[IndexNumber]				= S.[IndexNumber],
-	  T.[Reputation]				= S.[Reputation],
-	  T.[ReportReputation]			= S.[ReportReputation],
-	  T.[ImageUrl]					= S.[ImageUrl]
-WHEN NOT MATCHED THEN
-INSERT
-([ID], [Uid], [ApplicationUserFk], [IndexNumber], [Reputation], [ReportReputation], [ImageUrl])
-VALUES
-(S.[ID], S.[Uid], S.[ApplicationUserFk], S.[IndexNumber], S.[Reputation], S.[ReportReputation], S.[ImageUrl]);
-SET IDENTITY_INSERT [dbo].[Student] OFF
-END
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Student/Student.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Student/Student.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,18 +1,0 @@
-﻿CREATE TABLE [dbo].[Student] (
-    [Id]                BIGINT           IDENTITY (1, 1) NOT NULL,
-    [Uid]               UNIQUEIDENTIFIER NOT NULL,
-    [ApplicationUserFk] BIGINT           NOT NULL,
-    [IndexNumber]       NVARCHAR (50)     NOT NULL,
-    [Reputation]        BIGINT           DEFAULT (CONVERT([bigint],(0))) NOT NULL,
-    [ReportReputation]  BIGINT           DEFAULT (CONVERT([bigint],(0))) NOT NULL,
-    [ImageUrl]          NVARCHAR (1000)     NOT NULL,
-    [LastCheckedNotifications] SMALLDATETIME NOT NULL DEFAULT GETUTCDATE(), 
-    CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ([Id] ASC),
-    CONSTRAINT [FK_Student_AspNetUsers_ApplicationUserFk] FOREIGN KEY ([ApplicationUserFk]) REFERENCES [dbo].[AspNetUsers] ([Id])
-);
-
-
-GO
-CREATE UNIQUE NONCLUSTERED INDEX [IX_Student_ApplicationUserFk]
-    ON [dbo].[Student]([ApplicationUserFk] ASC);
-
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/StudentNotification/StudentNotification.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/StudentNotification/StudentNotification.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,15 +1,0 @@
-﻿CREATE TABLE [dbo].[StudentNotification]
-(
-	[Id]        BIGINT           IDENTITY (1, 1) NOT NULL,
-    [Uid]       UNIQUEIDENTIFIER NOT NULL,
-	[StudentFk] BIGINT           NOT NULL, 
-    [Text]      NVARCHAR(500)    NOT NULL,
-    [QuestionUid] UNIQUEIDENTIFIER NOT NULL, 
-    [CreatedOn] SMALLDATETIME NOT NULL, 
-    CONSTRAINT [PK_StudentNotification] PRIMARY KEY CLUSTERED ([Id] ASC),
-    CONSTRAINT [FK_StudentNotification_Student_StudentFk] FOREIGN KEY ([StudentFk]) REFERENCES [dbo].[Student] ([Id]),
-)
-
-GO
-CREATE NONCLUSTERED INDEX [IX_StudentNotification_StudentFk]
-    ON [dbo].[StudentNotification]([StudentFk] ASC);
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Team.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Team.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Team.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,8 @@
+﻿CREATE TABLE [dbo].[Team] (
+    [Id]          BIGINT           IDENTITY (1, 1) NOT NULL,
+    [Uid]         UNIQUEIDENTIFIER NOT NULL,
+    [Name]        NVARCHAR (1)     NOT NULL,
+    [Description] NVARCHAR (1)     NOT NULL,
+    CONSTRAINT [PK_Team] PRIMARY KEY CLUSTERED ([Id] ASC)
+);
+
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Team/Team.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Team/Team.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-﻿CREATE TABLE [dbo].[Team] (
-    [Id]          BIGINT           IDENTITY (1, 1) NOT NULL,
-    [Uid]         UNIQUEIDENTIFIER NOT NULL,
-    [Name]        NVARCHAR (1)     NOT NULL,
-    [Description] NVARCHAR (1)     NOT NULL,
-    CONSTRAINT [PK_Team] PRIMARY KEY CLUSTERED ([Id] ASC)
-);
-
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Upvote.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Upvote.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Upvote.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,20 @@
+﻿CREATE TABLE [dbo].[Upvote] (
+    [Id]        BIGINT           IDENTITY (1, 1) NOT NULL,
+    [Uid]       UNIQUEIDENTIFIER NOT NULL,
+    [StudentFk] BIGINT           NOT NULL,
+    [AnswerFk]  BIGINT           NOT NULL,
+    CONSTRAINT [PK_Upvote] PRIMARY KEY CLUSTERED ([Id] ASC),
+    CONSTRAINT [FK_Upvote_Answer_AnswerFk] FOREIGN KEY ([AnswerFk]) REFERENCES [dbo].[Answer] ([Id]),
+    CONSTRAINT [FK_Upvote_Student_StudentFk] FOREIGN KEY ([StudentFk]) REFERENCES [dbo].[Student] ([Id])
+);
+
+
+GO
+CREATE NONCLUSTERED INDEX [IX_Upvote_AnswerFk]
+    ON [dbo].[Upvote]([AnswerFk] ASC);
+
+
+GO
+CREATE NONCLUSTERED INDEX [IX_Upvote_StudentFk]
+    ON [dbo].[Upvote]([StudentFk] ASC);
+
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/User/Seed/Users.Debug.Seed.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/User/Seed/Users.Debug.Seed.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Database/dbo/Tables/User/Seed/Users.Debug.Seed.sql	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -7,6 +7,5 @@
 	FROM (
 	VALUES
-		(1, N'stojkovmarko1@gmail.com',  N'STOJKOVMARKO1@GMAIL.COM', 'stojkovmarko1@gmail.com',  N'STOJKOVMARKO1@GMAIL.COM', 1, N'AQAAAAEAACcQAAAAELBRjOGmA/Dh8BPvcPMA1vmk1jjvyDd/9/lO/3shoBt7z9NfiKJR+Ckp/2+6BVpyLw==', N'MMDEZ3RWADCRM4PTTKSEZNQYNH5V7UVA', N'08309369-24a1-470c-9ab1-65a250cafd4e', null, 0, 0, null, 1, 0, 0),
-		(2, N'stojkovmarko1234@gmail.com',  N'STOJKOVMARKO1234@GMAIL.COM', 'stojkovmarko1234@gmail.com',  N'STOJKOVMARKO1234@GMAIL.COM', 1, N'AQAAAAEAACcQAAAAELBRjOGmA/Dh8BPvcPMA1vmk1jjvyDd/9/lO/3shoBt7z9NfiKJR+Ckp/2+6BVpyLw==', N'MMDEZ3RWADCRM4PTTKSEZNQYNH5V7UVA', N'08309369-24a1-470c-9ab1-65a250cafd4e', null, 0, 0, null, 1, 0, 2)
+		(1, N'stojkovmarko1@gmail.com',  N'STOJKOVMARKO1@GMAIL.COM', 'stojkovmarko1@gmail.com',  N'STOJKOVMARKO1@GMAIL.COM', 1, N'AQAAAAEAACcQAAAAELBRjOGmA/Dh8BPvcPMA1vmk1jjvyDd/9/lO/3shoBt7z9NfiKJR+Ckp/2+6BVpyLw==', N'MMDEZ3RWADCRM4PTTKSEZNQYNH5V7UVA', N'08309369-24a1-470c-9ab1-65a250cafd4e', null, 0, 0, null, 1, 0, 0)
 		)
 		AS temp ([ID], [UserName], [NormalizedUserName], [Email], [NormalizedEmail], [EmailConfirmed], [PasswordHash], [SecurityStamp], [ConcurrencyStamp], [PhoneNumber], [PhoneNumberConfirmed], [TwoFactorEnabled], [LockoutEnd], [LockoutEnabled], [AccessFailedCount], [Role])
Index: src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Vote/Vote.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.Database/dbo/Tables/Vote/Vote.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,21 +1,0 @@
-﻿CREATE TABLE [dbo].[Vote] (
-    [Id]        BIGINT           IDENTITY (1, 1) NOT NULL,
-    [Uid]       UNIQUEIDENTIFIER NOT NULL,
-    [StudentFk] BIGINT           NOT NULL,
-    [AnswerFk]  BIGINT           NOT NULL,
-    [VoteType] TINYINT           NOT NULL, 
-    CONSTRAINT [PK_Vote] PRIMARY KEY CLUSTERED ([Id] ASC),
-    CONSTRAINT [FK_Vote_Answer_AnswerFk] FOREIGN KEY ([AnswerFk]) REFERENCES [dbo].[Answer] ([Id]) ON DELETE CASCADE,
-    CONSTRAINT [FK_Vote_Student_StudentFk] FOREIGN KEY ([StudentFk]) REFERENCES [dbo].[Student] ([Id])
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_Vote_AnswerFk]
-    ON [dbo].[Vote]([AnswerFk] ASC);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_Vote_StudentFk]
-    ON [dbo].[Vote]([StudentFk] ASC);
-
Index: src/FinkiChattery/FinkiChattery.Domain/FinkiChattery.Domain.csproj
===================================================================
--- src/FinkiChattery/FinkiChattery.Domain/FinkiChattery.Domain.csproj	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Domain/FinkiChattery.Domain.csproj	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,12 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="FluentValidation" Version="9.5.4" />
+    <PackageReference Include="FluentValidation.AspNetCore" Version="9.5.4" />
+  </ItemGroup>
+
+</Project>
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/FinkiChattery.HangfireDatabase.publish.xml
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/FinkiChattery.HangfireDatabase.publish.xml	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,10 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <IncludeCompositeObjects>True</IncludeCompositeObjects>
-    <TargetDatabaseName>FinkiChatteryHangfire</TargetDatabaseName>
-    <DeployScriptFileName>FinkiChattery.HangfireDatabase.sql</DeployScriptFileName>
-    <ProfileVersionNumber>1</ProfileVersionNumber>
-    <TargetConnectionString>Data Source=.;Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False</TargetConnectionString>
-  </PropertyGroup>
-</Project>
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/FinkiChattery.HangfireDatabase.sqlproj
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/FinkiChattery.HangfireDatabase.sqlproj	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.HangfireDatabase/FinkiChattery.HangfireDatabase.sqlproj	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,3 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
+﻿<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
   <PropertyGroup>
@@ -8,5 +8,5 @@
     <ProjectVersion>4.1</ProjectVersion>
     <ProjectGuid>{c4cb8596-3f3a-4b4e-bec5-0720ff7cd532}</ProjectGuid>
-    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider</DSP>
+    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql130DatabaseSchemaProvider</DSP>
     <OutputType>Database</OutputType>
     <RootPath>
@@ -14,5 +14,5 @@
     <RootNamespace>FinkiChattery.HangfireDatabase</RootNamespace>
     <AssemblyName>FinkiChattery.HangfireDatabase</AssemblyName>
-    <ModelCollation>1033,CI</ModelCollation>
+    <ModelCollation>1033, CI</ModelCollation>
     <DefaultFileStructure>BySchemaAndSchemaType</DefaultFileStructure>
     <DeployToDatabase>True</DeployToDatabase>
@@ -23,6 +23,4 @@
     <IncludeCompositeObjects>True</IncludeCompositeObjects>
     <TargetDatabaseSet>True</TargetDatabaseSet>
-    <DefaultCollation>SQL_Latin1_General_CP1_CI_AS</DefaultCollation>
-    <DefaultFilegroup>PRIMARY</DefaultFilegroup>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
@@ -55,35 +53,8 @@
     <VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
   </PropertyGroup>
-  <Import Condition="'$(NetCoreBuild)' != 'true' AND '$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
-  <Import Condition="'$(NetCoreBuild)' != 'true' AND '$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
+  <Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
+  <Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
   <ItemGroup>
     <Folder Include="Properties" />
-    <Folder Include="HangFire\" />
-    <Folder Include="HangFire\Tables\" />
-    <Folder Include="Security\" />
   </ItemGroup>
-  <ItemGroup>
-    <Build Include="HangFire\Tables\Schema.sql" />
-    <Build Include="HangFire\Tables\Job.sql" />
-    <Build Include="HangFire\Tables\State.sql" />
-    <Build Include="HangFire\Tables\JobParameter.sql" />
-    <Build Include="HangFire\Tables\JobQueue.sql" />
-    <Build Include="HangFire\Tables\Server.sql" />
-    <Build Include="HangFire\Tables\List.sql" />
-    <Build Include="HangFire\Tables\Set.sql" />
-    <Build Include="HangFire\Tables\Counter.sql" />
-    <Build Include="HangFire\Tables\Hash.sql" />
-    <Build Include="HangFire\Tables\AggregatedCounter.sql" />
-    <Build Include="Security\HangFire.sql" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="FinkiChattery.HangfireDatabase.publish.xml" />
-  </ItemGroup>
-  <Import Condition="'$(NetCoreBuild)' == 'true'" Project="$(NETCoreTargetsPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
-  <ItemGroup>
-    <PackageReference Condition="'$(NetCoreBuild)' == 'true'" Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
-  </ItemGroup>
-  <Target Name="BeforeBuild">
-    <Delete Files="$(BaseIntermediateOutputPath)\project.assets.json" />
-  </Target>
 </Project>
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/FinkiChattery.HangfireDatabase.sqlproj_backup
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/FinkiChattery.HangfireDatabase.sqlproj_backup	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,82 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <Name>FinkiChattery.HangfireDatabase</Name>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectVersion>4.1</ProjectVersion>
-    <ProjectGuid>{c4cb8596-3f3a-4b4e-bec5-0720ff7cd532}</ProjectGuid>
-    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider</DSP>
-    <OutputType>Database</OutputType>
-    <RootPath>
-    </RootPath>
-    <RootNamespace>FinkiChattery.HangfireDatabase</RootNamespace>
-    <AssemblyName>FinkiChattery.HangfireDatabase</AssemblyName>
-    <ModelCollation>1033,CI</ModelCollation>
-    <DefaultFileStructure>BySchemaAndSchemaType</DefaultFileStructure>
-    <DeployToDatabase>True</DeployToDatabase>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <TargetLanguage>CS</TargetLanguage>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <SqlServerVerification>False</SqlServerVerification>
-    <IncludeCompositeObjects>True</IncludeCompositeObjects>
-    <TargetDatabaseSet>True</TargetDatabaseSet>
-    <DefaultCollation>SQL_Latin1_General_CP1_CI_AS</DefaultCollation>
-    <DefaultFilegroup>PRIMARY</DefaultFilegroup>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <OutputPath>bin\Release\</OutputPath>
-    <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
-    <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <DefineDebug>false</DefineDebug>
-    <DefineTrace>true</DefineTrace>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <DefineDebug>true</DefineDebug>
-    <DefineTrace>true</DefineTrace>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup>
-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
-    <!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
-    <SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
-    <VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
-  </PropertyGroup>
-  <Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
-  <Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
-  <ItemGroup>
-    <Folder Include="Properties" />
-    <Folder Include="HangFire\" />
-    <Folder Include="HangFire\Tables\" />
-    <Folder Include="Security\" />
-  </ItemGroup>
-  <ItemGroup>
-    <Build Include="HangFire\Tables\Schema.sql" />
-    <Build Include="HangFire\Tables\Job.sql" />
-    <Build Include="HangFire\Tables\State.sql" />
-    <Build Include="HangFire\Tables\JobParameter.sql" />
-    <Build Include="HangFire\Tables\JobQueue.sql" />
-    <Build Include="HangFire\Tables\Server.sql" />
-    <Build Include="HangFire\Tables\List.sql" />
-    <Build Include="HangFire\Tables\Set.sql" />
-    <Build Include="HangFire\Tables\Counter.sql" />
-    <Build Include="HangFire\Tables\Hash.sql" />
-    <Build Include="HangFire\Tables\AggregatedCounter.sql" />
-    <Build Include="Security\HangFire.sql" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="FinkiChattery.HangfireDatabase.publish.xml" />
-  </ItemGroup>
-</Project>
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/AggregatedCounter.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/AggregatedCounter.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,12 +1,0 @@
-﻿CREATE TABLE [HangFire].[AggregatedCounter] (
-    [Key]      NVARCHAR (100) NOT NULL,
-    [Value]    BIGINT         NOT NULL,
-    [ExpireAt] DATETIME       NULL,
-    CONSTRAINT [PK_HangFire_CounterAggregated] PRIMARY KEY CLUSTERED ([Key] ASC)
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_HangFire_AggregatedCounter_ExpireAt]
-    ON [HangFire].[AggregatedCounter]([ExpireAt] ASC) WHERE ([ExpireAt] IS NOT NULL);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Counter.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Counter.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿CREATE TABLE [HangFire].[Counter] (
-    [Key]      NVARCHAR (100) NOT NULL,
-    [Value]    INT            NOT NULL,
-    [ExpireAt] DATETIME       NULL
-);
-
-
-GO
-CREATE CLUSTERED INDEX [CX_HangFire_Counter]
-    ON [HangFire].[Counter]([Key] ASC);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Hash.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Hash.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-﻿CREATE TABLE [HangFire].[Hash] (
-    [Key]      NVARCHAR (100) NOT NULL,
-    [Field]    NVARCHAR (100) NOT NULL,
-    [Value]    NVARCHAR (MAX) NULL,
-    [ExpireAt] DATETIME2 (7)  NULL,
-    CONSTRAINT [PK_HangFire_Hash] PRIMARY KEY CLUSTERED ([Key] ASC, [Field] ASC)
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_HangFire_Hash_ExpireAt]
-    ON [HangFire].[Hash]([ExpireAt] ASC) WHERE ([ExpireAt] IS NOT NULL);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Job.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Job.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,22 +1,0 @@
-﻿CREATE TABLE [HangFire].[Job] (
-    [Id]             BIGINT         IDENTITY (1, 1) NOT NULL,
-    [StateId]        BIGINT         NULL,
-    [StateName]      NVARCHAR (20)  NULL,
-    [InvocationData] NVARCHAR (MAX) NOT NULL,
-    [Arguments]      NVARCHAR (MAX) NOT NULL,
-    [CreatedAt]      DATETIME       NOT NULL,
-    [ExpireAt]       DATETIME       NULL,
-    CONSTRAINT [PK_HangFire_Job] PRIMARY KEY CLUSTERED ([Id] ASC)
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_HangFire_Job_StateName]
-    ON [HangFire].[Job]([StateName] ASC) WHERE ([StateName] IS NOT NULL);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_HangFire_Job_ExpireAt]
-    ON [HangFire].[Job]([ExpireAt] ASC)
-    INCLUDE([StateName]) WHERE ([ExpireAt] IS NOT NULL);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/JobParameter.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/JobParameter.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-﻿CREATE TABLE [HangFire].[JobParameter] (
-    [JobId] BIGINT         NOT NULL,
-    [Name]  NVARCHAR (40)  NOT NULL,
-    [Value] NVARCHAR (MAX) NULL,
-    CONSTRAINT [PK_HangFire_JobParameter] PRIMARY KEY CLUSTERED ([JobId] ASC, [Name] ASC),
-    CONSTRAINT [FK_HangFire_JobParameter_Job] FOREIGN KEY ([JobId]) REFERENCES [HangFire].[Job] ([Id]) ON DELETE CASCADE ON UPDATE CASCADE
-);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/JobQueue.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/JobQueue.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-﻿CREATE TABLE [HangFire].[JobQueue] (
-    [Id]        BIGINT        IDENTITY (1, 1) NOT NULL,
-    [JobId]     BIGINT        NOT NULL,
-    [Queue]     NVARCHAR (50) NOT NULL,
-    [FetchedAt] DATETIME      NULL,
-    CONSTRAINT [PK_HangFire_JobQueue] PRIMARY KEY CLUSTERED ([Queue] ASC, [Id] ASC)
-);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/List.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/List.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-﻿CREATE TABLE [HangFire].[List] (
-    [Id]       BIGINT         IDENTITY (1, 1) NOT NULL,
-    [Key]      NVARCHAR (100) NOT NULL,
-    [Value]    NVARCHAR (MAX) NULL,
-    [ExpireAt] DATETIME       NULL,
-    CONSTRAINT [PK_HangFire_List] PRIMARY KEY CLUSTERED ([Key] ASC, [Id] ASC)
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_HangFire_List_ExpireAt]
-    ON [HangFire].[List]([ExpireAt] ASC) WHERE ([ExpireAt] IS NOT NULL);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Schema.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Schema.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,5 +1,0 @@
-﻿CREATE TABLE [HangFire].[Schema] (
-    [Version] INT NOT NULL,
-    CONSTRAINT [PK_HangFire_Schema] PRIMARY KEY CLUSTERED ([Version] ASC)
-);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Server.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Server.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,12 +1,0 @@
-﻿CREATE TABLE [HangFire].[Server] (
-    [Id]            NVARCHAR (200) NOT NULL,
-    [Data]          NVARCHAR (MAX) NULL,
-    [LastHeartbeat] DATETIME       NOT NULL,
-    CONSTRAINT [PK_HangFire_Server] PRIMARY KEY CLUSTERED ([Id] ASC)
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_HangFire_Server_LastHeartbeat]
-    ON [HangFire].[Server]([LastHeartbeat] ASC);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Set.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/Set.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,18 +1,0 @@
-﻿CREATE TABLE [HangFire].[Set] (
-    [Key]      NVARCHAR (100) NOT NULL,
-    [Score]    FLOAT (53)     NOT NULL,
-    [Value]    NVARCHAR (256) NOT NULL,
-    [ExpireAt] DATETIME       NULL,
-    CONSTRAINT [PK_HangFire_Set] PRIMARY KEY CLUSTERED ([Key] ASC, [Value] ASC)
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_HangFire_Set_Score]
-    ON [HangFire].[Set]([Key] ASC, [Score] ASC);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_HangFire_Set_ExpireAt]
-    ON [HangFire].[Set]([ExpireAt] ASC) WHERE ([ExpireAt] IS NOT NULL);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/State.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/HangFire/Tables/State.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿CREATE TABLE [HangFire].[State] (
-    [Id]        BIGINT         IDENTITY (1, 1) NOT NULL,
-    [JobId]     BIGINT         NOT NULL,
-    [Name]      NVARCHAR (20)  NOT NULL,
-    [Reason]    NVARCHAR (100) NULL,
-    [CreatedAt] DATETIME       NOT NULL,
-    [Data]      NVARCHAR (MAX) NULL,
-    CONSTRAINT [PK_HangFire_State] PRIMARY KEY CLUSTERED ([JobId] ASC, [Id] ASC),
-    CONSTRAINT [FK_HangFire_State_Job] FOREIGN KEY ([JobId]) REFERENCES [HangFire].[Job] ([Id]) ON DELETE CASCADE ON UPDATE CASCADE
-);
-
Index: src/FinkiChattery/FinkiChattery.HangfireDatabase/Security/HangFire.sql
===================================================================
--- src/FinkiChattery/FinkiChattery.HangfireDatabase/Security/HangFire.sql	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,3 +1,0 @@
-﻿CREATE SCHEMA [HangFire]
-    AUTHORIZATION [dbo];
-
Index: src/FinkiChattery/FinkiChattery.Identity/FinkiChattery.Identity.csproj
===================================================================
--- src/FinkiChattery/FinkiChattery.Identity/FinkiChattery.Identity.csproj	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Identity/FinkiChattery.Identity.csproj	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -3,5 +3,4 @@
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
-    <Configurations>Debug;Release;Debug_Docker</Configurations>
   </PropertyGroup>
 
Index: src/FinkiChattery/FinkiChattery.Identity/Properties/launchSettings.json
===================================================================
--- src/FinkiChattery/FinkiChattery.Identity/Properties/launchSettings.json	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Identity/Properties/launchSettings.json	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -9,11 +9,4 @@
   },
   "profiles": {
-    "FinkiChattery.Identity": {
-      "commandName": "IISExpress",
-      "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development"
-      },
-      "applicationUrl": "https://localhost:44301"
-    },
     "SelfHost": {
       "commandName": "IISExpress",
Index: src/FinkiChattery/FinkiChattery.Identity/Startup.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Identity/Startup.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Identity/Startup.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -28,11 +28,6 @@
             services.AddControllersWithViews();
 
-            string connectionString = "DefaultConnection";
-#if DEBUG_DOCKER
-            connectionString = "DefaultConnectionDocker";
-#endif
-
             services.AddDbContextPool<ApplicationDbContext<ApplicationUser>>(options =>
-                options.UseSqlServer(Configuration.GetConnectionString(connectionString)));
+                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
 
             services.AddIdentityServerAndIdentityProvider(AppSettings);
Index: src/FinkiChattery/FinkiChattery.Identity/appsettings.Development.json
===================================================================
--- src/FinkiChattery/FinkiChattery.Identity/appsettings.Development.json	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Identity/appsettings.Development.json	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -10,5 +10,5 @@
 				{
 					"allowedCorsOrigins": [ "http://localhost:4200" ],
-					"redirectUris": [ "http://localhost:4200/auth-callback" ],
+					"redirectUris": [ "http://localhost:4200" ],
 					"postLogoutRedirectUris": [ "http://localhost:4200" ]
 				}
@@ -17,6 +17,5 @@
 	},
 	"ConnectionStrings": {
-		"DefaultConnection": "data source=.;initial catalog=FinkiChattery;integrated security=True;application name=FinkiChattery Base App;Pooling=true;Min Pool Size=5;Max Pool Size=30;",
-		"DefaultConnectionDocker": "Data Source=localhost;Initial Catalog=FinkiChattery;User ID=sa;Password=Asfa+032;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;Pooling=true;Min Pool Size=5;Max Pool Size=30;"
+		"DefaultConnection": "data source=.;initial catalog=FinkiChattery;integrated security=True;application name=FinkiChattery Base App;Pooling=true;Min Pool Size=5;Max Pool Size=30;"
 	}
 }
Index: src/FinkiChattery/FinkiChattery.Persistence/Configurations/AnswerConfig.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Configurations/AnswerConfig.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Configurations/AnswerConfig.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -22,5 +22,4 @@
             builder.Property(x => x.CorrectAnswer).HasColumnName(@"CorrectAnswer").HasColumnType("bit").IsRequired();
             builder.Property(x => x.CreatedOn).HasColumnName(@"CreatedOn").HasColumnType("smalldatetime").IsRequired();
-            builder.Property(x => x.VotesCount).HasColumnName(@"VotesCount").HasColumnType("bigint").IsRequired().HasDefaultValue(0);
 
             builder.HasOne(x => x.Question).WithMany(x => x.Answers).HasForeignKey(x => x.QuestionFk).OnDelete(DeleteBehavior.Restrict);
Index: src/FinkiChattery/FinkiChattery.Persistence/Configurations/AnswerResponseConfig.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Configurations/AnswerResponseConfig.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Configurations/AnswerResponseConfig.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -27,6 +27,6 @@
             builder.Property(x => x.CreatedOn).HasColumnName(@"CreatedOn").HasColumnType("smalldatetime").IsRequired();
 
-            builder.HasOne(x => x.Answer).WithMany(x => x.AnswerResponses).HasForeignKey(x => x.AnswerFk).OnDelete(DeleteBehavior.Cascade);
-            builder.HasOne(x => x.Student).WithMany().HasForeignKey(x => x.StudentFk).OnDelete(DeleteBehavior.Restrict);
+            builder.HasOne(x => x.Answer).WithMany(x => x.AnswerResponses).HasForeignKey(x => x.AnswerFk).OnDelete(DeleteBehavior.Restrict);
+            builder.HasOne(x => x.Student).WithMany().HasForeignKey(x => x.AnswerFk).OnDelete(DeleteBehavior.Restrict);
         }
     }
Index: src/FinkiChattery/FinkiChattery.Persistence/Configurations/QuestionCategoryConfig.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Configurations/QuestionCategoryConfig.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Configurations/QuestionCategoryConfig.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -26,5 +26,5 @@
 
             builder.HasOne(x => x.Question).WithMany(x => x.QuestionCategories).HasForeignKey(x => x.QuestionFk).OnDelete(DeleteBehavior.Restrict);
-            builder.HasOne(x => x.Category).WithMany().HasForeignKey(x => x.CategoryFk).OnDelete(DeleteBehavior.Restrict);
+            builder.HasOne(x => x.Category).WithMany().HasForeignKey(x => x.QuestionFk).OnDelete(DeleteBehavior.Restrict);
         }
     }
Index: src/FinkiChattery/FinkiChattery.Persistence/Configurations/QuestionConfig.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Configurations/QuestionConfig.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Configurations/QuestionConfig.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,5 +1,10 @@
-﻿using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
+﻿using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using FinkiChattery.Persistence.Models;
 
 namespace FinkiChattery.Persistence.Configurations
@@ -18,5 +23,5 @@
 
             builder.Property(x => x.Title).HasColumnName(@"Title").HasColumnType("nvarchar").IsRequired().HasMaxLength(500);
-            builder.Property(x => x.Text).HasColumnName(@"Text").HasColumnType("nvarchar").IsRequired().HasMaxLength(4000);
+            builder.Property(x => x.TeamFk).HasColumnName(@"Team").HasColumnType("nvarchar").IsRequired().HasMaxLength(4000);
             builder.Property(x => x.StudentFk).HasColumnName(@"StudentFk").HasColumnType("bigint").IsRequired();
             builder.Property(x => x.CreatedOn).HasColumnName(@"CreatedOn").HasColumnType("smalldatetime").IsRequired();
@@ -24,6 +29,4 @@
             builder.Property(x => x.Views).HasColumnName(@"Views").HasColumnType("bigint").IsRequired().HasDefaultValue(0);
             builder.Property(x => x.LastActiveOn).HasColumnName(@"LastActiveOn").HasColumnType("smalldatetime").IsRequired();
-            builder.Property(x => x.Search).HasComputedColumnSql(@"Search").HasColumnType("nvarchar").ValueGeneratedOnAddOrUpdate().HasMaxLength(4000).IsRequired();
-            builder.Property(x => x.AnswersCount).HasColumnType(@"AnswersCount").HasColumnType("bigint").IsRequired().HasDefaultValue(0);
 
             builder.HasOne(x => x.Student).WithMany(x => x.Questions).HasForeignKey(x => x.StudentFk).OnDelete(DeleteBehavior.NoAction);
Index: src/FinkiChattery/FinkiChattery.Persistence/Configurations/StudentConfig.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Configurations/StudentConfig.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Configurations/StudentConfig.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,6 +1,10 @@
-﻿using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
+﻿using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore.Metadata.Builders;
 using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using FinkiChattery.Persistence.Models;
 
 namespace FinkiChattery.Persistence.Configurations
@@ -23,5 +27,4 @@
             builder.Property(x => x.ReportReputation).HasColumnName(@"ReportReputation").HasColumnType("bigint").IsRequired().HasDefaultValue(0);
             builder.Property(x => x.ImageUrl).HasColumnName(@"ImageUrl").HasColumnType("nvarchar").IsRequired().HasMaxLength(1000);
-            builder.Property(x => x.LastCheckedNotifications).HasColumnName(@"LastCheckedNotifications").HasColumnType("smalldatetime").IsRequired().HasConversion(v => v, v => DateTime.SpecifyKind(v, DateTimeKind.Utc));
 
             builder.HasOne(x => x.ApplicationUser).WithOne().HasForeignKey<Student>(x => x.ApplicationUserFk).OnDelete(DeleteBehavior.Restrict);
Index: src/FinkiChattery/FinkiChattery.Persistence/Configurations/StudentNotificationConfig.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Configurations/StudentNotificationConfig.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,28 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-using System;
-
-namespace FinkiChattery.Persistence.Configurations
-{
-    public class StudentNotificationConfig : BaseConfig<StudentNotification>
-    {
-        public StudentNotificationConfig(string schema) : base(schema)
-        {
-        }
-
-        public override void Configure(EntityTypeBuilder<StudentNotification> builder)
-        {
-            base.Configure(builder);
-
-            builder.ToTable("StudentNotification", Schema);
-
-            builder.Property(x => x.Text).HasColumnName(@"Text").HasColumnType("nvarchar").IsRequired().HasMaxLength(500);
-            builder.Property(x => x.StudentFk).HasColumnName(@"StudentFk").HasColumnType("bigint").IsRequired();
-            builder.Property(x => x.CreatedOn).HasColumnName(@"CreatedOn").HasColumnType("smalldatetime").IsRequired().HasConversion(v => v, v => DateTime.SpecifyKind(v, DateTimeKind.Utc)); ;
-            builder.Property(x => x.QuestionUid).HasColumnName(@"QuestionUid").HasColumnType("uniqueidentifier").IsRequired();
-
-            builder.HasOne(x => x.Student).WithMany(x => x.StudentNotifications).HasForeignKey(x => x.StudentFk).OnDelete(DeleteBehavior.Restrict);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Configurations/UpvoteConfig.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Configurations/UpvoteConfig.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Persistence/Configurations/UpvoteConfig.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,31 @@
+﻿using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using FinkiChattery.Persistence.Models;
+
+namespace FinkiChattery.Persistence.Configurations
+{
+    public class UpvoteConfig : BaseConfig<Upvote>
+    {
+        public UpvoteConfig(string schema) : base(schema)
+        {
+        }
+
+        public override void Configure(EntityTypeBuilder<Upvote> builder)
+        {
+            base.Configure(builder);
+
+            builder.ToTable("Upvote", Schema);
+
+            builder.Property(x => x.StudentFk).HasColumnName(@"StudentFk").HasColumnType("bigint").IsRequired();
+            builder.Property(x => x.AnswerFk).HasColumnName(@"AnswerFk").HasColumnType("bigint").IsRequired();
+
+            builder.HasOne(x => x.Student).WithMany().HasForeignKey(x => x.StudentFk).OnDelete(DeleteBehavior.Restrict);
+            builder.HasOne(x => x.Answer).WithMany(x => x.Upvotes).HasForeignKey(x => x.AnswerFk).OnDelete(DeleteBehavior.Restrict);
+        }
+    }
+}
Index: src/FinkiChattery/FinkiChattery.Persistence/Configurations/VoteConfig.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Configurations/VoteConfig.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,27 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
-
-namespace FinkiChattery.Persistence.Configurations
-{
-    public class VoteConfig : BaseConfig<Vote>
-    {
-        public VoteConfig(string schema) : base(schema)
-        {
-        }
-
-        public override void Configure(EntityTypeBuilder<Vote> builder)
-        {
-            base.Configure(builder);
-
-            builder.ToTable("Vote", Schema);
-
-            builder.Property(x => x.StudentFk).HasColumnName(@"StudentFk").HasColumnType("bigint").IsRequired();
-            builder.Property(x => x.AnswerFk).HasColumnName(@"AnswerFk").HasColumnType("bigint").IsRequired();
-            builder.Property(x => x.VoteType).HasColumnName(@"VoteType").HasColumnType("tinyint").IsRequired();
-
-            builder.HasOne(x => x.Student).WithMany().HasForeignKey(x => x.StudentFk).OnDelete(DeleteBehavior.Restrict);
-            builder.HasOne(x => x.Answer).WithMany(x => x.Votes).HasForeignKey(x => x.AnswerFk).OnDelete(DeleteBehavior.Cascade);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Context/ApplicationDbContext.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Context/ApplicationDbContext.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Context/ApplicationDbContext.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -23,6 +23,5 @@
         public DbSet<TeacherTeam> TeacherTeams { get; set; }
         public DbSet<Team> Teams { get; set; }
-        public DbSet<Vote> Votes { get; set; }
-        public DbSet<StudentNotification> StudentNotifications { get; set; }
+        public DbSet<Upvote> Upvotes { get; set; }
 
         protected override void OnModelCreating(ModelBuilder builder)
@@ -43,6 +42,5 @@
             builder.ApplyConfiguration(new TeacherTeamConfig(schema));
             builder.ApplyConfiguration(new TeamConfig(schema));
-            builder.ApplyConfiguration(new VoteConfig(schema));
-            builder.ApplyConfiguration(new StudentNotificationConfig(schema));
+            builder.ApplyConfiguration(new UpvoteConfig(schema));
         }
     }
Index: src/FinkiChattery/FinkiChattery.Persistence/FinkiChattery.Persistence.csproj
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/FinkiChattery.Persistence.csproj	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/FinkiChattery.Persistence.csproj	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -3,5 +3,4 @@
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
-    <Configurations>Debug;Release;Debug_Docker</Configurations>
   </PropertyGroup>
 
Index: src/FinkiChattery/FinkiChattery.Persistence/Helpers/Enums/VoteType.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Helpers/Enums/VoteType.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-﻿namespace FinkiChattery.Persistence.Helpers
-{
-    public enum VoteType
-    {
-        Upvote,
-        Downvote
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/Answer.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/Answer.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/Answer.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -6,11 +6,4 @@
     public class Answer : BaseEntity
     {
-        public Answer() : base()
-        {
-            CreatedOn = DateTime.UtcNow;
-            VotesCount = 0;
-            CorrectAnswer = false;
-        }
-
         public string Text { get; set; }
 
@@ -27,9 +20,7 @@
         public DateTime CreatedOn { get; set; }
 
-        public long VotesCount { get; set; }
+        public virtual IEnumerable<Upvote> Upvotes { get; set; }
 
-        public virtual ICollection<Vote> Votes { get; set; }
-
-        public virtual ICollection<AnswerResponse> AnswerResponses { get; set; }
+        public virtual IEnumerable<AnswerResponse> AnswerResponses { get; set; }
 
     }
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/AnswerResponse.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/AnswerResponse.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/AnswerResponse.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,3 +1,7 @@
 ﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
 
 namespace FinkiChattery.Persistence.Models
@@ -5,9 +9,4 @@
     public class AnswerResponse : BaseEntity
     {
-        public AnswerResponse() : base()
-        {
-            CreatedOn = DateTime.UtcNow;
-        }
-
         public string Text { get; set; }
 
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/Base/BaseEntity.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/Base/BaseEntity.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/Base/BaseEntity.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,3 +1,7 @@
 ﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
 
 namespace FinkiChattery.Persistence.Models
@@ -5,9 +9,4 @@
     public class BaseEntity
     {
-        public BaseEntity()
-        {
-            Uid = Guid.NewGuid();
-        }
-
         public long Id { get; set; }
 
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/Category.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/Category.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/Category.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,10 +1,12 @@
-﻿namespace FinkiChattery.Persistence.Models
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FinkiChattery.Persistence.Models
 {
     public class Category : BaseEntity
     {
-        public Category() : base()
-        {
-        }
-
         public string Name { get; set; }
     }
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/Moderator.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/Moderator.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/Moderator.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,3 +1,9 @@
-﻿namespace FinkiChattery.Persistence.Models
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FinkiChattery.Persistence.Models
 {
     public class Moderator : BaseEntity
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/Question.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/Question.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/Question.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,5 +1,4 @@
 ﻿using System;
 using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
 
 namespace FinkiChattery.Persistence.Models
@@ -7,12 +6,4 @@
     public class Question : BaseEntity
     {
-        public Question() : base()
-        {
-            CreatedOn = DateTime.UtcNow;
-            LastActiveOn = DateTime.UtcNow;
-            Answers = new List<Answer>();
-            QuestionCategories = new List<QuestionCategory>();
-        }
-
         public string Title { get; set; }
 
@@ -33,12 +24,9 @@
         public DateTime LastActiveOn { get; set; }
 
-        [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
-        public string Search { get; set; }
+        public virtual IEnumerable<Answer> Answers { get; set; }
 
-        public long AnswersCount { get; set; }
+        public virtual IEnumerable<QuestionCategory> QuestionCategories { get; set; }
 
-        public virtual ICollection<Answer> Answers { get; set; }
-
-        public virtual ICollection<QuestionCategory> QuestionCategories { get; set; }
+        // TODO: Pole po koe ke pravime queries
     }
 }
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/QuestionCategory.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/QuestionCategory.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/QuestionCategory.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -9,8 +9,4 @@
     public class QuestionCategory : BaseEntity
     {
-        public QuestionCategory() : base()
-        {
-        }
-
         public long QuestionFk { get; set; }
 
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/Student.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/Student.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/Student.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,4 +1,7 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
 
 namespace FinkiChattery.Persistence.Models
@@ -6,6 +9,4 @@
     public class Student : BaseEntity
     {
-        public DateTime LastCheckedNotifications { get; set; }
-
         public long ApplicationUserFk { get; set; }
 
@@ -20,11 +21,9 @@
         public string ImageUrl { get; set; }
 
-        public virtual ICollection<Question> Questions { get; set; }
-
-        public virtual ICollection<Answer> Answers { get; set; }
-
-        public virtual ICollection<StudentTeam> StudentTeams { get; set; }
-
-        public virtual ICollection<StudentNotification> StudentNotifications { get; set; }
+        public virtual IEnumerable<Question> Questions { get; set; }
+        
+        public virtual IEnumerable<Answer> Answers { get; set; }
+        
+        public virtual IEnumerable<StudentTeam> StudentTeams { get; set; }
     }
 }
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/StudentNotification.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/StudentNotification.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,22 +1,0 @@
-﻿using System;
-
-namespace FinkiChattery.Persistence.Models
-{
-    public class StudentNotification : BaseEntity
-    {
-        public StudentNotification() : base()
-        {
-            CreatedOn = DateTime.UtcNow;
-        }
-
-        public string Text { get; set; }
-
-        public long StudentFk { get; set; }
-
-        public DateTime CreatedOn { get; set; }
-
-        public Guid QuestionUid { get; set; }
-
-        public Student Student { get; set; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/Teacher.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/Teacher.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/Teacher.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -13,5 +13,5 @@
         public virtual ApplicationUser ApplicationUser { get; set; }
 
-        public virtual ICollection<TeacherTeam> TeacherTeams { get; set; }
+        public virtual IEnumerable<TeacherTeam> TeacherTeams { get; set; }
 
     }
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/Team.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/Team.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/Team.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -1,3 +1,7 @@
-﻿using System.Collections.Generic;
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
 
 namespace FinkiChattery.Persistence.Models
@@ -9,9 +13,9 @@
         public string Description { get; set; }
 
-        public virtual ICollection<Question> Questions { get; set; }
+        public virtual IEnumerable<Question> Questions{ get; set; }
 
-        public virtual ICollection<StudentTeam> TeamStudents { get; set; }
+        public virtual IEnumerable<StudentTeam> TeamStudents { get; set; }
 
-        public virtual ICollection<TeacherTeam> TeamTeachers { get; set; }
+        public virtual IEnumerable<TeacherTeam> TeamTeachers { get; set; }
     }
 }
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/Upvote.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/Upvote.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
+++ src/FinkiChattery/FinkiChattery.Persistence/Models/Upvote.cs	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -0,0 +1,19 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FinkiChattery.Persistence.Models
+{
+    public class Upvote : BaseEntity
+    {
+        public long StudentFk { get; set; }
+
+        public virtual Student Student { get; set; }
+
+        public long AnswerFk { get; set; }
+
+        public virtual Answer Answer { get; set; }
+    }
+}
Index: src/FinkiChattery/FinkiChattery.Persistence/Models/Vote.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Models/Vote.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,21 +1,0 @@
-﻿using FinkiChattery.Persistence.Helpers;
-
-namespace FinkiChattery.Persistence.Models
-{
-    public class Vote : BaseEntity
-    {
-        public Vote() : base()
-        {
-        }
-
-        public long StudentFk { get; set; }
-
-        public virtual Student Student { get; set; }
-
-        public long AnswerFk { get; set; }
-
-        public virtual Answer Answer { get; set; }
-
-        public VoteType VoteType { get; set; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Base/IRepository.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Base/IRepository.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,19 +1,0 @@
-﻿using System;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface IRepository<T> where T : class
-    {
-        IQueryable<T> All();
-
-        Task<T> GetByUidAsync(Guid uid);
-
-        Task<T> GetByIdAsync(long id);
-
-        void Delete(T entity);
-
-        void Add(T entity);
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Base/Repository.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Base/Repository.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
-using System;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public abstract class Repository<T> : IRepository<T> where T : BaseEntity
-    {
-        public Repository(ApplicationDbContext dbContext)
-        {
-            DbContext = dbContext;
-            DbSet = DbContext.Set<T>();
-        }
-
-        protected ApplicationDbContext DbContext { get; }
-        protected DbSet<T> DbSet { get; }
-
-        public IQueryable<T> All()
-        {
-            return DbSet.AsQueryable();
-        }
-
-        public async Task<T> GetByIdAsync(long id)
-        {
-            return await All().FirstOrDefaultAsync(f => f.Id == id);
-        }
-
-        public void Add(T entity)
-        {
-            DbSet.Add(entity);
-        }
-
-        public async Task<T> GetByUidAsync(Guid uid)
-        {
-            return await All().FirstOrDefaultAsync(f => f.Uid == uid);
-        }
-
-        public void Delete(T entity)
-        {
-            DbSet.Remove(entity);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IAnswerRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IAnswerRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface IAnswerRepo : IRepository<Answer>
-    {
-        Task<bool> AnswerInQuestionExists(Guid questionUid, Guid answerUid);
-
-        Task<bool> AnswerIsOwnedByStudent(Guid answerUid, long applicationUserId);
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IAnswerResponseRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IAnswerResponseRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface IAnswerResponseRepo : IRepository<AnswerResponse>
-    {
-        Task<bool> StudentIsOwnerOfAnswerResponse(Guid answerResponseUid, long applicationUserId);
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/ICategoriesRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/ICategoriesRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,18 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface ICategoriesRepo : IRepository<Category>
-    {
-        public Task<bool> CategoriesExist(IEnumerable<Guid> categoriesUids);
-
-        public Task<bool> CategoryWithNameIsUnique(string name);
-
-        public Task<IEnumerable<Category>> GetCategories(IEnumerable<Guid> categoriesUids);
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IModeratorRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IModeratorRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface IModeratorRepo : IRepository<Moderator>
-    {
-        Task<ModeratorSelfDto> GetModeratorSelfDto(long applicationUserId);
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IQuestionRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IQuestionRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,23 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface IQuestionRepo : IRepository<Question>
-    {
-        Task<List<QuestionPreviewDto>> SearchQuestions(string searchText, IEnumerable<Guid> categories);
-
-        Task<QuestionStateDto> GetQuestionState(Guid questionUid);
-
-        Task<List<QuestionPreviewDto>> GetPreviewQuestionsLatest();
-     
-        Task<List<QuestionPreviewDto>> GetPreviewQuestionsPopular();
-
-        Task<bool> QuestionIsOwnedByStudent(Guid questionUid, long applicationUserId);
-
-        Task<Question> GetQuestionWithAnswersAndStudents(Guid questionUid);
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IStudentNotificationRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IStudentNotificationRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface IStudentNotificationRepo : IRepository<StudentNotification>
-    {
-        Task<List<StudentNotification>> GetStudentNotificationsForStudent(long studentFk); 
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IStudentRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IStudentRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,12 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface IStudentRepo : IRepository<Student>
-    {
-        public Task<Student> GetStudent(long applicationUserFk);
-        public Task<StudentSelfDto> GetStudentSelfDto(long applicationUserFk);
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/ITeacherRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/ITeacherRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface ITeacherRepo : IRepository<Teacher>
-    {
-        Task<TeacherSelfDto> GetTeacherSelfDto(long applicationUserId);
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/ITeamRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/ITeamRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface ITeamRepo : IRepository<Team>
-    {
-        public Task<bool> TeamWithUidExists(Guid teamUid);
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IVoteRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/IVoteRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-﻿using FinkiChattery.Persistence.Models;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public interface IVoteRepo : IRepository<Vote>
-    {
-        Task<bool> StudentHasUpvotedAnswer(Guid answerUid, long userId);
-        Task<bool> StudentHasDownvotedAnswer(Guid answerUid, long userId);
-        Task<Vote> GetVoteForAnswerByStudent(Guid answerUid, long userId);
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Moderator/ModeratorSelfDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Moderator/ModeratorSelfDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System;
-
-namespace FinkiChattery.Persistence.Repositories.Contracts
-{
-    public class ModeratorSelfDto
-    {
-        public ModeratorSelfDto(Guid uid, long applicationUserId)
-        {
-            Uid = uid;
-            ApplicationUserId = applicationUserId;
-        }
-
-        public Guid Uid { get; }
-        public long ApplicationUserId { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Question/QuestionPreviewDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Question/QuestionPreviewDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,41 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-
-namespace FinkiChattery.Persistence.Repositories.Contracts
-{
-    public class QuestionPreviewDto
-    {
-        public QuestionPreviewDto(long id, Guid uid, string title, long views, long answersCount, DateTime createdOn, IEnumerable<QuestionPreviewCategoryDto> categories)
-        {
-            Id = id;
-            Uid = uid;
-            Title = title;
-            Views = views;
-            AnswersCount = answersCount;
-            CreatedOn = createdOn;
-            Categories = categories;
-        }
-
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Title { get; }
-        public long Views { get; }
-        public long AnswersCount { get; }
-        public DateTime CreatedOn { get; }
-        public IEnumerable<QuestionPreviewCategoryDto> Categories { get; }
-    }
-
-    public class QuestionPreviewCategoryDto
-    {
-        public QuestionPreviewCategoryDto(long id, Guid uid, string text)
-        {
-            Id = id;
-            Uid = uid;
-            Text = text;
-        }
-
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Text { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Question/QuestionStateDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Question/QuestionStateDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,160 +1,0 @@
-﻿#nullable enable
-
-using System;
-using System.Collections.Generic;
-
-namespace FinkiChattery.Persistence.Repositories.Contracts
-{
-    public class QuestionStateDto
-    {
-        public QuestionStateDto(long id, Guid uid, string title, string text, DateTime createdOn, long views, DateTime lastActiveOn, StudentQuestionStateDto studentDto, IEnumerable<AnswerQuestionStateDto> answersDto, IEnumerable<QuestionCategoryQuestionStateDto> categoriesDto, TeamQuestionStateDto? teamDto)
-        {
-            Id = id;
-            Uid = uid;
-            Title = title;
-            Text = text;
-            CreatedOn = createdOn;
-            Views = views;
-            LastActiveOn = lastActiveOn;
-            StudentDto = studentDto;
-            AnswersDto = answersDto;
-            CategoriesDto = categoriesDto;
-            TeamDto = teamDto;
-        }
-
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Title { get; }
-        public string Text { get; }
-        public DateTime CreatedOn { get; }
-        public long Views { get; }
-        public DateTime LastActiveOn { get; }
-        public StudentQuestionStateDto StudentDto { get; }
-        public IEnumerable<AnswerQuestionStateDto> AnswersDto { get; }
-        public IEnumerable<QuestionCategoryQuestionStateDto> CategoriesDto { get; }
-        public TeamQuestionStateDto? TeamDto { get; }
-    }
-
-    public class StudentQuestionStateDto
-    {
-        public StudentQuestionStateDto(long id, Guid uid, string index, string imageUrl, long reputation)
-        {
-            Id = id;
-            Uid = uid;
-            Index = index;
-            ImageUrl = imageUrl;
-            Reputation = reputation;
-        }
-
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Index { get; }
-        public string ImageUrl { get; }
-        public long Reputation { get; }
-    }
-
-    public class TeamQuestionStateDto
-    {
-        public TeamQuestionStateDto(long id, Guid uid, string name)
-        {
-            Id = id;
-            Uid = uid;
-            Name = name;
-        }
-
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Name { get; }
-    }
-
-    public class QuestionCategoryQuestionStateDto
-    {
-        public QuestionCategoryQuestionStateDto(long id, Guid uid, string name)
-        {
-            Id = id;
-            Uid = uid;
-            Name = name;
-        }
-
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Name { get; }
-    }
-
-    public class AnswerQuestionStateDto
-    {
-        public AnswerQuestionStateDto(long id, Guid uid, string text, bool correctAnswer, DateTime createdOn, long votesCount, AnswerStudentQuestionStateDto studentDto, IEnumerable<AnswerResponseQuestionStateDto> answerResponsesDto)
-        {
-            Id = id;
-            Uid = uid;
-            Text = text;
-            CorrectAnswer = correctAnswer;
-            CreatedOn = createdOn;
-            VotesCount = votesCount;
-            StudentDto = studentDto;
-            AnswerResponsesDto = answerResponsesDto;
-        }
-
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Text { get; }
-        public bool CorrectAnswer { get; }
-        public DateTime CreatedOn { get; }
-        public long VotesCount { get; }
-        public AnswerStudentQuestionStateDto StudentDto { get; }
-        public IEnumerable<AnswerResponseQuestionStateDto> AnswerResponsesDto { get; }
-    }
-
-    public class AnswerStudentQuestionStateDto
-    {
-        public AnswerStudentQuestionStateDto(long id, Guid uid, string index, string imageUrl, long reputation)
-        {
-            Id = id;
-            Uid = uid;
-            Index = index;
-            ImageUrl = imageUrl;
-            Reputation = reputation;
-        }
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Index { get; }
-        public string ImageUrl { get; }
-        public long Reputation { get; }
-    }
-
-    public class AnswerResponseQuestionStateDto
-    {
-        public AnswerResponseQuestionStateDto(long id, Guid uid, string text, DateTime createdOn, AnswerResponseStudentQuestionStateDto studentDto)
-        {
-            Id = id;
-            Uid = uid;
-            Text = text;
-            CreatedOn = createdOn;
-            StudentDto = studentDto;
-        }
-
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Text { get; }
-        public DateTime CreatedOn { get; }
-        public AnswerResponseStudentQuestionStateDto StudentDto { get; }
-    }
-
-    public class AnswerResponseStudentQuestionStateDto
-    {
-        public AnswerResponseStudentQuestionStateDto(long id, Guid uid, string index, string imageUrl, long reputation)
-        {
-            Id = id;
-            Uid = uid;
-            Index = index;
-            ImageUrl = imageUrl;
-            Reputation = reputation;
-        }
-
-        public long Id { get; }
-        public Guid Uid { get; }
-        public string Index { get; }
-        public string ImageUrl { get; }
-        public long Reputation { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Question/StudentQuestionDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Question/StudentQuestionDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System;
-
-namespace FinkiChattery.Persistence.Repositories.Contracts
-{
-    public class StudentQuestionDto
-    {
-        public StudentQuestionDto(Guid questionUid, string title)
-        {
-            QuestionUid = questionUid;
-            Title = title;
-        }
-
-        public Guid QuestionUid { get; }
-        public string Title { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Student/StudentSelfDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Student/StudentSelfDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace FinkiChattery.Persistence.Repositories.Contracts
-{
-    public class StudentSelfDto
-    {
-        public StudentSelfDto(Guid uid, long applicationUserId, string index, long reputation, string imageUrl, DateTime lastCheckedNotifications, IEnumerable<StudentQuestionDto> questions, IEnumerable<StudentTeamDto> teams, IEnumerable<StudentSelfNotificationDto> notifications = null)
-        {
-            Uid = uid;
-            ApplicationUserId = applicationUserId;
-            Index = index;
-            Reputation = reputation;
-            ImageUrl = imageUrl;
-            LastCheckedNotifications = lastCheckedNotifications;
-            Questions = questions;
-            Teams = teams;
-            Notifications = notifications;
-        }
-
-        public Guid Uid { get; }
-        public long ApplicationUserId { get; }
-        public string Index { get; }
-        public long Reputation { get; }
-        public string ImageUrl { get; }
-        public DateTime LastCheckedNotifications { get; }
-        public IEnumerable<StudentQuestionDto> Questions { get; }
-        public IEnumerable<StudentTeamDto> Teams { get; }
-        public IEnumerable<StudentSelfNotificationDto> Notifications { get; set; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Student/StudentSelfNotificationDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Student/StudentSelfNotificationDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-﻿using System;
-
-namespace FinkiChattery.Persistence.Repositories.Contracts
-{
-    public class StudentSelfNotificationDto
-    {
-        public StudentSelfNotificationDto(Guid uid, string text, DateTime createdOn, Guid questionUid)
-        {
-            Uid = uid;
-            Text = text;
-            CreatedOn = createdOn;
-            QuestionUid = questionUid;
-        }
-
-        public Guid Uid { get; }
-        public string Text { get; }
-        public DateTime CreatedOn { get; }
-        public Guid QuestionUid { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Teacher/TeacherSelfDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Teacher/TeacherSelfDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,19 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-
-namespace FinkiChattery.Persistence.Repositories.Contracts
-{
-    public class TeacherSelfDto
-    {
-        public TeacherSelfDto(Guid uid, long applicationUserId, IEnumerable<TeacherTeamDto> teams)
-        {
-            Uid = uid;
-            ApplicationUserId = applicationUserId;
-            Teams = teams;
-        }
-
-        public Guid Uid { get; }
-        public long ApplicationUserId { get; }
-        public IEnumerable<TeacherTeamDto> Teams { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Team/StudentTeamDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Team/StudentTeamDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System;
-
-namespace FinkiChattery.Persistence.Repositories.Contracts
-{
-    public class StudentTeamDto
-    {
-        public StudentTeamDto(Guid teamUid, string name)
-        {
-            TeamUid = teamUid;
-            Name = name;
-        }
-
-        public Guid TeamUid { get; }
-        public string Name { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Team/TeacherTeamDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Contracts/Team/TeacherTeamDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System;
-
-namespace FinkiChattery.Persistence.Repositories.Contracts
-{
-    public class TeacherTeamDto
-    {
-        public TeacherTeamDto(Guid teamUid, string name)
-        {
-            TeamUid = teamUid;
-            Name = name;
-        }
-
-        public Guid TeamUid { get; }
-        public string Name { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/AnswerRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/AnswerRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
-using System;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public class AnswerRepo : Repository<Answer>, IAnswerRepo
-    {
-        public AnswerRepo(ApplicationDbContext dbContext) : base(dbContext)
-        {
-        }
-
-        public async Task<bool> AnswerInQuestionExists(Guid questionUid, Guid answerUid)
-        {
-            return await DbSet
-                .AsNoTracking()
-                .Where(x => x.Question.Uid == questionUid && x.Uid == answerUid)
-                .AnyAsync();
-        }
-
-        public async Task<bool> AnswerIsOwnedByStudent(Guid answerUid, long applicationUserId)
-        {
-            return await DbSet
-                .AsNoTracking()
-                .Where(x => x.Uid == answerUid && x.Student.ApplicationUserFk == applicationUserId)
-                .AnyAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/AnswerResponseRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/AnswerResponseRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,24 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
-using System;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public class AnswerResponseRepo : Repository<AnswerResponse>, IAnswerResponseRepo
-    {
-        public AnswerResponseRepo(ApplicationDbContext dbContext) : base(dbContext)
-        {
-        }
-
-        public async Task<bool> StudentIsOwnerOfAnswerResponse(Guid answerResponseUid, long applicationUserId)
-        {
-            return await DbSet
-                .AsNoTracking()
-                .Where(x => x.Uid == answerResponseUid && x.Student.ApplicationUserFk == applicationUserId)
-                .AnyAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/CategoriesRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/CategoriesRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public class CategoriesRepo : Repository<Category>, ICategoriesRepo
-    {
-        public CategoriesRepo(ApplicationDbContext dbContext) : base(dbContext)
-        {
-        }
-
-        public async Task<bool> CategoriesExist(IEnumerable<Guid> categoriesUids)
-        {
-            return await DbSet.Where(x => categoriesUids.Contains(x.Uid)).CountAsync() == categoriesUids.Count();
-        }
-
-        public async Task<bool> CategoryWithNameIsUnique(string name)
-        {
-            return !(await DbSet.AnyAsync(x => x.Name == name));
-        }
-
-        public async Task<IEnumerable<Category>> GetCategories(IEnumerable<Guid> categoriesUids)
-        {
-            return await DbSet.Where(x => categoriesUids.Contains(x.Uid)).ToListAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/ModeratorRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/ModeratorRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,25 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using Microsoft.EntityFrameworkCore;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public class ModeratorRepo : Repository<Moderator>, IModeratorRepo
-    {
-        public ModeratorRepo(ApplicationDbContext dbContext) : base(dbContext)
-        {
-        }
-
-        public async Task<ModeratorSelfDto> GetModeratorSelfDto(long applicationUserId)
-        {
-            return await DbSet
-                .AsNoTracking()
-                .Where(x => x.ApplicationUserFk == applicationUserId)
-                .Select(x => new ModeratorSelfDto(x.Uid, x.ApplicationUserFk))
-                .FirstOrDefaultAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/QuestionRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/QuestionRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,161 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using Microsoft.Data.SqlClient;
-using Microsoft.EntityFrameworkCore;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Linq.Expressions;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public class QuestionRepo : Repository<Question>, IQuestionRepo
-    {
-        public QuestionRepo(ApplicationDbContext dbContext) : base(dbContext)
-        {
-        }
-
-        public async Task<List<QuestionPreviewDto>> GetPreviewQuestionsLatest()
-        {
-            Expression<Func<Question, DateTime>> orderBy = x => x.CreatedOn;
-            return await GetPreviewQuestions(orderBy);
-        }
-
-        public async Task<List<QuestionPreviewDto>> GetPreviewQuestionsPopular()
-        {
-            Expression<Func<Question, long>> orderBy = x => x.Views;
-            return await GetPreviewQuestions(orderBy);
-        }
-
-        private async Task<List<QuestionPreviewDto>> GetPreviewQuestions<T>(Expression<Func<Question, T>> orderBy)
-        {
-            return await DbSet
-                .AsNoTracking()
-                .Include(x => x.QuestionCategories).ThenInclude(x => x.Category)
-                .OrderByDescending(orderBy)
-                .Select(x => new QuestionPreviewDto(x.Id,
-                                                    x.Uid,
-                                                    x.Title,
-                                                    x.Views,
-                                                    x.AnswersCount,
-                                                    x.CreatedOn,
-                                                    x.QuestionCategories.Select(y => new QuestionPreviewCategoryDto(y.Id, y.Uid, y.Category.Name))))
-                .Skip(0).Take(30)
-                .ToListAsync();
-        }
-
-        public async Task<QuestionStateDto> GetQuestionState(Guid questionUid)
-        {
-            // TODO: MAYBE WRITE THIS QUERY AS SP ??
-            var questionDto = await DbSet
-              .AsNoTracking()
-              .Include(x => x.Student)
-              .Include(x => x.Team)
-              .Include(x => x.Answers).ThenInclude(y => y.Student)
-              .Include(x => x.Answers).ThenInclude(y => y.AnswerResponses).ThenInclude(y => y.Student)
-              .Include(x => x.QuestionCategories).ThenInclude(y => y.Category)
-              .Where(x => x.Uid == questionUid)
-              .Select(x => new QuestionStateDto(
-                                                x.Id,
-                                                x.Uid,
-                                                x.Title,
-                                                x.Text,
-                                                x.CreatedOn,
-                                                x.Views,
-                                                x.LastActiveOn,
-                                                new StudentQuestionStateDto(
-                                                  x.Student.Id,
-                                                  x.Student.Uid,
-                                                  x.Student.IndexNumber,
-                                                  x.Student.ImageUrl,
-                                                  x.Student.Reputation),
-                                                x.Answers.Select(y =>
-                                                new AnswerQuestionStateDto(
-                                                    y.Id,
-                                                    y.Uid,
-                                                    y.Text,
-                                                    y.CorrectAnswer,
-                                                    y.CreatedOn,
-                                                    y.VotesCount,
-                                                    new AnswerStudentQuestionStateDto(
-                                                        y.Student.Id,
-                                                        y.Student.Uid,
-                                                        y.Student.IndexNumber,
-                                                        y.Student.ImageUrl,
-                                                        y.Student.Reputation),
-                                                    y.AnswerResponses.Select(z =>
-                                                    new AnswerResponseQuestionStateDto(
-                                                        z.Id,
-                                                        z.Uid,
-                                                        z.Text,
-                                                        z.CreatedOn,
-                                                        new AnswerResponseStudentQuestionStateDto(
-                                                            z.Student.Id,
-                                                            z.Student.Uid,
-                                                            z.Student.IndexNumber,
-                                                            z.Student.ImageUrl,
-                                                            z.Student.Reputation))))),
-                                                x.QuestionCategories.Select(y =>
-                                                new QuestionCategoryQuestionStateDto(
-                                                    y.Id,
-                                                    y.Uid,
-                                                    y.Category.Name)),
-                                                x.Team == null ? null : new TeamQuestionStateDto(
-                                                    x.Team.Id,
-                                                    x.Team.Uid,
-                                                    x.Team.Name)))
-              .FirstOrDefaultAsync();
-
-            return questionDto;
-        }
-
-        public async Task<List<QuestionPreviewDto>> SearchQuestions(string searchText, IEnumerable<Guid> categories)
-        {
-            var search = Regex.Replace(searchText, "[\\\\/:*?\"<>\\]\\[|&'`~^=%,(){}_\\-]", " ")
-                                     .Split(" ".ToArray(), StringSplitOptions.RemoveEmptyEntries)
-                                     .Select(c => $"\"{c}*\"");
-
-            var searchString = string.Join(" AND ", search);
-
-            var rawQuery = (IQueryable<Question>)
-                DbSet.FromSqlRaw(@"
-                        SELECT [q].[Id], [q].[Uid], [q].[Title], [q].[Views], [q].[AnswersCount], [q].[CreatedOn] 
-                        FROM [dbo].[Question] AS [q]
-                        INNER JOIN CONTAINSTABLE(Question, Search, @searchString, 30) ccontains ON [q].[Id] = ccontains.[KEY]",
-                        new SqlParameter("searchString", searchString))
-                .Include(x => x.QuestionCategories).ThenInclude(x => x.Category);
-
-            if (categories.Any())
-            {
-                rawQuery = rawQuery.Where(x => x.QuestionCategories.Any(y => categories.Contains(y.Category.Uid)));
-            }
-
-            return await rawQuery
-                .Select(x => new QuestionPreviewDto(x.Id,
-                                    x.Uid,
-                                    x.Title,
-                                    x.Views,
-                                    x.AnswersCount,
-                                    x.CreatedOn,
-                                    x.QuestionCategories.Select(y => new QuestionPreviewCategoryDto(y.Id, y.Uid, y.Category.Name))))
-                .ToListAsync();
-        }
-
-        public async Task<bool> QuestionIsOwnedByStudent(Guid questionUid, long applicationUserId)
-        {
-            return await DbSet
-                .Where(x => x.Uid == questionUid && x.Student.ApplicationUserFk == applicationUserId)
-                .AnyAsync();
-        }
-
-        public async Task<Question> GetQuestionWithAnswersAndStudents(Guid questionUid)
-        {
-            return await DbSet
-                .Include(x => x.Answers).ThenInclude(x => x.Student)
-                .FirstOrDefaultAsync(x => x.Uid == questionUid);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/StudentNotificationRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/StudentNotificationRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,21 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public class StudentNotificationRepo : Repository<StudentNotification>, IStudentNotificationRepo
-    {
-        public StudentNotificationRepo(ApplicationDbContext dbContext) : base(dbContext)
-        {
-        }
-
-        public async Task<List<StudentNotification>> GetStudentNotificationsForStudent(long studentFk)
-        {
-            return await DbSet.Where(x => x.StudentFk == studentFk).ToListAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/StudentRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/StudentRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,47 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using Microsoft.EntityFrameworkCore;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public class StudentRepo : Repository<Student>, IStudentRepo
-    {
-        public StudentRepo(ApplicationDbContext dbContext) : base(dbContext)
-        {
-        }
-
-        public async Task<Student> GetStudent(long applicationUserFk)
-        {
-            return await DbSet.FirstOrDefaultAsync(x => x.ApplicationUserFk == applicationUserFk);
-        }
-
-        public async Task<StudentSelfDto> GetStudentSelfDto(long applicationUserFk)
-        {
-            var user = await DbSet
-                .AsNoTracking()
-                .Include(x => x.Questions)
-                .Include(x => x.StudentTeams).ThenInclude(x => x.Team)
-                .Where(x => x.ApplicationUserFk == applicationUserFk)
-                .Select(x => new StudentSelfDto(x.Uid,
-                                                x.ApplicationUserFk,
-                                                x.IndexNumber,
-                                                x.Reputation,
-                                                x.ImageUrl,
-                                                x.LastCheckedNotifications,
-                                                x.Questions.Select(y => new StudentQuestionDto(y.Uid, y.Title)),
-                                                x.StudentTeams.Select(y => new StudentTeamDto(y.Team.Uid, y.Team.Name)),
-                                                null))
-                .FirstOrDefaultAsync();
-
-            user.Notifications = await DbContext.StudentNotifications
-                .Where(x => x.CreatedOn > user.LastCheckedNotifications)
-                .Select(x => new StudentSelfNotificationDto(x.Uid, x.Text, x.CreatedOn, x.QuestionUid))
-                .ToListAsync();
-
-            return user;
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/TeacherRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/TeacherRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,26 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using Microsoft.EntityFrameworkCore;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public class TeacherRepo : Repository<Teacher>, ITeacherRepo
-    {
-        public TeacherRepo(ApplicationDbContext dbContext) : base(dbContext)
-        {
-        }
-
-        public async Task<TeacherSelfDto> GetTeacherSelfDto(long applicationUserId)
-        {
-            return await DbSet
-                .AsNoTracking()
-                .Include(x => x.TeacherTeams).ThenInclude(x => x.Team)
-                .Where(x => x.ApplicationUserFk == applicationUserId)
-                .Select(x => new TeacherSelfDto(x.Uid, x.ApplicationUserFk, x.TeacherTeams.Select(y => new TeacherTeamDto(y.Team.Uid, y.Team.Name))))
-                .FirstOrDefaultAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/TeamRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/TeamRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public class TeamRepo : Repository<Team>, ITeamRepo
-    {
-        public TeamRepo(ApplicationDbContext dbContext) : base(dbContext)
-        {
-        }
-
-        public async Task<bool> TeamWithUidExists(Guid teamUid)
-        {
-            return await DbSet.AnyAsync(x => x.Uid == teamUid);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/VoteRepo.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/Repositories/Implementations/VoteRepo.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,40 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Helpers;
-using FinkiChattery.Persistence.Models;
-using Microsoft.EntityFrameworkCore;
-using System;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.Repositories
-{
-    public class VoteRepo : Repository<Vote>, IVoteRepo
-    {
-        public VoteRepo(ApplicationDbContext dbContext) : base(dbContext)
-        {
-        }
-
-        public async Task<Vote> GetVoteForAnswerByStudent(Guid answerUid, long userId)
-        {
-            return await DbSet
-                .Where(x => x.Answer.Uid == answerUid &&  x.Student.ApplicationUserFk == userId)
-                .FirstOrDefaultAsync();
-        }
-
-        public async Task<bool> StudentHasDownvotedAnswer(Guid answerUid, long userId)
-        {
-            return await DbSet
-                .AsNoTracking()
-                .Where(x => x.Answer.Uid == answerUid && x.VoteType == VoteType.Downvote && x.Student.ApplicationUserFk == userId)
-                .AnyAsync();
-        }
-
-        public async Task<bool> StudentHasUpvotedAnswer(Guid answerUid, long userId)
-        {
-            return await DbSet
-                .AsNoTracking()
-                .Where(x => x.Answer.Uid == answerUid && x.VoteType == VoteType.Upvote && x.Student.ApplicationUserFk == userId)
-                .AnyAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/UnitOfWork/Contracts/IUnitOfWork.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/UnitOfWork/Contracts/IUnitOfWork.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,21 +1,0 @@
-﻿using FinkiChattery.Persistence.Repositories;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.UnitOfWork
-{
-    public interface IUnitOfWork : IDisposable
-    {
-        ICategoriesRepo Categories { get; }
-        IQuestionRepo Questions { get; }
-        IStudentRepo Students { get; }
-        ITeamRepo Teams { get; }
-        IVoteRepo Votes { get; }
-        IAnswerRepo Answers { get; }
-        ITeacherRepo Teachers { get; }
-        IModeratorRepo Moderators { get; }
-        IAnswerResponseRepo AnswerResponses { get; }
-        IStudentNotificationRepo StudentNotifications { get; }
-        Task<int> SaveAsync();
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Persistence/UnitOfWork/Implementations/UnitOfWork.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Persistence/UnitOfWork/Implementations/UnitOfWork.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,186 +1,0 @@
-﻿using FinkiChattery.Persistence.Context;
-using FinkiChattery.Persistence.Repositories;
-using System;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Persistence.UnitOfWork
-{
-    public class UnitOfWork : IUnitOfWork
-    {
-        private QuestionRepo _questions;
-        private CategoriesRepo _categories;
-        private StudentRepo _students;
-        private TeamRepo _teams;
-        private VoteRepo _votes;
-        private AnswerRepo _answers;
-        private ModeratorRepo _moderators;
-        private TeacherRepo _teachers;
-        private AnswerResponseRepo _answerResponses;
-        private StudentNotificationRepo _studentNotifications;
-
-        public UnitOfWork(ApplicationDbContext dbContext)
-        {
-            DbContext = dbContext;
-        }
-
-        public IAnswerResponseRepo AnswerResponses
-        {
-            get
-            {
-                if (_answerResponses == null)
-                {
-                    _answerResponses = new AnswerResponseRepo(DbContext);
-                }
-
-                return _answerResponses;
-            }
-        }
-
-        public IStudentNotificationRepo StudentNotifications
-        {
-            get
-            {
-                if (_studentNotifications == null)
-                {
-                    _studentNotifications = new StudentNotificationRepo(DbContext);
-                }
-
-                return _studentNotifications;
-            }
-        }
-
-        public IModeratorRepo Moderators
-        {
-            get
-            {
-                if (_moderators == null)
-                {
-                    _moderators = new ModeratorRepo(DbContext);
-                }
-
-                return _moderators;
-            }
-        }
-
-        public ITeacherRepo Teachers
-        {
-            get
-            {
-                if (_teachers == null)
-                {
-                    _teachers = new TeacherRepo(DbContext);
-                }
-
-                return _teachers;
-            }
-        }
-
-        public ICategoriesRepo Categories
-        {
-            get
-            {
-                if (_categories == null)
-                {
-                    _categories = new CategoriesRepo(DbContext);
-                }
-
-                return _categories;
-            }
-        }
-
-        public IQuestionRepo Questions
-        {
-            get
-            {
-                if (_questions == null)
-                {
-                    _questions = new QuestionRepo(DbContext);
-                }
-
-                return _questions;
-            }
-        }
-
-        public IStudentRepo Students
-        {
-            get
-            {
-                if (_students == null)
-                {
-                    _students = new StudentRepo(DbContext);
-                }
-
-                return _students;
-            }
-        }
-
-        public ITeamRepo Teams
-        {
-            get
-            {
-                if (_teams == null)
-                {
-                    _teams = new TeamRepo(DbContext);
-                }
-
-                return _teams;
-            }
-        }
-
-        public IVoteRepo Votes
-        {
-            get
-            {
-                if (_votes == null)
-                {
-                    _votes = new VoteRepo(DbContext);
-                }
-
-                return _votes;
-            }
-        }
-
-        public IAnswerRepo Answers
-        {
-            get
-            {
-                if (_answers == null)
-                {
-                    _answers = new AnswerRepo(DbContext);
-                }
-
-                return _answers;
-            }
-        }
-
-        public ApplicationDbContext DbContext { get; }
-
-        public async Task<int> SaveAsync()
-        {
-            return await DbContext.SaveChangesAsync();
-        }
-
-        #region IDisposable Support
-        bool DisposedValue { get; set; }
-
-        protected virtual void Dispose(bool disposing)
-        {
-            if (!DisposedValue)
-            {
-                if (disposing)
-                {
-                    DbContext.Dispose();
-                }
-
-                DisposedValue = true;
-            }
-        }
-
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-        #endregion
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Queries/FinkiChattery.Queries.csproj
===================================================================
--- src/FinkiChattery/FinkiChattery.Queries/FinkiChattery.Queries.csproj	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,13 +1,0 @@
-﻿<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
-    <Configurations>Debug;Release;Debug_Docker</Configurations>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\FinkiChattery.Common\FinkiChattery.Common.csproj" />
-    <ProjectReference Include="..\FinkiChattery.Persistence\FinkiChattery.Persistence.csproj" />
-  </ItemGroup>
-
-</Project>
Index: src/FinkiChattery/FinkiChattery.Queries/Questioning/GetCategories/GetCategoriesQuery.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Queries/Questioning/GetCategories/GetCategoriesQuery.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Models;
-using FinkiChattery.Persistence.UnitOfWork;
-using Microsoft.EntityFrameworkCore;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Queries.Questioning
-{
-    public class GetCategoriesQuery : IQuery<List<Category>>
-    {
-        public GetCategoriesQuery()
-        {
-        }
-    }
-
-    public class GetCategories : IQueryHandler<GetCategoriesQuery, List<Category>>
-    {
-        public GetCategories(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task<List<Category>> Handle(GetCategoriesQuery request, CancellationToken cancellationToken)
-        {
-            return await UnitOfWork.Categories.All().ToListAsync();
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Queries/Questioning/GetPreviewQuestions/GetPreviewQuestionsOrderEnum.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Queries/Questioning/GetPreviewQuestions/GetPreviewQuestionsOrderEnum.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,8 +1,0 @@
-﻿namespace FinkiChattery.Queries.Questioning
-{
-    public enum GetPreviewQuestionsOrderEnum
-    {
-        Latest,
-        Popular
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Queries/Questioning/GetPreviewQuestions/GetPreviewQuestionsQuery.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Queries/Questioning/GetPreviewQuestions/GetPreviewQuestionsQuery.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using FinkiChattery.Persistence.UnitOfWork;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Queries.Questioning
-{
-    public class GetPreviewQuestionsQuery : IQuery<List<QuestionPreviewDto>>
-    {
-        public GetPreviewQuestionsQuery(GetPreviewQuestionsOrderEnum previewQuestionsOrder)
-        {
-            PreviewQuestionsOrder = previewQuestionsOrder;
-        }
-
-        public GetPreviewQuestionsOrderEnum PreviewQuestionsOrder { get; }
-    }
-
-    public class GetPreviewQuestionsHandler : IQueryHandler<GetPreviewQuestionsQuery, List<QuestionPreviewDto>>
-    {
-        public GetPreviewQuestionsHandler(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task<List<QuestionPreviewDto>> Handle(GetPreviewQuestionsQuery request, CancellationToken cancellationToken)
-        {
-            return request.PreviewQuestionsOrder switch
-            {
-                GetPreviewQuestionsOrderEnum.Latest => await UnitOfWork.Questions.GetPreviewQuestionsLatest(),
-                GetPreviewQuestionsOrderEnum.Popular => await UnitOfWork.Questions.GetPreviewQuestionsPopular(),
-                _ => await UnitOfWork.Questions.GetPreviewQuestionsLatest(),
-            };
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Queries/Questioning/GetQuestionState/GetQuestionStateQuery.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Queries/Questioning/GetQuestionState/GetQuestionStateQuery.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,34 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Queries.Questioning
-{
-    public class GetQuestionStateQuery : IQuery<QuestionStateDto>
-    {
-        public GetQuestionStateQuery(Guid questionUid)
-        {
-            QuestionUid = questionUid;
-        }
-
-        public Guid QuestionUid { get; }
-    }
-
-    public class GetQuestionStateQueryHandler : IQueryHandler<GetQuestionStateQuery, QuestionStateDto>
-    {
-        public GetQuestionStateQueryHandler(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task<QuestionStateDto> Handle(GetQuestionStateQuery request, CancellationToken cancellationToken)
-        {
-            return await UnitOfWork.Questions.GetQuestionState(request.QuestionUid);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Queries/Questioning/SearchQuestions/SearchQuestionsQuery.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Queries/Questioning/SearchQuestions/SearchQuestionsQuery.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,54 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Persistence.Repositories.Contracts;
-using FinkiChattery.Persistence.UnitOfWork;
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Queries.Questioning
-{
-    public class SearchQuestionsQuery : IQuery<List<QuestionPreviewDto>>
-    {
-        public SearchQuestionsQuery(string searchText, string categories)
-        {
-            SearchText = searchText;
-            Categories = categories;
-        }
-
-        public string SearchText { get; }
-        public string Categories { get; }
-    }
-
-    public class SearchQuestionsQueryHandler : IQueryHandler<SearchQuestionsQuery, List<QuestionPreviewDto>>
-    {
-        public SearchQuestionsQueryHandler(IUnitOfWork unitOfWork)
-        {
-            UnitOfWork = unitOfWork;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-
-        public async Task<List<QuestionPreviewDto>> Handle(SearchQuestionsQuery request, CancellationToken cancellationToken)
-        {
-            if (string.IsNullOrEmpty(request.SearchText))
-            {
-                return new List<QuestionPreviewDto>();
-            }
-
-            var categories = new List<Guid>();
-            if (!string.IsNullOrEmpty(request.Categories))
-            {
-                foreach (var item in request.Categories.Split(","))
-                {
-                    if (Guid.TryParse(item, out Guid result))
-                    {
-                        categories.Add(result);
-                    }
-                }
-            }
-
-            return await UnitOfWork.Questions.SearchQuestions(request.SearchText, categories);
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Queries/User/GetSelfUser/GetSelfUserQuery.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Queries/User/GetSelfUser/GetSelfUserQuery.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿using FinkiChattery.Common.Mediator.Contracs;
-using FinkiChattery.Common.User;
-using FinkiChattery.Persistence.UnitOfWork;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FinkiChattery.Queries.User
-{
-    public class GetSelfUserQuery : IQuery<SelfUserDto>
-    {
-        public GetSelfUserQuery()
-        {
-        }
-    }
-
-    public class GetSelfUserQueryHandler : IQueryHandler<GetSelfUserQuery, SelfUserDto>
-    {
-        public GetSelfUserQueryHandler(IUnitOfWork unitOfWork, ICurrentUser currentUser)
-        {
-            UnitOfWork = unitOfWork;
-            CurrentUser = currentUser;
-        }
-
-        public IUnitOfWork UnitOfWork { get; }
-        public ICurrentUser CurrentUser { get; }
-
-        public async Task<SelfUserDto> Handle(GetSelfUserQuery request, CancellationToken cancellationToken)
-        {
-            switch (CurrentUser.Role)
-            {
-                case UserRole.Student:
-                    var student = await UnitOfWork.Students.GetStudentSelfDto(CurrentUser.Id);
-                    return new SelfUserDto(student);
-                case UserRole.Teacher:
-                    var teacher = await UnitOfWork.Teachers.GetTeacherSelfDto(CurrentUser.Id);
-                    return new SelfUserDto(null, teacher);
-                case UserRole.Moderator:
-                    var moderator = await UnitOfWork.Moderators.GetModeratorSelfDto(CurrentUser.Id);
-                    return new SelfUserDto(null, null, moderator);
-                case UserRole.Guest:
-                default:
-                    return null;
-            }
-        }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.Queries/User/GetSelfUser/SelfUserDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Queries/User/GetSelfUser/SelfUserDto.cs	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ 	(revision )
@@ -1,20 +1,0 @@
-﻿#nullable enable
-
-using FinkiChattery.Persistence.Repositories.Contracts;
-
-namespace FinkiChattery.Queries.User
-{
-    public class SelfUserDto
-    {
-        public SelfUserDto(StudentSelfDto? studentSelf = null, TeacherSelfDto? teacherSelf = null, ModeratorSelfDto? moderatorSelf = null)
-        {
-            StudentSelf = studentSelf;
-            TeacherSelf = teacherSelf;
-            ModeratorSelf = moderatorSelf;
-        }
-
-        public StudentSelfDto? StudentSelf { get; }
-        public TeacherSelfDto? TeacherSelf { get; }
-        public ModeratorSelfDto? ModeratorSelf { get; }
-    }
-}
Index: src/FinkiChattery/FinkiChattery.sln
===================================================================
--- src/FinkiChattery/FinkiChattery.sln	(revision 6738cc08cebfbe351b250a75ae0aaf1295d2ff22)
+++ src/FinkiChattery/FinkiChattery.sln	(revision e6a6d9ae11319e7403580bef69b0f68e2cddd3ef)
@@ -4,5 +4,5 @@
 VisualStudioVersion = 16.0.31205.134
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FinkiChattery.Api", "FinkiChattery.Api\FinkiChattery.Api.csproj", "{8CD7796E-5DC1-413D-8D04-3C95E89BB214}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FinkiChattery.Api", "FinkiChattery.Api\FinkiChattery.Api.csproj", "{8CD7796E-5DC1-413D-8D04-3C95E89BB214}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FinkiChattery.Identity", "FinkiChattery.Identity\FinkiChattery.Identity.csproj", "{D2EADD50-983E-48EE-8B36-7CF088DCF8AE}"
@@ -10,9 +10,11 @@
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{8F55A0C8-EE31-4075-AF76-555418672650}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FinkiChattery.Persistence", "FinkiChattery.Persistence\FinkiChattery.Persistence.csproj", "{1BA385FA-32FC-4237-85D2-705EEBCAFD06}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FinkiChattery.Persistence", "FinkiChattery.Persistence\FinkiChattery.Persistence.csproj", "{1BA385FA-32FC-4237-85D2-705EEBCAFD06}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FinkiChattery.Contracts", "FinkiChattery.Contracts\FinkiChattery.Contracts.csproj", "{4D2F08BF-44F0-427D-B5B8-079233500FA8}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FinkiChattery.Contracts", "FinkiChattery.Contracts\FinkiChattery.Contracts.csproj", "{4D2F08BF-44F0-427D-B5B8-079233500FA8}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FinkiChattery.Common", "FinkiChattery.Common\FinkiChattery.Common.csproj", "{E69CDEE7-B2F5-42F4-81F0-11DCDC1C8CC9}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FinkiChattery.Common", "FinkiChattery.Common\FinkiChattery.Common.csproj", "{E69CDEE7-B2F5-42F4-81F0-11DCDC1C8CC9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FinkiChattery.Domain", "FinkiChattery.Domain\FinkiChattery.Domain.csproj", "{123D41C6-900B-4DE3-8778-A2C8ECDFBCBD}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Database", "Database", "{499B8F8D-4546-45B5-846A-44BF4CDA6F6E}"
@@ -22,48 +24,34 @@
 Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "FinkiChattery.HangfireDatabase", "FinkiChattery.HangfireDatabase\FinkiChattery.HangfireDatabase.sqlproj", "{C4CB8596-3F3A-4B4E-BEC5-0720FF7CD532}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FinkiChattery.Commands", "FinkiChattery.Commands\FinkiChattery.Commands.csproj", "{7AD9C86F-46FF-442A-B134-3CE2E82CE0D0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FinkiChattery.Queries", "FinkiChattery.Queries\FinkiChattery.Queries.csproj", "{D19820A3-E6E6-4B1C-927A-C8B8B4B16D25}"
-EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug_Docker|Any CPU = Debug_Docker|Any CPU
 		Debug|Any CPU = Debug|Any CPU
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{8CD7796E-5DC1-413D-8D04-3C95E89BB214}.Debug_Docker|Any CPU.ActiveCfg = Debug_Docker|Any CPU
-		{8CD7796E-5DC1-413D-8D04-3C95E89BB214}.Debug_Docker|Any CPU.Build.0 = Debug_Docker|Any CPU
 		{8CD7796E-5DC1-413D-8D04-3C95E89BB214}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{8CD7796E-5DC1-413D-8D04-3C95E89BB214}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{8CD7796E-5DC1-413D-8D04-3C95E89BB214}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{8CD7796E-5DC1-413D-8D04-3C95E89BB214}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D2EADD50-983E-48EE-8B36-7CF088DCF8AE}.Debug_Docker|Any CPU.ActiveCfg = Debug_Docker|Any CPU
-		{D2EADD50-983E-48EE-8B36-7CF088DCF8AE}.Debug_Docker|Any CPU.Build.0 = Debug_Docker|Any CPU
 		{D2EADD50-983E-48EE-8B36-7CF088DCF8AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{D2EADD50-983E-48EE-8B36-7CF088DCF8AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{D2EADD50-983E-48EE-8B36-7CF088DCF8AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D2EADD50-983E-48EE-8B36-7CF088DCF8AE}.Release|Any CPU.Build.0 = Release|Any CPU
-		{1BA385FA-32FC-4237-85D2-705EEBCAFD06}.Debug_Docker|Any CPU.ActiveCfg = Debug_Docker|Any CPU
-		{1BA385FA-32FC-4237-85D2-705EEBCAFD06}.Debug_Docker|Any CPU.Build.0 = Debug_Docker|Any CPU
 		{1BA385FA-32FC-4237-85D2-705EEBCAFD06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{1BA385FA-32FC-4237-85D2-705EEBCAFD06}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{1BA385FA-32FC-4237-85D2-705EEBCAFD06}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1BA385FA-32FC-4237-85D2-705EEBCAFD06}.Release|Any CPU.Build.0 = Release|Any CPU
-		{4D2F08BF-44F0-427D-B5B8-079233500FA8}.Debug_Docker|Any CPU.ActiveCfg = Debug_Docker|Any CPU
-		{4D2F08BF-44F0-427D-B5B8-079233500FA8}.Debug_Docker|Any CPU.Build.0 = Debug_Docker|Any CPU
 		{4D2F08BF-44F0-427D-B5B8-079233500FA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{4D2F08BF-44F0-427D-B5B8-079233500FA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{4D2F08BF-44F0-427D-B5B8-079233500FA8}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{4D2F08BF-44F0-427D-B5B8-079233500FA8}.Release|Any CPU.Build.0 = Release|Any CPU
-		{E69CDEE7-B2F5-42F4-81F0-11DCDC1C8CC9}.Debug_Docker|Any CPU.ActiveCfg = Debug_Docker|Any CPU
-		{E69CDEE7-B2F5-42F4-81F0-11DCDC1C8CC9}.Debug_Docker|Any CPU.Build.0 = Debug_Docker|Any CPU
 		{E69CDEE7-B2F5-42F4-81F0-11DCDC1C8CC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{E69CDEE7-B2F5-42F4-81F0-11DCDC1C8CC9}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{E69CDEE7-B2F5-42F4-81F0-11DCDC1C8CC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E69CDEE7-B2F5-42F4-81F0-11DCDC1C8CC9}.Release|Any CPU.Build.0 = Release|Any CPU
-		{5E1219F5-FC7D-4138-811D-26934E946D30}.Debug_Docker|Any CPU.ActiveCfg = Debug_Docker|Any CPU
-		{5E1219F5-FC7D-4138-811D-26934E946D30}.Debug_Docker|Any CPU.Build.0 = Debug_Docker|Any CPU
-		{5E1219F5-FC7D-4138-811D-26934E946D30}.Debug_Docker|Any CPU.Deploy.0 = Debug_Docker|Any CPU
+		{123D41C6-900B-4DE3-8778-A2C8ECDFBCBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{123D41C6-900B-4DE3-8778-A2C8ECDFBCBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{123D41C6-900B-4DE3-8778-A2C8ECDFBCBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{123D41C6-900B-4DE3-8778-A2C8ECDFBCBD}.Release|Any CPU.Build.0 = Release|Any CPU
 		{5E1219F5-FC7D-4138-811D-26934E946D30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{5E1219F5-FC7D-4138-811D-26934E946D30}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -72,7 +60,4 @@
 		{5E1219F5-FC7D-4138-811D-26934E946D30}.Release|Any CPU.Build.0 = Release|Any CPU
 		{5E1219F5-FC7D-4138-811D-26934E946D30}.Release|Any CPU.Deploy.0 = Release|Any CPU
-		{C4CB8596-3F3A-4B4E-BEC5-0720FF7CD532}.Debug_Docker|Any CPU.ActiveCfg = Debug_Docker|Any CPU
-		{C4CB8596-3F3A-4B4E-BEC5-0720FF7CD532}.Debug_Docker|Any CPU.Build.0 = Debug_Docker|Any CPU
-		{C4CB8596-3F3A-4B4E-BEC5-0720FF7CD532}.Debug_Docker|Any CPU.Deploy.0 = Debug_Docker|Any CPU
 		{C4CB8596-3F3A-4B4E-BEC5-0720FF7CD532}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C4CB8596-3F3A-4B4E-BEC5-0720FF7CD532}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -81,16 +66,4 @@
 		{C4CB8596-3F3A-4B4E-BEC5-0720FF7CD532}.Release|Any CPU.Build.0 = Release|Any CPU
 		{C4CB8596-3F3A-4B4E-BEC5-0720FF7CD532}.Release|Any CPU.Deploy.0 = Release|Any CPU
-		{7AD9C86F-46FF-442A-B134-3CE2E82CE0D0}.Debug_Docker|Any CPU.ActiveCfg = Debug_Docker|Any CPU
-		{7AD9C86F-46FF-442A-B134-3CE2E82CE0D0}.Debug_Docker|Any CPU.Build.0 = Debug_Docker|Any CPU
-		{7AD9C86F-46FF-442A-B134-3CE2E82CE0D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7AD9C86F-46FF-442A-B134-3CE2E82CE0D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7AD9C86F-46FF-442A-B134-3CE2E82CE0D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{7AD9C86F-46FF-442A-B134-3CE2E82CE0D0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D19820A3-E6E6-4B1C-927A-C8B8B4B16D25}.Debug_Docker|Any CPU.ActiveCfg = Debug_Docker|Any CPU
-		{D19820A3-E6E6-4B1C-927A-C8B8B4B16D25}.Debug_Docker|Any CPU.Build.0 = Debug_Docker|Any CPU
-		{D19820A3-E6E6-4B1C-927A-C8B8B4B16D25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D19820A3-E6E6-4B1C-927A-C8B8B4B16D25}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D19820A3-E6E6-4B1C-927A-C8B8B4B16D25}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D19820A3-E6E6-4B1C-927A-C8B8B4B16D25}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
@@ -101,8 +74,7 @@
 		{4D2F08BF-44F0-427D-B5B8-079233500FA8} = {8F55A0C8-EE31-4075-AF76-555418672650}
 		{E69CDEE7-B2F5-42F4-81F0-11DCDC1C8CC9} = {8F55A0C8-EE31-4075-AF76-555418672650}
+		{123D41C6-900B-4DE3-8778-A2C8ECDFBCBD} = {8F55A0C8-EE31-4075-AF76-555418672650}
 		{5E1219F5-FC7D-4138-811D-26934E946D30} = {499B8F8D-4546-45B5-846A-44BF4CDA6F6E}
 		{C4CB8596-3F3A-4B4E-BEC5-0720FF7CD532} = {499B8F8D-4546-45B5-846A-44BF4CDA6F6E}
-		{7AD9C86F-46FF-442A-B134-3CE2E82CE0D0} = {8F55A0C8-EE31-4075-AF76-555418672650}
-		{D19820A3-E6E6-4B1C-927A-C8B8B4B16D25} = {8F55A0C8-EE31-4075-AF76-555418672650}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
