11import { Injectable , Logger } from "@nestjs/common" ;
2- import { MemberService } from "../member/member.service" ;
32import { EntityManager } from "typeorm" ;
43import * as crypto from "crypto" ;
54import { ProjectQueryService } from "./project-query/project-query.service" ;
65import { UserQueryService } from "../user/user-query/user-query.service" ;
7- import { ADMIN_NAME , ADMIN_EMAIL , INTERNAL_SERVER_ERROR } from "../../common/helpers/constants" ;
6+ import { INTERNAL_SERVER_ERROR } from "../../common/helpers/constants" ;
87import dateUtils from "../../common/helpers/dateUtils" ;
9- import { gravatar } from "../../common/helpers/gravatar" ;
10- import { uuidService } from "../../common/helpers/uuid" ;
118import { CreateProjectDto , ProjectDto } from "../../common/types/dto/project.dto" ;
129import { Project } from "../../db/entities/project.entity" ;
1310import { ApiResponse } from "../../common/types/dto/response.dto" ;
14- import { MemberRole , UserStatus } from "@traceo/types" ;
11+ import { UserStatus } from "@traceo/types" ;
1512import { RequestContext } from "../../common/middlewares/request-context/request-context.model" ;
16- import { DashboardService } from "../dashboard/dashboard.service" ;
17- import { initialDashboardPanels } from "../dashboard/base.dashboards" ;
13+ import { ProjectFactory } from "./project.factory" ;
1814
1915@Injectable ( )
2016export class ProjectService {
2117 private readonly logger : Logger ;
2218
2319 constructor (
2420 private readonly entityManager : EntityManager ,
25- private readonly memberService : MemberService ,
2621 private readonly projectQueryService : ProjectQueryService ,
2722 private readonly userQueryService : UserQueryService ,
28- private readonly dashboardService : DashboardService
23+ private readonly projectFactory : ProjectFactory
2924 ) {
3025 this . logger = new Logger ( ProjectService . name ) ;
3126 }
3227
3328 public async create ( dto : CreateProjectDto ) : Promise < ApiResponse < Project > > {
34- const { id, username } = RequestContext . user ;
29+ const { id } = RequestContext . user ;
3530
3631 return this . entityManager
3732 . transaction ( async ( manager ) => {
@@ -47,46 +42,13 @@ export class ProjectService {
4742 throw new Error ( INTERNAL_SERVER_ERROR ) ;
4843 }
4944
50- const url = gravatar . url ( dto . name , "identicon" ) ;
51- const payload : Partial < Project > = {
52- ...dto ,
53- id : uuidService . generate ( ) ,
54- createdAt : dateUtils . toUnix ( ) ,
55- updatedAt : dateUtils . toUnix ( ) ,
56- owner : user ,
57- gravatar : url
58- } ;
59-
60- const project = await manager . getRepository ( Project ) . save ( payload ) ;
61- if ( username !== ADMIN_NAME ) {
62- const admin = await this . userQueryService . getDtoBy ( { email : ADMIN_EMAIL } ) ;
63- await this . memberService . createMember (
64- admin ,
65- project ,
66- MemberRole . ADMINISTRATOR ,
67- manager
68- ) ;
45+ const project = await this . projectFactory . create ( user , dto , manager ) ;
46+ if ( ! project ) {
47+ return new ApiResponse ( "error" , "Error while creating the project. Please try again later." , undefined ) ;
6948 }
7049
71- await this . memberService . createMember ( user , project , MemberRole . ADMINISTRATOR , manager ) ;
72-
73- // Create basic dashboard
74- const dashboard = await this . dashboardService . create (
75- {
76- name : "Base Dashboard" ,
77- description : undefined ,
78- isEditable : false ,
79- isTimePicker : false ,
80- isBase : true
81- } ,
82- project ,
83- manager
84- ) ;
85-
86- await this . update ( project . id , { mainDashboardId : dashboard . id } , manager ) ;
87-
8850 return new ApiResponse ( "success" , "Project successfully created" , {
89- redirectUrl : `/project/${ project . id } /dashboard/${ dashboard . id } ` ,
51+ redirectUrl : `/project/${ project . id } /dashboard/${ project . mainDashboardId } ` ,
9052 id : project . id
9153 } ) ;
9254 } )
0 commit comments