public async Task <IActionResult> GetInfosProject(int idProject) { ProjectStudentTable projectTable = _stObjMap.StObjs.Obtain <ProjectStudentTable>(); SqlDefaultDatabase db = _stObjMap.StObjs.Obtain <SqlDefaultDatabase>(); using (var ctx = new SqlStandardCallContext()) { ProjectQueries projectQueries = new ProjectQueries(ctx, db); ProjectDetailsData projectDetails = new ProjectDetailsData { Project = await projectQueries.GetDetailProject(idProject), Students = await projectQueries.GetAllUsersOfProject(idProject) }; List <string> listGroups = await projectQueries.GetGroupsOfProject(idProject); listGroups = listGroups.FindAll(x => x.StartsWith("S0") || x == "IL" || x == "SR"); string groups = listGroups[0]; if (listGroups.Count >= 2) { for (int i = 1; i < listGroups.Count; i++) { groups += "-" + listGroups[i]; } } projectDetails.Project.Semester = groups; return(Ok(projectDetails)); } }
public static async Task SaveProject( Type projectType, Project toml, int userId, SqlDefaultDatabase db, ProjectStudentTable projectTable, CustomGroupTable groupTable, ProjectUrlTable projectUrl ) { using (SqlStandardCallContext ctx = new SqlStandardCallContext()) { // letter of project type string type; if (projectType.Name == "ProjectPi") { type = "I"; } else if (projectType.Name == "ProjectPfh") { type = "H"; } else { type = "¤"; } if (type == "I") { ProjectPi project = toml as ProjectPi; // register the project (UserQueries userQueries, TimedUserQueries timedUserQueries, ProjectStudentStruct ProjectCreate, TimedUserData timedUser) = await SaveProjectPi(project, projectTable, userId, db, ctx, type, projectUrl, groupTable); // link members to the project if (toml.team.members.Length > 0) { await LinkMembersToProject(project, userQueries, timedUserQueries, ProjectCreate, timedUser, groupTable, ctx); } } else if (type == "H") { ProjectPfh project = toml as ProjectPfh; // register the project (UserQueries userQueries, TimedUserQueries timedUserQueries, ProjectStudentStruct ProjectCreate, TimedUserData timedUser) = await SaveProjectPfh(project, projectTable, userId, db, ctx, type, projectUrl, groupTable); // link members to the project if (toml.team.members.Length > 0) { await LinkMembersToProject(project, userQueries, timedUserQueries, ProjectCreate, timedUser, groupTable, ctx); } } } }
public async Task <IActionResult> SubmitProject([FromBody] SubmitProjectModel project) { ProjectStudentTable projectTable = _stObjMap.StObjs.Obtain <ProjectStudentTable>(); SqlDefaultDatabase db = _stObjMap.StObjs.Obtain <SqlDefaultDatabase>(); CustomGroupTable groupTable = _stObjMap.StObjs.Obtain <CustomGroupTable>(); ProjectUrlTable projectUrl = _stObjMap.StObjs.Obtain <ProjectUrlTable>(); return(Ok(await TomlHelpers.TomlHelpers.RegisterProject( project.Link, project.ProjectType, projectTable, project.UserId, db, groupTable, _stObjMap, projectUrl ))); }
public static async Task <(bool, string)> RegisterProject( string url, int projectNumber, ProjectStudentTable projectTable, int userId, SqlDefaultDatabase db, CustomGroupTable groupTable, IStObjMap stObjMap, ProjectUrlTable projectUrlTable ) // given url, we register the project if he can be downloaded and parsed { string tomlString; Project toml; Type projectType; try // get the type of the project { projectType = new Type[] { typeof(ProjectPi), typeof(ProjectPfh) }[projectNumber]; } catch { return(false, "Le numéro pour le type de projet n'est pas bon."); } try // to get the ressource { tomlString = GetOnlineToml(GetTomlFromGoogleDrive.GetUrlRessource(url)); } catch { return(false, "La ressource n'est pas trouvée, peut-être que le liens n'est pas le bon."); } try // parse the toml { var method = typeof(TomlHelpers).GetMethod("GetInstanceFromToml"); method = method.MakeGenericMethod(projectType); toml = (Project)method.Invoke(null, new object[] { tomlString }); } catch (Exception e) { List <string> foo = e.ToString().Split("-->")[1].Split(":").Skip(1).Take(2).ToList(); foo[1] = foo[1].Split(".")[0]; return(false, "Impossible de parser le fichier toml, est-ce que le fichier est correctement formaté ?\n" + String.Join(": ", foo)); } (bool isValid, string message) = toml.isValid(); if (!isValid) // check if we got fild we want { return(false, message); // "There is missing or bad field in the toml file"); } toml.logo.url = GetTomlFromGoogleDrive.GetUrlRessource(toml.logo.url); if (toml.team.leader != "None" && !await toml.team.isMailExisting(toml.team.leader, stObjMap)) { return(false, "L'e-mail du chef de projet est invalide."); } foreach (string mail in toml.team.members) { if (!await toml.team.isMailExisting(mail, stObjMap)) { return(false, "L'un des e-mails des membres est invalide."); } } ; try // register the project in the bdd { await RegisterProjectInBDD.SaveProject(projectType, toml, userId, db, projectTable, groupTable, projectUrlTable); } catch (Exception e) { return(false, "Impossible de sauvegarder le projet dans la BDD."); } return(true, "Le projet a été sauvegarde avec succès."); }
public static async Task <(UserQueries, TimedUserQueries, ProjectStudentStruct, TimedUserData)> SaveProjectPi( ProjectPi project, ProjectStudentTable projectTable, int userId, SqlDefaultDatabase db, SqlStandardCallContext ctx, string type, ProjectUrlTable projectUrlTable, CustomGroupTable CustomGroupTable ) { GroupQueries groupQueries = new GroupQueries(ctx, db); TraitContextQueries traitContext = new TraitContextQueries(ctx, db); TimedUserQueries timedUserQueries = new TimedUserQueries(ctx, db); TimedPeriodQueries timedPeriodQueries = new TimedPeriodQueries(ctx, db); UserQueries userQueries = new UserQueries(ctx, db); GroupData school = await groupQueries.GetIdSchoolByConnectUser(userId); // PeriodData timePeriod = await timedPeriodQueries.GetLastPeriodBySchool(school.ZoneId); TimedUserData timedUser = await timedUserQueries.GetTimedUser(userId, school.ZoneId); int traitContextId = await traitContext.GetTraitContextId(type); string email = project.team.leader; int leaderId; if (email == "None") { leaderId = 0; } else { UserData user = await userQueries.GetUserByEmail(email); TimedUserData timedLeader = await timedUserQueries.GetTimedUser(user.UserId, school.ZoneId); leaderId = user.UserId; } ProjectStudentStruct ProjectCreate = await projectTable.CreateProjectStudent( ctx, userId, school.ZoneId, project.name.project_name, traitContextId, string.Join(";", project.technologies.technologies), project.logo.url, project.slogan.slogan, project.pitch.pitch, leaderId, type ); if (project.git.url != "None") { await projectUrlTable.CreateOrUpdateProjectUrl(ctx, ProjectCreate.ProjectStudentId, project.git.url, "Git"); } foreach (var item in project.semester.semester) { string semester = "S0" + item.ToString(); int idSemester = await groupQueries.GetSpecificIdGroupByZoneIdAndGroupName(school.ZoneId, semester); await CustomGroupTable.AddUserAsync(ctx, userId, idSemester, ProjectCreate.ProjectStudentId, true); } string[] sector = project.semester.sector.Split(" - "); foreach (var item in sector) { int idSector = await groupQueries.GetSpecificIdGroupByZoneIdAndGroupName(school.ZoneId, item); await CustomGroupTable.AddUserAsync(ctx, userId, idSector, ProjectCreate.ProjectStudentId, true); } return(userQueries, timedUserQueries, ProjectCreate, timedUser); }
public static async Task <(UserQueries, TimedUserQueries, ProjectStudentStruct, TimedUserData)> SaveProjectPfh( ProjectPfh project, ProjectStudentTable projectTable, int userId, SqlDefaultDatabase db, SqlStandardCallContext ctx, string type, ProjectUrlTable projectUrlTable, CustomGroupTable CustomGroupTable ) { GroupQueries groupQueries = new GroupQueries(ctx, db); TraitContextQueries traitContext = new TraitContextQueries(ctx, db); TimedUserQueries timedUserQueries = new TimedUserQueries(ctx, db); TimedPeriodQueries timedPeriodQueries = new TimedPeriodQueries(ctx, db); UserQueries userQueries = new UserQueries(ctx, db); GroupData school = await groupQueries.GetIdSchoolByConnectUser(userId); // PeriodData timePeriod = await timedPeriodQueries.GetLastPeriodBySchool(school.ZoneId); TimedUserData timedUser = await timedUserQueries.GetTimedUser(userId, school.ZoneId); int traitContextId = await traitContext.GetTraitContextId(type); string email = project.team.leader; int leaderId; if (email == "None") { leaderId = 0; } else { UserData user = await userQueries.GetUserByEmail(email); TimedUserData timedLeader = await timedUserQueries.GetTimedUser(user.UserId, school.ZoneId); leaderId = user.UserId; } project.background.image = GetTomlFromGoogleDrive.GetUrlRessource(project.background.image); ProjectStudentStruct ProjectCreate = await projectTable.CreateProjectStudent( ctx, userId, school.ZoneId, project.name.project_name, traitContextId, project.logo.url, project.slogan.slogan, project.pitch.pitch, leaderId, type, project.background.image ); foreach (var item in project.semester.semester) { string semester = "S0" + item.ToString(); int idSemester = await groupQueries.GetSpecificIdGroupByZoneIdAndGroupName(school.ZoneId, semester); await CustomGroupTable.AddUserAsync(ctx, userId, idSemester, ProjectCreate.ProjectStudentId, true); } return(userQueries, timedUserQueries, ProjectCreate, timedUser); }