@dssp/project 0.0.27 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/client/pages/lib/select2-component.ts +12 -1
  2. package/client/pages/project/component/project-update-header.ts +85 -0
  3. package/client/pages/project/popup/popup-schedule-upload.ts +102 -0
  4. package/client/pages/project/project-list.ts +1 -0
  5. package/client/pages/project/project-plan-management.ts +3 -54
  6. package/client/pages/project/project-schedule.ts +60 -13
  7. package/client/pages/project/project-update.ts +4 -52
  8. package/dist-client/pages/lib/select2-component.js +12 -1
  9. package/dist-client/pages/lib/select2-component.js.map +1 -1
  10. package/dist-client/pages/project/component/project-update-header.d.ts +1 -0
  11. package/dist-client/pages/project/component/project-update-header.js +95 -0
  12. package/dist-client/pages/project/component/project-update-header.js.map +1 -0
  13. package/dist-client/pages/project/popup/popup-schedule-upload.d.ts +9 -0
  14. package/dist-client/pages/project/popup/popup-schedule-upload.js +105 -0
  15. package/dist-client/pages/project/popup/popup-schedule-upload.js.map +1 -0
  16. package/dist-client/pages/project/project-list.d.ts +1 -0
  17. package/dist-client/pages/project/project-list.js.map +1 -1
  18. package/dist-client/pages/project/project-plan-management.d.ts +1 -0
  19. package/dist-client/pages/project/project-plan-management.js +3 -53
  20. package/dist-client/pages/project/project-plan-management.js.map +1 -1
  21. package/dist-client/pages/project/project-schedule.d.ts +4 -0
  22. package/dist-client/pages/project/project-schedule.js +55 -12
  23. package/dist-client/pages/project/project-schedule.js.map +1 -1
  24. package/dist-client/pages/project/project-update.d.ts +1 -0
  25. package/dist-client/pages/project/project-update.js +4 -52
  26. package/dist-client/pages/project/project-update.js.map +1 -1
  27. package/dist-client/route.d.ts +1 -1
  28. package/dist-client/tsconfig.tsbuildinfo +1 -1
  29. package/dist-server/service/project/project-mutation.d.ts +2 -1
  30. package/dist-server/service/project/project-mutation.js +16 -0
  31. package/dist-server/service/project/project-mutation.js.map +1 -1
  32. package/dist-server/service/project/project-query.d.ts +1 -0
  33. package/dist-server/service/project/project-query.js +17 -0
  34. package/dist-server/service/project/project-query.js.map +1 -1
  35. package/dist-server/service/project/project-type.d.ts +4 -0
  36. package/dist-server/service/project/project-type.js +15 -1
  37. package/dist-server/service/project/project-type.js.map +1 -1
  38. package/dist-server/service/project/project.d.ts +1 -0
  39. package/dist-server/service/project/project.js +4 -0
  40. package/dist-server/service/project/project.js.map +1 -1
  41. package/dist-server/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +4 -4
  43. package/server/service/project/project-mutation.ts +16 -1
  44. package/server/service/project/project-query.ts +13 -0
  45. package/server/service/project/project-type.ts +9 -0
  46. package/server/service/project/project.ts +4 -0
@@ -1,9 +1,10 @@
1
1
  import { Project } from './project';
2
- import { NewProject, ProjectPatch } from './project-type';
2
+ import { NewProject, ProjectPatch, UploadProjectScheduleTable } from './project-type';
3
3
  export declare class ProjectMutation {
4
4
  createProject(project: NewProject, context: ResolverContext): Promise<Project>;
5
5
  updateProject(project: ProjectPatch, context: ResolverContext): Promise<Project>;
6
6
  updateProjectPlan(project: ProjectPatch, context: ResolverContext): Promise<Project>;
7
+ uploadProjectScheduleTable(param: UploadProjectScheduleTable, context: ResolverContext): Promise<boolean>;
7
8
  deleteProject(id: string, context: ResolverContext): Promise<boolean>;
8
9
  }
9
10
  export declare function createAttachmentAfterDelete(context: ResolverContext, file: any, refBy: any, refType: any): Promise<any>;
@@ -133,6 +133,13 @@ let ProjectMutation = class ProjectMutation {
133
133
  }
134
134
  return projectResult;
135
135
  }
136
+ async uploadProjectScheduleTable(param, context) {
137
+ const { user, tx } = context.state;
138
+ const { projectId, scheduleTable } = param;
139
+ // 프로젝트 공정표 파일 업로드
140
+ await createAttachmentAfterDelete(context, scheduleTable, projectId, project_1.Project.name + '_schedule_table');
141
+ return true;
142
+ }
136
143
  async deleteProject(id, context) {
137
144
  const { domain, tx } = context.state;
138
145
  await tx.getRepository(project_1.Project).delete({ domain: { id: domain.id }, id });
@@ -167,6 +174,15 @@ tslib_1.__decorate([
167
174
  tslib_1.__metadata("design:paramtypes", [project_type_1.ProjectPatch, Object]),
168
175
  tslib_1.__metadata("design:returntype", Promise)
169
176
  ], ProjectMutation.prototype, "updateProjectPlan", null);
177
+ tslib_1.__decorate([
178
+ (0, type_graphql_1.Directive)('@transaction'),
179
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: '프로젝트 공정표 업로드' }),
180
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('param')),
181
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
182
+ tslib_1.__metadata("design:type", Function),
183
+ tslib_1.__metadata("design:paramtypes", [project_type_1.UploadProjectScheduleTable, Object]),
184
+ tslib_1.__metadata("design:returntype", Promise)
185
+ ], ProjectMutation.prototype, "uploadProjectScheduleTable", null);
170
186
  tslib_1.__decorate([
171
187
  (0, type_graphql_1.Directive)('@transaction'),
172
188
  (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To delete Project' }),
@@ -1 +1 @@
1
- {"version":3,"file":"project-mutation.js","sourceRoot":"","sources":["../../../server/service/project/project-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\nimport { createAttachment, deleteAttachmentsByRef, ATTACHMENT_PATH } from '@things-factory/attachment-base'\nimport { Project, ProjectState } from './project'\nimport { NewProject, ProjectPatch } from './project-type'\nimport { BuildingComplex, Building, BuildingLevel } from '@dssp/building-complex'\nimport { pdfToImage } from '@things-factory/board-service/dist-server/controllers/headless-pdf-to-image'\n\n@Resolver(Project)\nexport class ProjectMutation {\n @Directive('@transaction')\n @Mutation(returns => Project, { description: '프로젝트 생성' })\n async createProject(@Arg('project') project: NewProject, @Ctx() context: ResolverContext): Promise<Project> {\n const { domain, user, tx } = context.state\n const projectRepo = tx.getRepository(Project)\n const buildingComplexRepo = tx.getRepository(BuildingComplex)\n\n const newBuildingComplex = await buildingComplexRepo.save({\n domain,\n creator: user,\n updater: user\n })\n\n const result = await projectRepo.save({\n name: project.name,\n buildingComplex: newBuildingComplex,\n domain,\n creator: user,\n updater: user\n })\n\n return result\n }\n\n @Directive('@transaction')\n @Mutation(returns => Project, { description: '프로젝트 업데이트' })\n async updateProject(@Arg('project') project: ProjectPatch, @Ctx() context: ResolverContext): Promise<Project> {\n const { user, tx } = context.state\n const projectRepo = tx.getRepository(Project)\n const buildingComplexRepo = tx.getRepository(BuildingComplex)\n const buildingRepo = tx.getRepository(Building)\n const buildingLevelRepo = tx.getRepository(BuildingLevel)\n\n const buildingComplex = project.buildingComplex\n const buildings = project.buildingComplex?.buildings || []\n\n // 1. 프로젝트 수정\n const projectState = project.totalProgress == 100 ? ProjectState.COMPLETED : ProjectState.ONGOING\n const projectResult = await projectRepo.save({ ...project, state: projectState, updater: user })\n\n // 2. 단지 정보 수정\n await buildingComplexRepo.save({ ...buildingComplex, updater: user })\n\n // 2-1. 프로젝트 메인 이미지 첨부파일 나머지 삭제 후 저장\n await createAttachmentAfterDelete(context, project?.mainPhotoUpload, project.id, Project.name)\n\n // 2-2. 단지 BIM 이미지 첨부파일 나머지 삭제 후 저장\n await createAttachmentAfterDelete(context, buildingComplex?.drawingUpload, buildingComplex.id, BuildingComplex.name + '_bim')\n\n // 3. 동의 층 정보가 바뀌었으면 층 초기화 후 다시 생성\n const originBuilding = await buildingRepo.findBy({ buildingComplex: { id: buildingComplex.id } }) // 이전 동 정보 가져오기\n const afterBuilding = buildings.reduce((acc, building) => ({ ...acc, [building.name]: building.floorCount }), {}) // 비교용으로 수정된 동 정보 데이터 파싱\n const isBuidlingChanged = originBuilding.some(building => afterBuilding[building.name] !== building.floorCount) // 층 개수가 달라진 동이 있는지 확인\n\n // 동의 층 개수가 달라지면 모든 층의 데이터 제거 후 생성\n if (isBuidlingChanged || originBuilding.length !== buildings.length) {\n // 3-1. 기존 동/층 첨부파일 및 데이터 제거\n const buildingIds = originBuilding.map((building: Building) => building.id)\n const buildingLevels = await buildingLevelRepo.findBy({ building: { id: In(buildingIds) } })\n const buildingLevelIds = buildingLevels.map((buildingLevel: BuildingLevel) => buildingLevel.id)\n\n await buildingLevelRepo.softDelete({ building: { id: In(buildingIds) } })\n await buildingRepo.softDelete({ id: In(buildingIds) })\n await deleteAttachmentsByRef(null, { refBys: [...buildingIds, ...buildingLevelIds] }, context)\n\n // 3-2. 단지 내 동 정보들 생성\n for (let buildingKey in buildings) {\n const building = buildings[buildingKey]\n const newBuilding = await buildingRepo.save({\n buildingComplex: buildingComplex,\n name: building.name,\n floorCount: building.floorCount,\n creator: user\n })\n\n // 3-3. 동별로 for문 돌면서 층 데이터 개수대로 생성\n for (let i = 1; i <= building.floorCount; i++) {\n await buildingLevelRepo.save({ building: newBuilding, floor: i, creator: user })\n }\n }\n }\n\n return projectResult\n }\n\n @Directive('@transaction')\n @Mutation(returns => Project, { description: '프로젝트 도면 업데이트' })\n async updateProjectPlan(@Arg('project') project: ProjectPatch, @Ctx() context: ResolverContext): Promise<Project> {\n const { user, tx, domain } = context.state\n const projectRepo = tx.getRepository(Project)\n const buildingComplexRepo = tx.getRepository(BuildingComplex)\n const buildingRepo = tx.getRepository(Building)\n const buildingLevelRepo = tx.getRepository(BuildingLevel)\n const buildingComplex = project.buildingComplex\n const buildings = project.buildingComplex?.buildings || []\n\n // 1. 프로젝트 수정 시간 업데이트\n const projectResult = await projectRepo.save({ ...project, updater: user })\n\n // 2. 단지 축척 정보 수정\n await buildingComplexRepo.save({ ...buildingComplex, updater: user })\n\n for (let buildingKey in buildings) {\n const building = buildings[buildingKey]\n\n for (let buildingLevelKey in building.buildingLevels) {\n const buildingLevel = building.buildingLevels[buildingLevelKey]\n\n // 3. 층별 도면 이미지 저장\n const mainDrawingAttatchment = await createAttachmentAfterDelete(\n context,\n buildingLevel.mainDrawingUpload,\n buildingLevel.id,\n BuildingLevel.name + '_mainDrawing'\n )\n // 첨부된 PDF가 있으면 PDF 파일대로 썸네일 생성\n if (mainDrawingAttatchment) {\n const mainDrawingUpload = await buildingLevel.mainDrawingUpload\n const pdfPath = `/${ATTACHMENT_PATH}/${mainDrawingAttatchment.path}`\n const fileName = mainDrawingUpload.filename.replace('.pdf', '')\n const pngFile = await pdfToImage({ pdfPath, fileName })\n await createAttachmentAfterDelete(context, pngFile, buildingLevel.id, BuildingLevel.name + '_mainDrawing_image')\n\n const pngThumbnailFile = await pdfToImage({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } })\n await createAttachmentAfterDelete(\n context,\n pngThumbnailFile,\n buildingLevel.id,\n BuildingLevel.name + '_mainDrawing_thumbnail'\n )\n }\n\n // 3-1. 입면도 파일 저장\n const elevationDrawingAttatchment = await createAttachmentAfterDelete(\n context,\n buildingLevel.elevationDrawingUpload,\n buildingLevel.id,\n BuildingLevel.name + '_elevationDrawing'\n )\n if (elevationDrawingAttatchment) {\n const elevationDrawingUpload = await buildingLevel.elevationDrawingUpload\n const pdfPath = `/${ATTACHMENT_PATH}/${elevationDrawingAttatchment.path}`\n const fileName = elevationDrawingUpload.filename.replace('.pdf', '')\n const pngThumbnailFile = await pdfToImage({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } })\n await createAttachmentAfterDelete(\n context,\n pngThumbnailFile,\n buildingLevel.id,\n BuildingLevel.name + '_elevationDrawing_thumbnail'\n )\n }\n\n // 3-2. 철근배분도 파일 저장\n const rebarDistributionDrawingAttatchment = await createAttachmentAfterDelete(\n context,\n buildingLevel.rebarDistributionDrawingUpload,\n buildingLevel.id,\n BuildingLevel.name + '_rebarDistributionDrawing'\n )\n if (rebarDistributionDrawingAttatchment) {\n const rebarDistributionDrawingUpload = await buildingLevel.rebarDistributionDrawingUpload\n const pdfPath = `/${ATTACHMENT_PATH}/${rebarDistributionDrawingAttatchment.path}`\n const fileName = rebarDistributionDrawingUpload.filename.replace('.pdf', '')\n const pngThumbnailFile = await pdfToImage({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } })\n await createAttachmentAfterDelete(\n context,\n pngThumbnailFile,\n buildingLevel.id,\n BuildingLevel.name + '_rebarDistributionDrawing_thumbnail'\n )\n }\n\n // 3-3. 층 업데이트 시간 갱신\n await buildingLevelRepo.save({ ...buildingLevel, updater: user })\n }\n\n // 4. 동별 도면 이미지 저장\n await createAttachmentAfterDelete(context, building?.drawingUpload, building.id, Building.name)\n\n // 4-1. 동 업데이트 시간 갱신\n await buildingRepo.save({ ...building, updater: user })\n }\n\n return projectResult\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete Project' })\n async deleteProject(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Project).delete({ domain: { id: domain.id }, id })\n await deleteAttachmentsByRef(null, { refBys: [id] }, context)\n\n return true\n }\n}\n\nexport async function createAttachmentAfterDelete(context: ResolverContext, file: any, refBy: any, refType: any) {\n let result = null\n\n // undefined = 기존 파일 그대로\n if (file === undefined) return result\n\n // 기존 첨부 파일이 있으면 삭제\n await deleteAttachmentsByRef(null, { refBys: [refBy], refType }, context)\n\n // 파일이 있으면 생성 (null로 들어올 경우 delete까지만)\n if (file) {\n result = await createAttachment(null, { attachment: { file, refType, refBy } }, context)\n }\n\n return result\n}\n"]}
1
+ {"version":3,"file":"project-mutation.js","sourceRoot":"","sources":["../../../server/service/project/project-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\nimport { createAttachment, deleteAttachmentsByRef, ATTACHMENT_PATH } from '@things-factory/attachment-base'\nimport { Project, ProjectState } from './project'\nimport { NewProject, ProjectPatch, UploadProjectScheduleTable } from './project-type'\nimport { BuildingComplex, Building, BuildingLevel } from '@dssp/building-complex'\nimport { pdfToImage } from '@things-factory/board-service/dist-server/controllers/headless-pdf-to-image'\n\n@Resolver(Project)\nexport class ProjectMutation {\n @Directive('@transaction')\n @Mutation(returns => Project, { description: '프로젝트 생성' })\n async createProject(@Arg('project') project: NewProject, @Ctx() context: ResolverContext): Promise<Project> {\n const { domain, user, tx } = context.state\n const projectRepo = tx.getRepository(Project)\n const buildingComplexRepo = tx.getRepository(BuildingComplex)\n\n const newBuildingComplex = await buildingComplexRepo.save({\n domain,\n creator: user,\n updater: user\n })\n\n const result = await projectRepo.save({\n name: project.name,\n buildingComplex: newBuildingComplex,\n domain,\n creator: user,\n updater: user\n })\n\n return result\n }\n\n @Directive('@transaction')\n @Mutation(returns => Project, { description: '프로젝트 업데이트' })\n async updateProject(@Arg('project') project: ProjectPatch, @Ctx() context: ResolverContext): Promise<Project> {\n const { user, tx } = context.state\n const projectRepo = tx.getRepository(Project)\n const buildingComplexRepo = tx.getRepository(BuildingComplex)\n const buildingRepo = tx.getRepository(Building)\n const buildingLevelRepo = tx.getRepository(BuildingLevel)\n\n const buildingComplex = project.buildingComplex\n const buildings = project.buildingComplex?.buildings || []\n\n // 1. 프로젝트 수정\n const projectState = project.totalProgress == 100 ? ProjectState.COMPLETED : ProjectState.ONGOING\n const projectResult = await projectRepo.save({ ...project, state: projectState, updater: user })\n\n // 2. 단지 정보 수정\n await buildingComplexRepo.save({ ...buildingComplex, updater: user })\n\n // 2-1. 프로젝트 메인 이미지 첨부파일 나머지 삭제 후 저장\n await createAttachmentAfterDelete(context, project?.mainPhotoUpload, project.id, Project.name)\n\n // 2-2. 단지 BIM 이미지 첨부파일 나머지 삭제 후 저장\n await createAttachmentAfterDelete(context, buildingComplex?.drawingUpload, buildingComplex.id, BuildingComplex.name + '_bim')\n\n // 3. 동의 층 정보가 바뀌었으면 층 초기화 후 다시 생성\n const originBuilding = await buildingRepo.findBy({ buildingComplex: { id: buildingComplex.id } }) // 이전 동 정보 가져오기\n const afterBuilding = buildings.reduce((acc, building) => ({ ...acc, [building.name]: building.floorCount }), {}) // 비교용으로 수정된 동 정보 데이터 파싱\n const isBuidlingChanged = originBuilding.some(building => afterBuilding[building.name] !== building.floorCount) // 층 개수가 달라진 동이 있는지 확인\n\n // 동의 층 개수가 달라지면 모든 층의 데이터 제거 후 생성\n if (isBuidlingChanged || originBuilding.length !== buildings.length) {\n // 3-1. 기존 동/층 첨부파일 및 데이터 제거\n const buildingIds = originBuilding.map((building: Building) => building.id)\n const buildingLevels = await buildingLevelRepo.findBy({ building: { id: In(buildingIds) } })\n const buildingLevelIds = buildingLevels.map((buildingLevel: BuildingLevel) => buildingLevel.id)\n\n await buildingLevelRepo.softDelete({ building: { id: In(buildingIds) } })\n await buildingRepo.softDelete({ id: In(buildingIds) })\n await deleteAttachmentsByRef(null, { refBys: [...buildingIds, ...buildingLevelIds] }, context)\n\n // 3-2. 단지 내 동 정보들 생성\n for (let buildingKey in buildings) {\n const building = buildings[buildingKey]\n const newBuilding = await buildingRepo.save({\n buildingComplex: buildingComplex,\n name: building.name,\n floorCount: building.floorCount,\n creator: user\n })\n\n // 3-3. 동별로 for문 돌면서 층 데이터 개수대로 생성\n for (let i = 1; i <= building.floorCount; i++) {\n await buildingLevelRepo.save({ building: newBuilding, floor: i, creator: user })\n }\n }\n }\n\n return projectResult\n }\n\n @Directive('@transaction')\n @Mutation(returns => Project, { description: '프로젝트 도면 업데이트' })\n async updateProjectPlan(@Arg('project') project: ProjectPatch, @Ctx() context: ResolverContext): Promise<Project> {\n const { user, tx, domain } = context.state\n const projectRepo = tx.getRepository(Project)\n const buildingComplexRepo = tx.getRepository(BuildingComplex)\n const buildingRepo = tx.getRepository(Building)\n const buildingLevelRepo = tx.getRepository(BuildingLevel)\n const buildingComplex = project.buildingComplex\n const buildings = project.buildingComplex?.buildings || []\n\n // 1. 프로젝트 수정 시간 업데이트\n const projectResult = await projectRepo.save({ ...project, updater: user })\n\n // 2. 단지 축척 정보 수정\n await buildingComplexRepo.save({ ...buildingComplex, updater: user })\n\n for (let buildingKey in buildings) {\n const building = buildings[buildingKey]\n\n for (let buildingLevelKey in building.buildingLevels) {\n const buildingLevel = building.buildingLevels[buildingLevelKey]\n\n // 3. 층별 도면 이미지 저장\n const mainDrawingAttatchment = await createAttachmentAfterDelete(\n context,\n buildingLevel.mainDrawingUpload,\n buildingLevel.id,\n BuildingLevel.name + '_mainDrawing'\n )\n // 첨부된 PDF가 있으면 PDF 파일대로 썸네일 생성\n if (mainDrawingAttatchment) {\n const mainDrawingUpload = await buildingLevel.mainDrawingUpload\n const pdfPath = `/${ATTACHMENT_PATH}/${mainDrawingAttatchment.path}`\n const fileName = mainDrawingUpload.filename.replace('.pdf', '')\n const pngFile = await pdfToImage({ pdfPath, fileName })\n await createAttachmentAfterDelete(context, pngFile, buildingLevel.id, BuildingLevel.name + '_mainDrawing_image')\n\n const pngThumbnailFile = await pdfToImage({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } })\n await createAttachmentAfterDelete(\n context,\n pngThumbnailFile,\n buildingLevel.id,\n BuildingLevel.name + '_mainDrawing_thumbnail'\n )\n }\n\n // 3-1. 입면도 파일 저장\n const elevationDrawingAttatchment = await createAttachmentAfterDelete(\n context,\n buildingLevel.elevationDrawingUpload,\n buildingLevel.id,\n BuildingLevel.name + '_elevationDrawing'\n )\n if (elevationDrawingAttatchment) {\n const elevationDrawingUpload = await buildingLevel.elevationDrawingUpload\n const pdfPath = `/${ATTACHMENT_PATH}/${elevationDrawingAttatchment.path}`\n const fileName = elevationDrawingUpload.filename.replace('.pdf', '')\n const pngThumbnailFile = await pdfToImage({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } })\n await createAttachmentAfterDelete(\n context,\n pngThumbnailFile,\n buildingLevel.id,\n BuildingLevel.name + '_elevationDrawing_thumbnail'\n )\n }\n\n // 3-2. 철근배분도 파일 저장\n const rebarDistributionDrawingAttatchment = await createAttachmentAfterDelete(\n context,\n buildingLevel.rebarDistributionDrawingUpload,\n buildingLevel.id,\n BuildingLevel.name + '_rebarDistributionDrawing'\n )\n if (rebarDistributionDrawingAttatchment) {\n const rebarDistributionDrawingUpload = await buildingLevel.rebarDistributionDrawingUpload\n const pdfPath = `/${ATTACHMENT_PATH}/${rebarDistributionDrawingAttatchment.path}`\n const fileName = rebarDistributionDrawingUpload.filename.replace('.pdf', '')\n const pngThumbnailFile = await pdfToImage({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } })\n await createAttachmentAfterDelete(\n context,\n pngThumbnailFile,\n buildingLevel.id,\n BuildingLevel.name + '_rebarDistributionDrawing_thumbnail'\n )\n }\n\n // 3-3. 층 업데이트 시간 갱신\n await buildingLevelRepo.save({ ...buildingLevel, updater: user })\n }\n\n // 4. 동별 도면 이미지 저장\n await createAttachmentAfterDelete(context, building?.drawingUpload, building.id, Building.name)\n\n // 4-1. 동 업데이트 시간 갱신\n await buildingRepo.save({ ...building, updater: user })\n }\n\n return projectResult\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: '프로젝트 공정표 업로드' })\n async uploadProjectScheduleTable(\n @Arg('param') param: UploadProjectScheduleTable,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { user, tx } = context.state\n const { projectId, scheduleTable } = param\n\n // 프로젝트 공정표 파일 업로드\n await createAttachmentAfterDelete(context, scheduleTable, projectId, Project.name + '_schedule_table')\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete Project' })\n async deleteProject(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Project).delete({ domain: { id: domain.id }, id })\n await deleteAttachmentsByRef(null, { refBys: [id] }, context)\n\n return true\n }\n}\n\nexport async function createAttachmentAfterDelete(context: ResolverContext, file: any, refBy: any, refType: any) {\n let result = null\n\n // undefined = 기존 파일 그대로\n if (file === undefined) return result\n\n // 기존 첨부 파일이 있으면 삭제\n await deleteAttachmentsByRef(null, { refBys: [refBy], refType }, context)\n\n // 파일이 있으면 생성 (null로 들어올 경우 delete까지만)\n if (file) {\n result = await createAttachment(null, { attachment: { file, refType, refBy } }, context)\n }\n\n return result\n}\n"]}
@@ -11,6 +11,7 @@ export declare class ProjectQuery {
11
11
  projectByBuildingComplexId(buildingComplexId: string, context: ResolverContext): Promise<Project>;
12
12
  rootTasks(project: Project): Promise<Task[]>;
13
13
  mainPhoto(project: Project): Promise<string | Attachment>;
14
+ scheduleTable(project: Project): Promise<Attachment | undefined>;
14
15
  buildingComplex(project: Project): Promise<BuildingComplex>;
15
16
  domain(project: Project): Promise<Domain>;
16
17
  updater(project: Project): Promise<User>;
@@ -53,6 +53,16 @@ let ProjectQuery = class ProjectQuery {
53
53
  });
54
54
  return attachment;
55
55
  }
56
+ async scheduleTable(project) {
57
+ const attachment = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
58
+ where: {
59
+ domain: { id: project.domainId },
60
+ refBy: project.id,
61
+ refType: project_1.Project.name + '_schedule_table'
62
+ }
63
+ });
64
+ return attachment;
65
+ }
56
66
  async buildingComplex(project) {
57
67
  return await (0, shell_1.getRepository)(building_complex_1.BuildingComplex).findOneBy({ id: project.buildingComplexId });
58
68
  }
@@ -104,6 +114,13 @@ tslib_1.__decorate([
104
114
  tslib_1.__metadata("design:paramtypes", [project_1.Project]),
105
115
  tslib_1.__metadata("design:returntype", Promise)
106
116
  ], ProjectQuery.prototype, "mainPhoto", null);
117
+ tslib_1.__decorate([
118
+ (0, type_graphql_1.FieldResolver)(type => attachment_base_1.Attachment),
119
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
120
+ tslib_1.__metadata("design:type", Function),
121
+ tslib_1.__metadata("design:paramtypes", [project_1.Project]),
122
+ tslib_1.__metadata("design:returntype", Promise)
123
+ ], ProjectQuery.prototype, "scheduleTable", null);
107
124
  tslib_1.__decorate([
108
125
  (0, type_graphql_1.FieldResolver)(type => building_complex_1.BuildingComplex),
109
126
  tslib_1.__param(0, (0, type_graphql_1.Root)()),
@@ -1 +1 @@
1
- {"version":3,"file":"project-query.js","sourceRoot":"","sources":["../../../server/service/project/project-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAmF;AACnF,qCAAgC;AAChC,iDAAuG;AACvG,yDAAgD;AAChD,uCAAmC;AACnC,uCAAmC;AACnC,iDAA4C;AAC5C,qEAA4D;AAC5D,6DAAwD;AAGjD,IAAM,YAAY,GAAlB,MAAM,YAAY;IAEjB,AAAN,KAAK,CAAC,OAAO,CAAY,EAAU,EAAS,OAAwB;QAClE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,OAAO,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC,CAAC,OAAO,CAAC;YAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;SACzC,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,CAAS,MAAiB,EAAS,OAAwB;QACvE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,MAAM;YACN,MAAM;YACN,UAAU,EAAE,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC;YACxC,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC;SAC9C,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAA;QAE3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzB,CAAC;IAGK,AAAN,KAAK,CAAC,0BAA0B,CACJ,iBAAyB,EAC5C,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,OAAO,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC,CAAC,OAAO,CAAC;YAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE;SACjF,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,SAAS,CAAS,OAAgB;QACtC,OAAO,MAAM,IAAA,qBAAa,EAAC,WAAI,CAAC,CAAC,IAAI,CAAC;YACpC,KAAK,EAAE;gBACL,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;gBAC3B,MAAM,EAAE,IAAA,gBAAM,GAAE;aACjB;SACF,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,SAAS,CAAS,OAAgB;QACtC,MAAM,UAAU,GAAe,MAAM,IAAA,qBAAa,EAAC,4BAAU,CAAC,CAAC,OAAO,CAAC;YACrE,KAAK,EAAE;gBACL,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE;gBAChC,KAAK,EAAE,OAAO,CAAC,EAAE;aAClB;YACD,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SAC5B,CAAC,CAAA;QAEF,OAAO,UAAU,CAAA;IACnB,CAAC;IAGK,AAAN,KAAK,CAAC,eAAe,CAAS,OAAgB;QAC5C,OAAO,MAAM,IAAA,qBAAa,EAAC,kCAAe,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;IAC1F,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CAAS,OAAgB;QACnC,OAAO,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IACxE,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,OAAgB;QACpC,OAAO,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IACvE,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,OAAgB;QACpC,OAAO,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IACvE,CAAC;CACF,CAAA;AA9EO;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,iBAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACnE,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;2CAM1C;AAGK;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,0BAAW,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IAC3C,mBAAA,IAAA,mBAAI,GAAE,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAjB,iBAAS;;4CAavC;AAGK;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,iBAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;IAE/E,mBAAA,IAAA,kBAAG,EAAC,mBAAmB,CAAC,CAAA;IACxB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;8DAOP;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjC,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;6CAOvC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,4BAAU,CAAC;IACjB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;6CAUvC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,kCAAe,CAAC;IAChB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;mDAE7C;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IAChB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;0CAEpC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,CAAC;IACb,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;2CAErC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,CAAC;IACb,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;2CAErC;AA/EU,YAAY;IADxB,IAAA,uBAAQ,EAAC,iBAAO,CAAC;GACL,YAAY,CAgFxB;AAhFY,oCAAY","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Arg, Args, Ctx } from 'type-graphql'\nimport { IsNull } from 'typeorm'\nimport { Domain, getRepository, ListParam, getQueryBuilderFromListParams } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Project } from './project'\nimport { Task } from '../task/task'\nimport { ProjectList } from './project-type'\nimport { Attachment } from '@things-factory/attachment-base'\nimport { BuildingComplex } from '@dssp/building-complex'\n\n@Resolver(Project)\nexport class ProjectQuery {\n @Query(returns => Project!, { nullable: true, description: 'To fetch a Project' })\n async project(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Project> {\n const { domain } = context.state\n\n return await getRepository(Project).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => ProjectList, { description: '프로젝트 리스트' })\n async projects(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ProjectList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(Project),\n searchables: ['name', 'description', 'state']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Query(returns => Project!, { nullable: true, description: 'To fetch a Project' })\n async projectByBuildingComplexId(\n @Arg('buildingComplexId') buildingComplexId: string,\n @Ctx() context: ResolverContext\n ): Promise<Project> {\n const { domain } = context.state\n\n return await getRepository(Project).findOne({\n where: { domain: { id: domain.id }, buildingComplex: { id: buildingComplexId } }\n })\n }\n\n @FieldResolver(type => [Task], { nullable: true })\n async rootTasks(@Root() project: Project): Promise<Task[]> {\n return await getRepository(Task).find({\n where: {\n project: { id: project.id },\n parent: IsNull()\n }\n })\n }\n\n @FieldResolver(type => Attachment)\n async mainPhoto(@Root() project: Project): Promise<string | Attachment> {\n const attachment: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: project.domainId },\n refBy: project.id\n },\n order: { createdAt: 'ASC' }\n })\n\n return attachment\n }\n\n @FieldResolver(type => BuildingComplex)\n async buildingComplex(@Root() project: Project): Promise<BuildingComplex> {\n return await getRepository(BuildingComplex).findOneBy({ id: project.buildingComplexId })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() project: Project): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: project.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() project: Project): Promise<User> {\n return await getRepository(User).findOneBy({ id: project.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() project: Project): Promise<User> {\n return await getRepository(User).findOneBy({ id: project.creatorId })\n }\n}\n"]}
1
+ {"version":3,"file":"project-query.js","sourceRoot":"","sources":["../../../server/service/project/project-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Arg, Args, Ctx } from 'type-graphql'\nimport { IsNull } from 'typeorm'\nimport { Domain, getRepository, ListParam, getQueryBuilderFromListParams } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Project } from './project'\nimport { Task } from '../task/task'\nimport { ProjectList } from './project-type'\nimport { Attachment } from '@things-factory/attachment-base'\nimport { BuildingComplex } from '@dssp/building-complex'\n\n@Resolver(Project)\nexport class ProjectQuery {\n @Query(returns => Project!, { nullable: true, description: 'To fetch a Project' })\n async project(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Project> {\n const { domain } = context.state\n\n return await getRepository(Project).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => ProjectList, { description: '프로젝트 리스트' })\n async projects(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ProjectList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(Project),\n searchables: ['name', 'description', 'state']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Query(returns => Project!, { nullable: true, description: 'To fetch a Project' })\n async projectByBuildingComplexId(\n @Arg('buildingComplexId') buildingComplexId: string,\n @Ctx() context: ResolverContext\n ): Promise<Project> {\n const { domain } = context.state\n\n return await getRepository(Project).findOne({\n where: { domain: { id: domain.id }, buildingComplex: { id: buildingComplexId } }\n })\n }\n\n @FieldResolver(type => [Task], { nullable: true })\n async rootTasks(@Root() project: Project): Promise<Task[]> {\n return await getRepository(Task).find({\n where: {\n project: { id: project.id },\n parent: IsNull()\n }\n })\n }\n\n @FieldResolver(type => Attachment)\n async mainPhoto(@Root() project: Project): Promise<string | Attachment> {\n const attachment: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: project.domainId },\n refBy: project.id\n },\n order: { createdAt: 'ASC' }\n })\n\n return attachment\n }\n\n @FieldResolver(type => Attachment)\n async scheduleTable(@Root() project: Project): Promise<Attachment | undefined> {\n const attachment: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: project.domainId },\n refBy: project.id,\n refType: Project.name + '_schedule_table'\n }\n })\n\n return attachment\n }\n\n @FieldResolver(type => BuildingComplex)\n async buildingComplex(@Root() project: Project): Promise<BuildingComplex> {\n return await getRepository(BuildingComplex).findOneBy({ id: project.buildingComplexId })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() project: Project): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: project.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() project: Project): Promise<User> {\n return await getRepository(User).findOneBy({ id: project.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() project: Project): Promise<User> {\n return await getRepository(User).findOneBy({ id: project.creatorId })\n }\n}\n"]}
@@ -20,6 +20,10 @@ export declare class ProjectPatch {
20
20
  structuralSafetyRate?: number;
21
21
  buildingComplex?: BuildingComplexPatch;
22
22
  }
23
+ export declare class UploadProjectScheduleTable {
24
+ projectId: string;
25
+ scheduleTable?: FileUpload;
26
+ }
23
27
  export declare class ProjectList {
24
28
  items: Project[];
25
29
  total: number;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProjectList = exports.ProjectPatch = exports.NewProject = void 0;
3
+ exports.ProjectList = exports.UploadProjectScheduleTable = exports.ProjectPatch = exports.NewProject = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
6
  const project_1 = require("./project");
@@ -75,6 +75,20 @@ ProjectPatch = tslib_1.__decorate([
75
75
  (0, type_graphql_1.InputType)()
76
76
  ], ProjectPatch);
77
77
  exports.ProjectPatch = ProjectPatch;
78
+ let UploadProjectScheduleTable = class UploadProjectScheduleTable {
79
+ };
80
+ tslib_1.__decorate([
81
+ (0, type_graphql_1.Field)({ nullable: false, description: '수정할 프로젝트의 ID' }),
82
+ tslib_1.__metadata("design:type", String)
83
+ ], UploadProjectScheduleTable.prototype, "projectId", void 0);
84
+ tslib_1.__decorate([
85
+ (0, type_graphql_1.Field)(type => GraphQLUpload_js_1.default, { nullable: true, description: '프로젝트 공정표 업로드' }),
86
+ tslib_1.__metadata("design:type", Object)
87
+ ], UploadProjectScheduleTable.prototype, "scheduleTable", void 0);
88
+ UploadProjectScheduleTable = tslib_1.__decorate([
89
+ (0, type_graphql_1.InputType)()
90
+ ], UploadProjectScheduleTable);
91
+ exports.UploadProjectScheduleTable = UploadProjectScheduleTable;
78
92
  let ProjectList = class ProjectList {
79
93
  };
80
94
  tslib_1.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"project-type.js","sourceRoot":"","sources":["../../../server/service/project/project-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { ObjectType, Field, InputType, Int, Float } from 'type-graphql'\nimport { Project } from './project'\nimport type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { ObjectRef, ScalarObject } from '@things-factory/shell'\nimport { BuildingComplexPatch } from '@dssp/building-complex'\n\n@InputType()\nexport class NewProject {\n @Field({ nullable: false, description: '프로젝트 이름' })\n name: string\n\n @Field(type => ObjectRef, { nullable: true, description: '연관된 건물 복합체 정보 (선택 사항)' })\n buildingComplex?: ObjectRef\n}\n\n@InputType()\nexport class ProjectPatch {\n @Field({ nullable: false, description: '수정할 프로젝트의 ID' })\n id: string\n\n @Field({ nullable: false, description: '프로젝트 이름' })\n name: string\n\n @Field({ nullable: true, description: '프로젝트 착공일정' })\n startDate?: string\n\n @Field({ nullable: true, description: '프로젝트 준공일정' })\n endDate?: string\n\n @Field(type => GraphQLUpload, { nullable: true, description: '프로젝트 대표 사진 업로드' })\n mainPhotoUpload?: FileUpload\n\n @Field(type => Float, { nullable: true, description: '프로젝트 전체 진행현황 (%)' })\n totalProgress?: number\n\n @Field(type => Float, { nullable: true, description: '프로젝트 주간 진행현황 (%)' })\n weeklyProgress?: number\n\n @Field(type => Float, { nullable: true, description: '프로젝트 KPI' })\n kpi?: number\n\n @Field(type => Float, { nullable: true, description: '검측/통과 비율 (%)' })\n inspPassRate?: number\n\n @Field(type => Float, { nullable: true, description: '로봇 작업 진행율 (%)' })\n robotProgressRate?: number\n\n @Field(type => Float, { nullable: true, description: '구조 안전도 (%)' })\n structuralSafetyRate?: number\n\n @Field({ nullable: true })\n buildingComplex?: BuildingComplexPatch\n}\n\n@ObjectType()\nexport class ProjectList {\n @Field(type => [Project], { description: '프로젝트 리스트 항목들' })\n items: Project[]\n\n @Field(type => Int, { description: '전체 프로젝트 수' })\n total: number\n}\n"]}
1
+ {"version":3,"file":"project-type.js","sourceRoot":"","sources":["../../../server/service/project/project-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { ObjectType, Field, InputType, Int, Float } from 'type-graphql'\nimport { Project } from './project'\nimport type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { ObjectRef, ScalarObject } from '@things-factory/shell'\nimport { BuildingComplexPatch } from '@dssp/building-complex'\n\n@InputType()\nexport class NewProject {\n @Field({ nullable: false, description: '프로젝트 이름' })\n name: string\n\n @Field(type => ObjectRef, { nullable: true, description: '연관된 건물 복합체 정보 (선택 사항)' })\n buildingComplex?: ObjectRef\n}\n\n@InputType()\nexport class ProjectPatch {\n @Field({ nullable: false, description: '수정할 프로젝트의 ID' })\n id: string\n\n @Field({ nullable: false, description: '프로젝트 이름' })\n name: string\n\n @Field({ nullable: true, description: '프로젝트 착공일정' })\n startDate?: string\n\n @Field({ nullable: true, description: '프로젝트 준공일정' })\n endDate?: string\n\n @Field(type => GraphQLUpload, { nullable: true, description: '프로젝트 대표 사진 업로드' })\n mainPhotoUpload?: FileUpload\n\n @Field(type => Float, { nullable: true, description: '프로젝트 전체 진행현황 (%)' })\n totalProgress?: number\n\n @Field(type => Float, { nullable: true, description: '프로젝트 주간 진행현황 (%)' })\n weeklyProgress?: number\n\n @Field(type => Float, { nullable: true, description: '프로젝트 KPI' })\n kpi?: number\n\n @Field(type => Float, { nullable: true, description: '검측/통과 비율 (%)' })\n inspPassRate?: number\n\n @Field(type => Float, { nullable: true, description: '로봇 작업 진행율 (%)' })\n robotProgressRate?: number\n\n @Field(type => Float, { nullable: true, description: '구조 안전도 (%)' })\n structuralSafetyRate?: number\n\n @Field({ nullable: true })\n buildingComplex?: BuildingComplexPatch\n}\n\n@InputType()\nexport class UploadProjectScheduleTable {\n @Field({ nullable: false, description: '수정할 프로젝트의 ID' })\n projectId: string\n\n @Field(type => GraphQLUpload, { nullable: true, description: '프로젝트 공정표 업로드' })\n scheduleTable?: FileUpload\n}\n\n@ObjectType()\nexport class ProjectList {\n @Field(type => [Project], { description: '프로젝트 리스트 항목들' })\n items: Project[]\n\n @Field(type => Int, { description: '전체 프로젝트 수' })\n total: number\n}\n"]}
@@ -33,4 +33,5 @@ export declare class Project {
33
33
  creatorId?: string;
34
34
  updater?: User;
35
35
  updaterId?: string;
36
+ scheduleTable?: Attachment;
36
37
  }
@@ -136,6 +136,10 @@ tslib_1.__decorate([
136
136
  (0, typeorm_1.RelationId)((project) => project.updater),
137
137
  tslib_1.__metadata("design:type", String)
138
138
  ], Project.prototype, "updaterId", void 0);
139
+ tslib_1.__decorate([
140
+ (0, type_graphql_1.Field)(type => attachment_base_1.Attachment, { nullable: true }),
141
+ tslib_1.__metadata("design:type", attachment_base_1.Attachment)
142
+ ], Project.prototype, "scheduleTable", void 0);
139
143
  Project = tslib_1.__decorate([
140
144
  (0, type_graphql_1.ObjectType)({ description: '프로젝트' }),
141
145
  (0, typeorm_1.Entity)(),
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../server/service/project/project.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CreateDateColumn,\n UpdateDateColumn,\n DeleteDateColumn,\n Entity,\n Index,\n Column,\n RelationId,\n ManyToOne,\n OneToOne,\n OneToMany,\n JoinColumn,\n PrimaryGeneratedColumn\n} from 'typeorm'\nimport { ObjectType, Field, ID } from 'type-graphql'\n\nimport { Domain, roundTransformer } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Task } from '../task/task'\nimport { BuildingComplex } from '@dssp/building-complex'\nimport { Attachment } from '@things-factory/attachment-base'\n\nexport enum ProjectState {\n 'ONGOING' = '10',\n 'COMPLETED' = '20'\n}\n\n@ObjectType({ description: '프로젝트' })\n@Entity()\n@Index('ix_project_building', (project: Project) => [project.buildingComplex], { unique: true, where: '\"deleted_at\" IS NULL' })\nexport class Project {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field({ nullable: true })\n domain?: Domain\n\n @RelationId((project: Project) => project.domain)\n domainId?: string\n\n @Column({ nullable: false, comment: '프로젝트 이름' })\n @Field({ nullable: false })\n name?: string\n\n @Column({ nullable: false, default: ProjectState.ONGOING, comment: '프로젝트 상태 (10: 진행중, 20: 완료)' })\n @Field({ nullable: false })\n state?: ProjectState\n\n @Column({ type: 'date', nullable: true, comment: '착공일정' })\n @Field({ nullable: true })\n startDate?: string\n\n @Column({ type: 'date', nullable: true, comment: '준공일정' })\n @Field({ nullable: true })\n endDate?: string\n\n // 대표 사진\n @Field(type => Attachment, { nullable: true })\n mainPhoto?: Attachment\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: '전체 진행현황' })\n @Field({ nullable: true })\n totalProgress?: number\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: '주간 진행현황' })\n @Field({ nullable: true })\n weeklyProgress?: number\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: 'KPI' })\n @Field({ nullable: true })\n kpi?: number\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: '검측/통과 비율' })\n @Field({ nullable: true })\n inspPassRate?: number\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: '로봇 작업 진행율' })\n @Field({ nullable: true })\n robotProgressRate?: number\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: '구조 안전도' })\n @Field({ nullable: true })\n structuralSafetyRate?: number\n\n // 단지 정보 (1:1 테이블 참조)\n @OneToOne(type => BuildingComplex)\n @JoinColumn()\n @Field({ nullable: true })\n buildingComplex?: BuildingComplex\n\n @RelationId((project: Project) => project.buildingComplex)\n buildingComplexId?: string\n\n // 작업 정보 (하위 테이블 참조)\n @OneToMany(() => Task, task => task.project)\n @Field(() => [Task], { nullable: true })\n tasks?: Task[]\n\n // 루트 작업 정보 (부모가 없는 상위 작업)\n @Field(() => [Task], { nullable: true })\n rootTasks?: Task[]\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @DeleteDateColumn()\n @Field({ nullable: true })\n deletedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((project: Project) => project.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((project: Project) => project.updater)\n updaterId?: string\n}\n"]}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../server/service/project/project.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CreateDateColumn,\n UpdateDateColumn,\n DeleteDateColumn,\n Entity,\n Index,\n Column,\n RelationId,\n ManyToOne,\n OneToOne,\n OneToMany,\n JoinColumn,\n PrimaryGeneratedColumn\n} from 'typeorm'\nimport { ObjectType, Field, ID } from 'type-graphql'\n\nimport { Domain, roundTransformer } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Task } from '../task/task'\nimport { BuildingComplex } from '@dssp/building-complex'\nimport { Attachment } from '@things-factory/attachment-base'\n\nexport enum ProjectState {\n 'ONGOING' = '10',\n 'COMPLETED' = '20'\n}\n\n@ObjectType({ description: '프로젝트' })\n@Entity()\n@Index('ix_project_building', (project: Project) => [project.buildingComplex], { unique: true, where: '\"deleted_at\" IS NULL' })\nexport class Project {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field({ nullable: true })\n domain?: Domain\n\n @RelationId((project: Project) => project.domain)\n domainId?: string\n\n @Column({ nullable: false, comment: '프로젝트 이름' })\n @Field({ nullable: false })\n name?: string\n\n @Column({ nullable: false, default: ProjectState.ONGOING, comment: '프로젝트 상태 (10: 진행중, 20: 완료)' })\n @Field({ nullable: false })\n state?: ProjectState\n\n @Column({ type: 'date', nullable: true, comment: '착공일정' })\n @Field({ nullable: true })\n startDate?: string\n\n @Column({ type: 'date', nullable: true, comment: '준공일정' })\n @Field({ nullable: true })\n endDate?: string\n\n // 대표 사진\n @Field(type => Attachment, { nullable: true })\n mainPhoto?: Attachment\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: '전체 진행현황' })\n @Field({ nullable: true })\n totalProgress?: number\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: '주간 진행현황' })\n @Field({ nullable: true })\n weeklyProgress?: number\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: 'KPI' })\n @Field({ nullable: true })\n kpi?: number\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: '검측/통과 비율' })\n @Field({ nullable: true })\n inspPassRate?: number\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: '로봇 작업 진행율' })\n @Field({ nullable: true })\n robotProgressRate?: number\n\n @Column({ type: 'float', nullable: true, default: 0, transformer: roundTransformer, comment: '구조 안전도' })\n @Field({ nullable: true })\n structuralSafetyRate?: number\n\n // 단지 정보 (1:1 테이블 참조)\n @OneToOne(type => BuildingComplex)\n @JoinColumn()\n @Field({ nullable: true })\n buildingComplex?: BuildingComplex\n\n @RelationId((project: Project) => project.buildingComplex)\n buildingComplexId?: string\n\n // 작업 정보 (하위 테이블 참조)\n @OneToMany(() => Task, task => task.project)\n @Field(() => [Task], { nullable: true })\n tasks?: Task[]\n\n // 루트 작업 정보 (부모가 없는 상위 작업)\n @Field(() => [Task], { nullable: true })\n rootTasks?: Task[]\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @DeleteDateColumn()\n @Field({ nullable: true })\n deletedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((project: Project) => project.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((project: Project) => project.updater)\n updaterId?: string\n\n // 공정표 파일\n @Field(type => Attachment, { nullable: true })\n scheduleTable?: Attachment\n}\n"]}