forked from cerc-io/snowballtools-base
Add GQL query for projects search in app (#38)
* Find projects based on search text * Use get search projects client method in UI * Fetch searched projects inside useCombobox hook * Get searched project from project entity * Remove non required search projects filtering * Fetch projects if user is owner or project member --------- Co-authored-by: neeraj <neeraj.rtly@gmail.com>
This commit is contained in:
committed by
Ashwin Phatak
co-authored by
neeraj
parent
cbc394f9f8
commit
c2b997a17b
@@ -190,4 +190,20 @@ export class Database {
|
||||
|
||||
return projectMemberWithProject[0];
|
||||
}
|
||||
|
||||
async getProjectsBySearchText (userId: number, searchText: string): Promise<Project[]> {
|
||||
const projectRepository = this.dataSource.getRepository(Project);
|
||||
|
||||
const projects = await projectRepository
|
||||
.createQueryBuilder('project')
|
||||
.leftJoinAndSelect('project.organization', 'organization')
|
||||
.leftJoin('project.projectMembers', 'projectMembers')
|
||||
.where('(project.owner = :userId OR projectMembers.member.id = :userId) AND project.name LIKE :searchText', {
|
||||
userId,
|
||||
searchText: `%${searchText}%`
|
||||
})
|
||||
.getMany();
|
||||
|
||||
return projects;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,11 +5,13 @@ import {
|
||||
CreateDateColumn,
|
||||
UpdateDateColumn,
|
||||
ManyToOne,
|
||||
JoinColumn
|
||||
JoinColumn,
|
||||
OneToMany
|
||||
} from 'typeorm';
|
||||
|
||||
import { User } from './User';
|
||||
import { Organization } from './Organization';
|
||||
import { ProjectMember } from './ProjectMember';
|
||||
|
||||
@Entity()
|
||||
export class Project {
|
||||
@@ -52,4 +54,7 @@ export class Project {
|
||||
|
||||
@UpdateDateColumn()
|
||||
updatedAt!: Date;
|
||||
|
||||
@OneToMany(() => ProjectMember, projectMember => projectMember.project)
|
||||
projectMembers!: ProjectMember[];
|
||||
}
|
||||
|
||||
@@ -21,11 +21,11 @@ export class ProjectMember {
|
||||
@PrimaryGeneratedColumn()
|
||||
id!: number;
|
||||
|
||||
@ManyToOne(() => User, { onDelete: 'CASCADE' })
|
||||
@ManyToOne(() => User, (user) => user.projectMembers, { onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'userId' })
|
||||
member!: User;
|
||||
|
||||
@ManyToOne(() => Project, { onDelete: 'CASCADE' })
|
||||
@ManyToOne(() => Project, (project) => project.projectMembers, { onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'projectId' })
|
||||
project!: Project;
|
||||
|
||||
|
||||
@@ -2,8 +2,10 @@ import {
|
||||
Entity,
|
||||
PrimaryGeneratedColumn,
|
||||
Column,
|
||||
CreateDateColumn
|
||||
CreateDateColumn,
|
||||
OneToMany
|
||||
} from 'typeorm';
|
||||
import { ProjectMember } from './ProjectMember';
|
||||
|
||||
@Entity()
|
||||
export class User {
|
||||
@@ -21,4 +23,7 @@ export class User {
|
||||
|
||||
@CreateDateColumn()
|
||||
updatedAt!: Date;
|
||||
|
||||
@OneToMany(() => ProjectMember, projectMember => projectMember.project)
|
||||
projectMembers!: ProjectMember[];
|
||||
}
|
||||
|
||||
@@ -66,6 +66,16 @@ export const createResolvers = async (db: Database): Promise<any> => {
|
||||
});
|
||||
|
||||
return projectMembers;
|
||||
},
|
||||
|
||||
searchProjects: async (_: any, { searchText }: { searchText: string }, context: any) => {
|
||||
const dbProjects = await db.getProjectsBySearchText(context.userId, searchText);
|
||||
|
||||
const projects = dbProjects.map((project) => {
|
||||
return projectToGqlType(project, [], []);
|
||||
});
|
||||
|
||||
return projects;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@ type Project {
|
||||
environmentVariables: [EnvironmentVariable!]
|
||||
createdAt: String!
|
||||
updatedAt: String!
|
||||
organization: Organization!
|
||||
}
|
||||
|
||||
type ProjectMember {
|
||||
@@ -116,6 +117,7 @@ type Query {
|
||||
projects: [Project!]
|
||||
deployments(projectId: String!): [Deployment!]
|
||||
projectMembers(projectId: String!): [ProjectMember!]
|
||||
searchProjects(searchText: String!): [Project!]
|
||||
}
|
||||
|
||||
type Mutation {
|
||||
|
||||
@@ -39,7 +39,8 @@ export const projectToGqlType = (dbProject: Project, projectMembers: ProjectMemb
|
||||
members: projectMembers,
|
||||
environmentVariables: environmentVariables,
|
||||
createdAt: dbProject.createdAt,
|
||||
updatedAt: dbProject.updatedAt
|
||||
updatedAt: dbProject.updatedAt,
|
||||
organization: dbProject.organization
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user