Skip to content
Snippets Groups Projects
Commit 18aa2bbc authored by Alexandre Vanini's avatar Alexandre Vanini
Browse files

[ANGULAR + JAVALIN]

Ajout de route pour la database
création de programme + ajout de kata totalement ok
j'ai remplacé le jquery par le clienthttp de angular
parent 8d7e6292
Branches
Tags
No related merge requests found
Showing
with 125 additions and 143 deletions
......@@ -14,7 +14,7 @@ const routerOptions: ExtraOptions = {
const routes: Routes = [
{path: 'program_test', component: ProgramDisplayerComponent},
{path: 'kata-displayer/:id/:title/:language/:sensei', component: KataDisplayerComponent},
{path: 'kata/:id', component: KataComponent},
{path: 'kata/:prgtitle/:sensei/:prid/:id', component: KataComponent},
{path: 'program_create', component: ProgramCreateComponent},
{path: 'kata_create/:id/:language', component: KataCreateComponent},
];
......
......@@ -17,6 +17,7 @@ import {AceEditorModule} from 'ng2-ace-editor';
import { KataCreateComponent } from './kata-create/kata-create.component';
import { ProgramCreateComponent } from './program-create/program-create.component';
import {FormsModule} from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
@NgModule({
......@@ -44,7 +45,8 @@ import {FormsModule} from '@angular/forms';
AppRoutingModule,
RouterModule,
AceEditorModule,
FormsModule
FormsModule,
HttpClientModule
],
providers: [],
bootstrap: [AppComponent]
......
import {Injectable} from '@angular/core';
import * as $ from 'jquery';
import {HttpClient} from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class CompilationService {
compilationServer(obj: string): string {
let response = '';
$.ajax({
url: 'http://localhost:7000/run/',
type: 'POST',
async: false,
data: obj,
contentType: 'application/json',
success(data) {
response = data;
compilationServer(obj: string) {
return this.http.post('http://localhost:7000/run/', obj);
}
});
return response;
}
constructor() {
constructor(private http: HttpClient) {
}
}
import {Injectable} from '@angular/core';
import * as $ from 'jquery';
import {HttpClient, HttpHeaders} from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class CreateKataService {
publish(obj: string): void {
$.ajax({
url: 'http://localhost:7000/kata/create',
type: 'POST',
async: false,
data: obj,
contentType: 'application/json'
});
export class CreateKataService {
publish(obj: string) {
return this.http.post('http://localhost:7000/kata/create', obj);
}
constructor() {
constructor(private http: HttpClient) {
}
}
import {Injectable} from '@angular/core';
import * as $ from 'jquery';
import {HttpClient} from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class CreateProgramService {
createProgram(obj: string): string {
let response = '';
$.ajax({
url: 'http://localhost:7000/program/create',
type: 'POST',
async: false,
data: obj,
contentType: 'application/json',
success(data) {
response = data;
}
export class CreateProgramService {
});
return response;
createProgram(obj: string) {
return this.http.post('http://localhost:7000/program/create', obj);
}
constructor() {
constructor(private http: HttpClient) {
}
}
import {Injectable} from '@angular/core';
import {KataShowCase} from './kata-displayer/kataShowCase';
import {KATAS} from './kata-displayer/kataShowCaseMock';
import * as $ from 'jquery';
import {HttpClient} from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class FetchKataShowCaseService {
constructor() { }
getPrograms(program: number): KataShowCase[] {
return KATAS.filter(x => x.idProgram === program);
constructor(private http: HttpClient) {
}
getKatasDetails(program: number) {
return this.http.get('http://localhost:7000/program/getkatas/details/' + program + '');
}
}
import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';
import {Kata} from './kata/kata';
import {KATAS} from './kata/kataMock';
@Injectable({
providedIn: 'root'
})
export class FetchKataService {
getKata(kataId: number): Kata[] {
return KATAS;
getKata(programID: number, kataID: number) {
return this.http.get('http://localhost:7000/program/getkata/' + programID + '/' + kataID + '');
}
constructor() {
constructor(private http: HttpClient) {
}
}
import {Injectable} from '@angular/core';
import {Program} from './program-displayer/program';
import {PROGRAMS} from './program-displayer/programMock';
import * as $ from 'jquery';
import {HttpClient} from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class FetchProgramService {
getPrograms(): Program[] {
let response = '';
$.ajax({
url: 'http://localhost:7000/program/getall',
type: 'get',
async: false,
success(data) {
response = data;
getPrograms() {
return this.http.get('http://localhost:7000/program/getdetails');
}
});
const obj: Program[] = response as Program;
return obj;
}
constructor() {
constructor(private http: HttpClient) {
}
}
......@@ -5,7 +5,6 @@ import {ActivatedRoute, Router} from '@angular/router';
import {Location} from '@angular/common';
import {CreateKataService} from '../create-kata.service';
import {CompilationService} from '../compilation.service';
import * as $ from 'jquery';
@Component({
selector: 'app-kata-create',
......@@ -64,28 +63,34 @@ export class KataCreateComponent implements OnInit {
}
publish(): void {
this.kateCreateService.publish(JSON.stringify({
id: +new Date(),
title: this.title,
language: this.language,
canva: this.canva,
cassert: this.assert,
solution: this.solution,
rules: this.rules,
keepAssert: this.keepAssertForKata,
nbAttempt: this.numberOfAttempt,
programID: this.programId
}));
programID: this.programId,
difficulty: 'Ceinture blanche'
})).subscribe();
this.router.navigate(['/kata-displayer/' + this.programId + '']);
}
try(): void {
const response = $.parseJSON(this.compilationService.compilationServer(JSON.stringify({
let response;
this.compilationService.compilationServer(JSON.stringify({
language: this.language,
stream: this.solution,
assert: this.assert
})));
})).subscribe((data: string) => {
console.log(data);
response = data;
if (response.exit === 0) {
this.status = 0;
this.result = response.output + '\nTests passed';
......@@ -95,6 +100,7 @@ export class KataCreateComponent implements OnInit {
}
this.result += '\nExecuted in : ' + response.time + 'ms';
});
}
ngOnInit() {
......
<div class="container">
<div class="container" *ngIf="katas">
<span class="title">{{programTitle}}
<br>
<span class="subtitle">{{programSensei}} <span class="language"> {{programLanguage}}</span>
......@@ -11,13 +11,14 @@
<div class="p-2">
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title"><a class="title" routerLink="/kata/{{kata.id}}">{{kata.title}}</a></h5>
<h5 class="card-title"><a class="title"
routerLink="/kata/{{programTitle}}/{{programSensei}}/{{idProgram}}/{{kata.id}}">{{kata.title}}</a></h5>
<br/>
<h6 class="card-subtitle mb-2 text-muted">{{kata.difficulty}} </h6>
<span style="float: right;">{{kata.status}}</span>
<br/>
<br/>
<p class="card-text">{{kata.description}}</p>
<!--<p class="card-text">{{kata.description}}</p>-->
</div>
</div>
</div>
......
......@@ -16,6 +16,7 @@ export class KataDisplayerComponent implements OnInit {
programTitle: string;
programLanguage: string;
programSensei: string;
constructor(
private route: ActivatedRoute,
private location: Location,
......@@ -28,7 +29,7 @@ export class KataDisplayerComponent implements OnInit {
this.programSensei = this.route.snapshot.paramMap.get('sensei');
this.programLanguage = this.route.snapshot.paramMap.get('language');
this.programTitle = this.route.snapshot.paramMap.get('title');
this.katas = this.fetchKataShowCaseService.getPrograms(this.idProgram);
this.fetchKataShowCaseService.getKatasDetails(this.idProgram).subscribe((data: KataShowCase[]) => this.katas = data);
}
ngOnInit() {
......
export class KataShowCase {
id: number;
export interface KataShowCase {
title: string;
difficulty: string;
idProgram: number;
description: string;
id: string;
status: string;
}
......
import {KataShowCase} from './kataShowCase';
/*import {KataShowCase} from './kataShowCase';
export const KATAS: KataShowCase[] = [
{
......@@ -12,3 +12,4 @@ export const KATAS: KataShowCase[] = [
{id: 1, title: 'Fopen', difficulty: 'Ceinture Jaune', idProgram: 1, description: 'TOFILL', status: 'FAILED'},
{id: 2, title: 'Fwrite', difficulty: 'Ceinture Verte', idProgram: 1, description: 'TOFILL', status: 'RESOLVED'}
];
*/
<div class="d-flex justify-content-center" style="margin-top:2%">
<div *ngIf="kata" class="d-flex justify-content-center" style="margin-top:2%">
<div class="d-flex flex-column">
<div class="p-2 title">{{kata.title}} <a routerLink="/kata-displayer/0/{{kata.title}}/{{kata.language}}/{{kata.sensei}}">- {{kata.programTitle}}</a>
<br><span class="subtitle">{{kata.sensei}} <span class="language"> {{kata.language}}</span></span></div>
<div class="p-2 title">{{kata.title}} <a routerLink="/kata-displayer/{{programID}}/{{kata.title}}/{{kata.language}}/{{programSensei}}">- {{programTitle}}</a>
<br><span class="subtitle">{{programSensei}} <span class="language"> {{kata.language}}</span></span></div>
<div class="p-2 "><textarea disabled style="text-align: justify">{{kata.rules}}</textarea>
<app-terminal-code style="margin-left: 20px;" [code]="kata.canva" [type]="kata.language" (new)="OnNewEvent($event)"></app-terminal-code>
</div>
<div class="p-2">
<app-terminal-assert [code]="kata.assert" [type]="kata.language"></app-terminal-assert>
<app-terminal-assert [code]="kata.cassert" [type]="kata.language"></app-terminal-assert>
<textarea [ngClass]="{'success':status === 0,'error':status === 1,'':status === 2}" style="white-space: pre-wrap;"
disabled>{{result}}</textarea>
</div>
<div class="p-2">
<button (click)="compile(kata.language,kata.canva,kata.assert)" class="code">TRY MY SOLUTION</button>
<button (click)="compile(kata.language,kata.canva,kata.assert)" style="margin-right: 10px" class="code">SURRENDER</button>
<button (click)="compile(kata.language,kata.canva,kata.cassert)" class="code">TRY MY SOLUTION</button>
<button style="margin-right: 10px" class="code">SURRENDER</button>
</div>
</div>
</div>
<!--[(ngModel)]="result"-->
......@@ -17,6 +17,10 @@ export class KataComponent implements OnInit {
idKata: number;
status = 2;
result = '';
programID: number;
programTitle: string;
programSensei: string;
constructor(
private route: ActivatedRoute,
......@@ -28,7 +32,13 @@ export class KataComponent implements OnInit {
getKata(): void {
this.idKata = +this.route.snapshot.paramMap.get('id');
this.kata = this.fetchKataService.getKata(this.idKata)[0];
this.programID = +this.route.snapshot.paramMap.get('prid');
this.programSensei = this.route.snapshot.paramMap.get('sensei');
this.programTitle = this.route.snapshot.paramMap.get('prgtitle');
this.fetchKataService.getKata(this.programID, this.idKata).subscribe((data: Kata) => {
this.kata = data;
});
}
OnNewEvent(event: any): void {
......@@ -36,13 +46,15 @@ export class KataComponent implements OnInit {
}
compile(language: string, stream: string, assert: string): void {
const response = $.parseJSON(this.compilationService.compilationServer(JSON.stringify({
let response;
this.compilationService.compilationServer(JSON.stringify({
language: this.kata.language,
stream: stream,
assert: assert
})));
})).subscribe((data: string) => {
console.log(data);
response = data;
if (response.exit === 0) {
this.status = 0;
this.result = response.output + '\nExercise passed';
......@@ -52,6 +64,7 @@ export class KataComponent implements OnInit {
}
this.result += '\nExecuted in : ' + response.time + 'ms';
});
}
ngOnInit() {
......
export class Kata {
id: number;
export interface Kata {
id: string;
title: string;
sensei: string;
programTitle: string;
language: string;
solution: string;
canva: string;
rules: string;
assert: string;
cassert: string;
keepAssert: boolean;
nbAttempt: number;
programID: string;
difficulty: string;
}
/*
import {Kata} from './kata';
// TODO un kata n'a pas besoin de programtitile, ca devrait être passé par la classe d'en dessus (idem pour sensei)
......@@ -17,3 +18,4 @@ export const KATAS: Kata[] = [{
'assert_that(m.multiTwo([3])).is_equal_to([6])',
solution: 'def multiTwo(n):\n' + ' return [i*2 for i in n]'
}];
*/
......@@ -24,26 +24,27 @@ export class ProgramCreateComponent implements OnInit {
}
createProgram(newkata: boolean): void {
console.log(this.programTags.split(','));
this.programToKata = +this.createProgramService.createProgram(JSON.stringify({
id: + new Date(),
this.createProgramService.createProgram(JSON.stringify({
id: this.programToKata,
sensei: 'Orestis Pileas Malaspinas',
language: this.programLanguage,
nbKata: 0,
title: this.programTitle,
description: this.programDescr,
tags: this.programTags.split(',')
}));
tags: this.programTags.split(','),
katas: []
})).subscribe(() => {
if (newkata) {
this.router.navigate(['/kata_create/' + this.programToKata + '/' + this.programLanguage + '']);
} else {
this.router.navigate(['/']);
}
});
}
ngOnInit() {
this.programToKata = +new Date();
}
}
<div class="d-flex justify-content-center" style="margin-top:2%">
<div class="d-flex justify-content-center" *ngIf="programs" style="margin-top:2%">
<div class="d-flex flex-column">
<div class="p-2" style="width:200px"></div>
<div class="p-2">Liste de programme</div>
......@@ -7,7 +7,7 @@
<span *ngFor="let program of programs">
<div class="card" style="width: 18rem;">
<div class="card-body">
<a routerLink="/kata-displayer/{{program.id}}/{{program.title}}/{{program.language}}/{{program.sensei}}">
<a routerLink="/kata-displayer/{{program.programID}}/{{program.title}}/{{program.language}}/{{program.sensei}}">
<h5 class="card-title">{{program.title}}</h5></a>
<h6 class="card-subtitle mb-2 text-muted"><a class="sensei" href="">{{program.sensei}} </a>
<a href=""><span class="language">{{program.language}}</span></a></h6>
......
......@@ -16,7 +16,7 @@ export class ProgramDisplayerComponent implements OnInit {
}
getProgram(): void {
this.programs = this.fetchProgramService.getPrograms();
this.fetchProgramService.getPrograms().subscribe((data: Program[]) => this.programs = data);
}
ngOnInit() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment