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

EnonceCreate => Add user to db when doesn't exist

parent e62dd71e
No related branches found
No related tags found
No related merge requests found
...@@ -35,13 +35,13 @@ class UserManager { ...@@ -35,13 +35,13 @@ class UserManager {
return Promise.all(ids.map(userId => this.getById(userId))); return Promise.all(ids.map(userId => this.getById(userId)));
} }
async getByGitlabId(gitlabId: number): Promise<User | undefined> { async getByGitlabId(gitlabId: number): Promise<User | number> {
const raw = await db<User>(User.tableName).where('userGitlabId', gitlabId).first(); const raw = await db<User>(User.tableName).where('userGitlabId', gitlabId).first();
return raw ? this.createObjectFromRawSql(raw) : undefined; return raw ? this.createObjectFromRawSql(raw) : gitlabId;
} }
async getByGitlabIds(gitlabIds: Array<number>): Promise<Array<User>> { async getByGitlabIds(gitlabIds: Array<number>): Promise<Array<User | number>> {
return Promise.all(gitlabIds.map(gitlabId => this.getByGitlabId(gitlabId))); return Promise.all(gitlabIds.map(gitlabId => this.getByGitlabId(gitlabId)));
} }
} }
......
...@@ -12,10 +12,10 @@ class User extends Model { ...@@ -12,10 +12,10 @@ class User extends Model {
userID: number = null; userID: number = null;
userFirstName: string = ''; userFirstName: string = '';
userLastName: string = ''; userLastName: string = '';
userMail: string = null; userMail: string = '';
userGitlabId: number = null; userGitlabId: number = -1;
userRole: string = null; userRole: string = 'student';
userDeleted: boolean = null; userDeleted: boolean = false;
userPassword: string = null; userPassword: string = null;
...@@ -51,6 +51,7 @@ class User extends Model { ...@@ -51,6 +51,7 @@ class User extends Model {
this.userFirstName = jsonObject.firstName; this.userFirstName = jsonObject.firstName;
this.userLastName = jsonObject.lastName; this.userLastName = jsonObject.lastName;
this.userMail = jsonObject.mail; this.userMail = jsonObject.mail;
this.userGitlabId = jsonObject.gitlabId;
this.userRole = jsonObject.role; this.userRole = jsonObject.role;
this.userDeleted = jsonObject.deleted; this.userDeleted = jsonObject.deleted;
} }
...@@ -75,12 +76,14 @@ class User extends Model { ...@@ -75,12 +76,14 @@ class User extends Model {
userLastName : Toolbox.capitalizeName(this.userLastName), userLastName : Toolbox.capitalizeName(this.userLastName),
userRole : this.userRole, userRole : this.userRole,
userMail : this.userMail, userMail : this.userMail,
userGitlabId : this.userGitlabId,
userPassword : this.userPassword userPassword : this.userPassword
}; };
} }
create(): Promise<void> { async create(): Promise<void> {
return db(User.tableName).insert(this.toDb()); const id = await db(User.tableName).insert(this.toDb());
this.userID = id[0];
} }
update(): Promise<void> { update(): Promise<void> {
......
...@@ -18,6 +18,7 @@ import User from '../models/User'; ...@@ -18,6 +18,7 @@ import User from '../models/User';
import Enonce from '../models/Enonce'; import Enonce from '../models/Enonce';
import EnonceStaff from '../models/EnonceStaff'; import EnonceStaff from '../models/EnonceStaff';
import { AxiosError } from 'axios'; import { AxiosError } from 'axios';
import logger from '../shared/logging/WinstonLogger';
class EnonceRoutes implements RoutesManager { class EnonceRoutes implements RoutesManager {
...@@ -103,19 +104,36 @@ class EnonceRoutes implements RoutesManager { ...@@ -103,19 +104,36 @@ class EnonceRoutes implements RoutesManager {
}); });
await enonce.create(); await enonce.create();
let dojoUsers: Array<User> = [ req.session.profile, ...(await UserManager.getByGitlabIds(gitlabMembers.map(member => member.id))).filter(user => user) ]; // TODO: Remplacer le filter par une map qui créer l'utilisateur inconnu. let dojoUsers: Array<User> = [ req.session.profile, ...(await Promise.all((await UserManager.getByGitlabIds(gitlabMembers.map(member => member.id))).map(async (user: User | number) => {
if ( typeof user === 'number' ) {
const gitlabUser = gitlabMembers.find(member => member.id === user);
user = User.createFromSql({
userFirstName: gitlabUser.name,
userGitlabId : gitlabUser.id
});
await user.create();
}
return user as User;
}))) ];
dojoUsers = dojoUsers.reduce((unique, user) => (unique.findIndex(uniqueUser => uniqueUser.userID === user.userID) !== -1 ? unique : [ ...unique, user ]), Array<User>()); dojoUsers = dojoUsers.reduce((unique, user) => (unique.findIndex(uniqueUser => uniqueUser.userID === user.userID) !== -1 ? unique : [ ...unique, user ]), Array<User>());
await Promise.all(dojoUsers.map(async (dojoUser: User) => { await Promise.all(dojoUsers.map(async (dojoUser: User) => {
return EnonceStaff.createFromSql({ const enonceStaff = EnonceStaff.createFromSql({
enonceID: enonce.enonceID, enonceID: enonce.enonceID,
userID : dojoUser.userID userID : dojoUser.userID
}); });
await enonceStaff.create();
})); }));
return req.session.sendResponse(res, StatusCodes.OK, enonce.toJsonObject()); return req.session.sendResponse(res, StatusCodes.OK, enonce.toJsonObject());
} catch ( error ) { } catch ( error ) {
if ( error instanceof AxiosError ) { if ( error instanceof AxiosError ) {
return res.status(error.response.status).send(); return res.status(error.response.status).send();
} else {
logger.error(error);
} }
return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send(); return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment