//NMEC: 104063


//a. 
//User -> num, svn_id, real_name, organization
//Project -> project_name
//PARTICIPATED_IN -> role_on_project
// (u:User)-[:PARTICIPATED_IN]->(p:Project)


//c.

//1. Liste a informação de cada utilizador.
MATCH (u:User)
RETURN u;


//2. Liste o nome de cada utilizador.
MATCH (u:User)
RETURN u.real_name;


//3. Liste a informação de cada projeto, no qual tenha participado pelo menos um utilizador.
MATCH (p:Project)<-[:PARTICIPATED_IN]-(u:User)
RETURN DISTINCT p;


//4. Liste os utilizadores e total de projetos em que cada um colabora
MATCH (u:User)-[:PARTICIPATED_IN]->(p:Project)
RETURN u.real_name AS user, COUNT(p) AS totalProjects;


//5. Liste os utilizadores e do total de projetos em que cada colabora ordenados por ordem decrescente do total.
MATCH (u:User)-[:PARTICIPATED_IN]->(p:Project)
RETURN u.real_name AS user, COUNT(p) AS totalProjects
ORDER BY totalProjects DESC;


//6. Liste projetos e total de membros em cada projeto.
MATCH (p:Project)<-[:PARTICIPATED_IN]-(u:User)
RETURN p.project_name AS project, COUNT(u) AS totalMembers;


//7. Liste projetos e total de membros com a role "Committer" em cada projeto.
MATCH (p:Project)<-[r:PARTICIPATED_IN {role: "Committer"}]-(u:User)
RETURN p.project_name AS project, COUNT(u) AS totalCommitters;


//8. Liste todos os utilizadores que participaram nos mesmo projetos do que o utilizador "atm" (id). Mostre os atributos: nome de "atm", nome utilizador 2, nome do projeto.
MATCH (u1:User {svn_id: "atm"})-[:PARTICIPATED_IN]->(p:Project)<-[:PARTICIPATED_IN]-(u2:User)
WHERE u1 <> u2
RETURN u1.real_name AS user1, u2.real_name AS user2, p.project_name AS project;


//9. Liste todos os utilizadores que participaram com a role "Committer" em projetos em que o utilizador "atm" (id1) participou com a role "PMC"
MATCH (u1:User {svn_id: "atm"})-[r1:PARTICIPATED_IN {role: "PMC"}]->(p:Project)<-[r2:PARTICIPATED_IN {role: "Committer"}]-(u2:User)
RETURN u1.real_name AS userPMC, u2.real_name AS userCommitter, p.project_name AS project;
