Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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
                          )));
        }
Ejemplo n.º 3
0
        public static async Task LinkMembersToProject
        (
            Project project,
            UserQueries userQueries,
            TimedUserQueries timedUserQueries,
            ProjectStudentStruct ProjectCreate,
            TimedUserData timedUser,
            CustomGroupTable groupTable,
            SqlStandardCallContext ctx
        )
        {
            for (int i = 0; i < project.team.members.Length; i++)
            {
                string   email  = project.team.members[i];
                UserData member = await userQueries.GetUserByEmail(email);

                await groupTable.AddUserAsync(
                    ctx, timedUser.TimedUserId, ProjectCreate.ProjectStudentId, member.UserId, true);
            }
        }
Ejemplo n.º 4
0
        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.");
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }