Skip to content
Snippets Groups Projects
Commit 49329120 authored by michael.minelli's avatar michael.minelli
Browse files

Merge branch 'ask-on-already-exist-exercise-creation' into v4.1.0

parents 0297cbde 89fa1799
Branches
Tags
No related merge requests found
Pipeline #32140 passed
......@@ -7,6 +7,7 @@ import Exercise from '../../../sharedByClients/models/Exercise.js';
import * as Gitlab from '@gitbeaker/rest';
import TextStyle from '../../../types/TextStyle.js';
import GitlabManager from '../../../managers/GitlabManager.js';
import inquirer from 'inquirer';
type CommandOptions = { assignment: string, members_id?: Array<number>, members_username?: Array<string>, clone?: string | boolean }
......@@ -16,7 +17,7 @@ class ExerciseCreateCommand extends CommanderCommand {
protected commandName: string = 'create';
private members!: Array<Gitlab.UserSchema> | undefined;
private assignment!: Assignment | undefined;
private assignment!: (Assignment & { myExercises?: Array<Exercise> }) | undefined;
private exercise!: Exercise;
protected defineCommand() {
......@@ -46,7 +47,7 @@ class ExerciseCreateCommand extends CommanderCommand {
text : 'Checking if assignment exists',
indent: 4
}).start();
this.assignment = await DojoBackendManager.getAssignment(options.assignment);
this.assignment = await DojoBackendManager.getAssignment(options.assignment, true);
if ( !this.assignment ) {
assignmentGetSpinner.fail(`Assignment "${ options.assignment }" doesn't exists`);
throw new Error();
......@@ -62,6 +63,36 @@ class ExerciseCreateCommand extends CommanderCommand {
throw new Error();
}
assignmentPublishedSpinner.succeed(`Assignment "${ this.assignment.name }" is published`);
if ( this.assignment.myExercises && this.assignment.myExercises.length > 0 ) {
const oraInfo = (message: string, indent: number = 12) => {
ora({
text : message,
indent: indent
}).start().info();
};
oraInfo(`${ TextStyle.WARNING('You already created ' + this.assignment.myExercises.length + ' exercises for this assignment:') }`, 4);
for ( const exercise of this.assignment.myExercises ) {
oraInfo(`${ TextStyle.LIST_ITEM_NAME('Exercice Id:') } ${ exercise.id }`, 8);
oraInfo(`${ TextStyle.LIST_ITEM_NAME('Creation date:') } ${ exercise.gitlabCreationInfo.created_at }`);
oraInfo(`${ TextStyle.LIST_ITEM_NAME('Repository:') } ${ exercise.gitlabCreationInfo.web_url }`);
oraInfo(`${ TextStyle.LIST_ITEM_NAME('Members:') } ${ exercise.members?.map(member => member.gitlabUsername).join(', ') ?? 'There is only you' }`);
}
const confirm: boolean = (await inquirer.prompt({
name : 'confirm',
prefix : ' ',
message: `${ TextStyle.QUESTION('?') } You already created ${ this.assignment.myExercises.length } exercises for this assignment (see above). Are you sure you want to create a new one?`,
type : 'confirm',
default: false
})).confirm;
if ( !confirm ) {
throw new Error();
}
}
}
private async createExercise() {
......
......@@ -93,9 +93,9 @@ class DojoBackendManager {
}
public async getAssignment(nameOrUrl: string): Promise<Assignment | undefined> {
public async getAssignment(nameOrUrl: string, getMyExercises: boolean = false): Promise<Assignment | undefined> {
try {
return (await axios.get<DojoBackendResponse<Assignment>>(DojoBackendHelper.getApiUrl(ApiRoute.ASSIGNMENT_GET, { assignmentNameOrUrl: nameOrUrl }))).data.data;
return (await axios.get<DojoBackendResponse<Assignment>>(DojoBackendHelper.getApiUrl(ApiRoute.ASSIGNMENT_GET, { assignmentNameOrUrl: nameOrUrl }), getMyExercises ? { params: { getMyExercises } } : {})).data.data;
} catch ( error ) {
return undefined;
}
......
......@@ -5,6 +5,7 @@ class TextStyle {
public readonly BLOCK = chalk.cyan;
public readonly CODE = chalk.bgHex('F7F7F7').grey.italic;
public readonly LIST_ITEM_NAME = chalk.magenta;
public readonly QUESTION = chalk.greenBright;
public readonly URL = chalk.blue.underline;
public readonly WARNING = chalk.red;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment