Skip to content

Commit

Permalink
Add service, resolver and type for Project
Browse files Browse the repository at this point in the history
  • Loading branch information
manelcecs committed Oct 30, 2023
1 parent 12f76d4 commit 2f3559e
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 0 deletions.
17 changes: 17 additions & 0 deletions src/domain-services/projects/graphql/resolver.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import SoftwareInfo from './types';
import { Service } from 'typedi';
import { Ctx, Query, Resolver } from 'type-graphql';
import { ProjectService } from '../project-service';
import Project from './types';
import Context from '../../Context';

@Service()
@Resolver(Project)
export default class ProjectsResolver {
constructor(private projectService: ProjectService) {}

@Query(() => [Project])
async softwareInfo(@Ctx() context: Context): Promise<SoftwareInfo[]> {
return await this.projectService.getProjects(context.models);
}
}
54 changes: 54 additions & 0 deletions src/domain-services/projects/graphql/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { Field, ObjectType } from 'type-graphql';

@ObjectType()
export default class Project {
@Field()
id: number;

@Field()
createdAt: string;

@Field()
updatedAt: string;

@Field()
code: string;

@Field()
currentPublishedVersionId: number;

@Field()
creatorParticipantId: number;

@Field()
latestVersionId: number;

@Field(() => String)
implementationStatus: ImplementationStatus;

@Field()
pdf: string;

@Field()
sourceProjectId: number;

@Field()
name: string;

@Field()
version: number;

@Field()
projectVersionCode: string;

@Field()
visible: boolean;
}

export type ImplementationStatus =
| 'Planning'
| 'Implementing'
| 'Ended - Completed'
| 'Ended - Terminated'
| 'Ended - Not started and abandoned'
| null;
37 changes: 37 additions & 0 deletions src/domain-services/projects/project-service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Database } from '@unocha/hpc-api-core/src/db';
import { Service } from 'typedi';
import Project from './graphql/types';

@Service()
export class ProjectService {
public async getProjects(models: Database): Promise<Project[]> {
const projects = await models.project.find();

return projects.map((project) => {
return {
id: project.id.valueOf(),
createdAt: project.createdAt.toString(),
updatedAt: project.updatedAt.toString(),
code: project.code ?? '',
currentPublishedVersionId: project.currentPublishedVersionId
? project.currentPublishedVersionId.valueOf()
: 0,
creatorParticipantId: project.creatorParticipantId
? project.creatorParticipantId.valueOf()
: 0,
latestVersionId: project.latestVersionId
? project.latestVersionId.valueOf()
: 0,
implementationStatus: project.implementationStatus,
pdf: 'null', // TODO: implement
sourceProjectId: project.sourceProjectId
? project.sourceProjectId.valueOf()
: 0,
name: 'placeholder',
version: 0,
projectVersionCode: 'project version code placeholder',
visible: true,
};
});
}
}

0 comments on commit 2f3559e

Please sign in to comment.