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 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-facade.service.ts	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -14,4 +14,5 @@
 import { AuthService } from '../services';
 import {
+  AnswerQuestion,
   EffectStartedWorking,
   GetPreviewQuestionsLatest,
@@ -99,4 +100,8 @@
   }
 
+  public answerQuestion(questionUid: string, text: string): void {
+    this.dispatchEffect(new AnswerQuestion(questionUid, text));
+  }
+
   private fetchPreviewQuestionsLatest(): void {
     this.dispatchEffect(new GetPreviewQuestionsLatest());
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 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-request.models.ts	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -8,2 +8,6 @@
   constructor(public text: string) {}
 }
+
+export class AnswerQuestionRequest {
+  constructor(public text: string) {}
+}
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 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.actions.ts	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -3,4 +3,5 @@
 
 import {
+  AnswerQuestionStateViewModel,
   AnswerResponseQuestionStateViewModel,
   PreviewQuestionViewModel,
@@ -26,7 +27,21 @@
   VoteAnswer = '[Question] Vote answer',
   VoteAnswerSuccess = '[Question] Vote answer Success',
+  AnswerQuestion = '[Question] AnswerQuestion',
+  AnswerQuestionSuccess = '[Question] AnswerQuestion Success',
   EffectStartedWorking = '[Question] Effect Started Working',
   EffectFinishedWorking = '[Question] Effect Finished Working',
   EffectFinishedWorkingError = '[Question] Effect Finished Working error'
+}
+
+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) {}
 }
 
@@ -141,4 +156,5 @@
   | SetCorrectAnswerSuccess
   | RespondToAnswerSuccess
+  | AnswerQuestionSuccess
   | EffectStartedWorking
   | EffectFinishedWorking
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 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.effects.ts	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -8,6 +8,7 @@
 import { NotificationService } from '../../services/notification.service';
 import { QuestionFacadeService } from '../question-facade.service';
-import { RespondToAnswerRequest, VoteAnswerRequest } from './question-state-request.models';
+import { AnswerQuestionRequest, RespondToAnswerRequest, VoteAnswerRequest } from './question-state-request.models';
 import {
+  AnswerQuestionStateResponse,
   AnswerResponseQuestionStateResponse,
   PreviewQuestionResponse,
@@ -16,4 +17,6 @@
 } from './question-state-response.models';
 import {
+  AnswerQuestion,
+  AnswerQuestionSuccess,
   EffectFinishedWorking,
   EffectFinishedWorkingError,
@@ -165,3 +168,21 @@
     );
   });
+
+  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)])
+          );
+      })
+    );
+  });
 }
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 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.mapper.ts	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -15,4 +15,5 @@
 import { TranslateFromJsonService } from 'src/app/shared-app/services';
 import {
+  AnswerQuestionStateResponse,
   AnswerResponseQuestionStateResponse,
   PreviewQuestionResponse,
@@ -29,37 +30,5 @@
 
     if (questionStateResponse.answersResponse.length > 0) {
-      answers = questionStateResponse.answersResponse.map((x) => {
-        let answerResponses: AnswerResponseQuestionStateViewModel[] = [];
-
-        if (x.answerResponsesResponse.length > 0) {
-          answerResponses = x.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(
-          x.studentResponse.uid,
-          x.studentResponse.index,
-          x.studentResponse.imageUrl,
-          x.studentResponse.reputation
-        );
-
-        return new AnswerQuestionStateViewModel(
-          x.uid,
-          x.text,
-          x.correctAnswer,
-          moment(x.createdOn),
-          x.votesCount,
-          answerStudent,
-          answerResponses
-        );
-      });
+      answers = questionStateResponse.answersResponse.map((x) => QuestionMapper.ToAnswerQuestionStateViewModel(x));
     }
 
@@ -136,3 +105,37 @@
     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 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.reducers.ts	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -114,4 +114,19 @@
       };
     }
+    case QuestionActionTypes.AnswerQuestionSuccess: {
+      if (state.question) {
+        return {
+          ...state,
+          question: {
+            ...state.question,
+            answers: [...state.question.answers, action.payload]
+          }
+        };
+      }
+
+      return {
+        ...state
+      };
+    }
     case QuestionActionTypes.EffectStartedWorking: {
       return {
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 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/components.ts	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -5,4 +5,5 @@
 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 { PreviewQuestionDisplayComponent } from './question/preview-question-display/preview-question-display.component';
@@ -26,4 +27,5 @@
   PreviewQuestionFullComponent,
   TextEditorComponent,
-  RespondToAnswerDialogComponent
+  RespondToAnswerDialogComponent,
+  AnswerQuestionComponent
 ];
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 74ad056f091c70ce137fdc5adf1a93be84a6621f)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/answer-question/answer-question.component.html	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -0,0 +1,13 @@
+<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 74ad056f091c70ce137fdc5adf1a93be84a6621f)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/answer-question/answer-question.component.spec.ts	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -0,0 +1,25 @@
+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 74ad056f091c70ce137fdc5adf1a93be84a6621f)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/answer-question/answer-question.component.ts	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -0,0 +1,42 @@
+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/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 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-full/preview-question-full.component.html	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -40,4 +40,7 @@
   </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>
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 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/preview-question-full/preview-question-full.component.ts	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -14,3 +14,7 @@
 
   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 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.html	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -59,3 +59,4 @@
     </mat-card>
   </ng-container>
+  <app-answer-question></app-answer-question>
 </div>
Index: src/Clients/Angular/finki-chattery/src/assets/translations/en.json
===================================================================
--- src/Clients/Angular/finki-chattery/src/assets/translations/en.json	(revision 7e7cc4cb8a3a1d651c61339329051629864df016)
+++ src/Clients/Angular/finki-chattery/src/assets/translations/en.json	(revision 74ad056f091c70ce137fdc5adf1a93be84a6621f)
@@ -63,4 +63,9 @@
   "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",
+  "StudentDoesNotOwnQuestion": "You do not own this question",
   "AnswerAlreadyUpvoted": "You have already upvoted this answer",
   "AnswerAlreadyDownvoted": "You have already downvoted this answer",
