Skip to content

Commit

Permalink
fix(platform-server): delete relevant files in storage when property …
Browse files Browse the repository at this point in the history
…is deleted
  • Loading branch information
lizimeow committed Dec 14, 2022
1 parent abf6783 commit e30b9b5
Show file tree
Hide file tree
Showing 15 changed files with 55 additions and 170 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { faker } from '@faker-js/faker'

import { Environment, PageWithEnv, SnapshotReport } from '@perfsee/platform-server/db'
import { Environment } from '@perfsee/platform-server/db'
import { InternalIdService } from '@perfsee/platform-server/helpers'
import test, { createMock, initTestDB, createDBTestingModule, create } from '@perfsee/platform-server/test'

import { mockCreateReport } from '../../snapshot/snapshot-report/__tests__/utils'
import { SnapshotReportService } from '../../snapshot/snapshot-report/service'
import { EnvironmentService } from '../service'

Expand Down Expand Up @@ -93,22 +92,3 @@ test.serial('update environment', async (t) => {
t.is(payload.name, updated.name)
t.deepEqual(payload.headers, updated.headers)
})

test.serial('delete environment', async (t) => {
const projectId = 1
const report = await mockCreateReport(projectId)
await create(PageWithEnv, { pageId: report.pageId, envId: report.envId })

const service = t.context.module.get(EnvironmentService)
const environment = await Environment.findOneByOrFail({ id: report.envId })

await service.deleteEnvironment(environment)

const noEnvironment = await Environment.findOneBy({ id: environment.id })
const noReport = await SnapshotReport.findOneBy({ id: report.id })
const pageWithEnv = await PageWithEnv.findBy({ envId: environment.id })

t.falsy(noEnvironment)
t.falsy(noReport)
t.is(pageWithEnv.length, 0)
})
3 changes: 2 additions & 1 deletion packages/platform-server/src/modules/environment/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,13 @@ import { DBModule } from '@perfsee/platform-server/db'

import { NotificationModule } from '../notification'
import { ProjectModule } from '../project'
import { SnapshotReportModule } from '../snapshot/snapshot-report'

import { EnvironmentResolver, ProjectEnvironmentResolver } from './resolver'
import { EnvironmentService } from './service'

@Module({
imports: [ProjectModule, DBModule, forwardRef(() => NotificationModule)],
imports: [ProjectModule, DBModule, forwardRef(() => NotificationModule), SnapshotReportModule],
providers: [EnvironmentResolver, ProjectEnvironmentResolver, EnvironmentService],
exports: [EnvironmentService],
})
Expand Down
13 changes: 4 additions & 9 deletions packages/platform-server/src/modules/environment/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@ limitations under the License.
*/

import { Injectable } from '@nestjs/common'
import { ModuleRef } from '@nestjs/core'
import { In } from 'typeorm'

import { Cron, CronExpression } from '@perfsee/platform-server/cron'
import { DBService, Environment, InternalIdUsage, PageWithEnv } from '@perfsee/platform-server/db'
import { Environment, InternalIdUsage } from '@perfsee/platform-server/db'
import { UserError } from '@perfsee/platform-server/error'
import { InternalIdService } from '@perfsee/platform-server/helpers'
import { Logger } from '@perfsee/platform-server/logger'
Expand All @@ -35,11 +34,10 @@ export class EnvironmentService {
loader = createDataLoader((ids: number[]) => Environment.findBy({ id: In(ids) }))

constructor(
private readonly db: DBService,
private readonly moduleRef: ModuleRef,
private readonly notification: NotificationService,
private readonly logger: Logger,
private readonly internalIdService: InternalIdService,
private readonly reportService: SnapshotReportService,
) {}

getEnvironments(projectId: number) {
Expand Down Expand Up @@ -91,11 +89,8 @@ export class EnvironmentService {
const { id, projectId, name } = env

this.logger.log('start delete environment', { id, projectId, name })
await this.db.transaction(async (manager) => {
await this.moduleRef.get(SnapshotReportService, { strict: false }).deleteSnapshotsReports(manager, { envId: id })
await manager.getRepository(PageWithEnv).delete({ envId: id })
await manager.remove(env)
})
await this.reportService.deleteSnapshotsReports({ envId: id })
await Environment.delete(id)
}

@Cron(CronExpression.EVERY_DAY_AT_11AM, { timeZone: 'Asia/Shanghai', exclusive: true, name: 'cookie-check' })
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { faker } from '@faker-js/faker'
import {
Project,
Page,
SnapshotReport,
PageWithEnv,
PageWithProfile,
Environment,
Expand All @@ -20,8 +19,6 @@ import {
updatePageMutation,
} from '@perfsee/schema'

import { mockCreateReport } from '../../snapshot/snapshot-report/__tests__/utils'

let gqlClient: GraphQLTestingClient
let slug: string
let user: User
Expand Down Expand Up @@ -137,32 +134,6 @@ test.serial('update page', async (t) => {
t.is(pageWithProfile.length, 1)
})

test.serial('delete page', async (t) => {
const report = await mockCreateReport(1)
const page = await Page.findOneByOrFail({ id: report.pageId })
await create(PageWithEnv, { pageId: page.id, envId: 1 })
await create(PageWithProfile, { pageId: page.id, profileId: 1 })

const response = await gqlClient.query({
query: deletePageMutation,
variables: {
projectId: slug,
id: page.iid,
},
})

const noPage = await Page.findOneBy({ id: page.id })
const noReport = await SnapshotReport.findOneBy({ id: report.id })
const pageWithEnv = await PageWithEnv.findBy({ pageId: page.id })
const pageWithProfile = await PageWithProfile.findBy({ pageId: page.id })

t.true(response.deletePage)
t.falsy(noPage)
t.falsy(noReport)
t.is(pageWithEnv.length, 0)
t.is(pageWithProfile.length, 0)
})

test.serial('create page with no permission', async (t) => {
await gqlClient.loginAs(user)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,11 @@ import {
PageWithEnv,
Profile,
Environment,
SnapshotReport,
} from '@perfsee/platform-server/db'
import { seedProjectProperty } from '@perfsee/platform-server/db/fixtures'
import { InternalIdService } from '@perfsee/platform-server/helpers'
import test, { createMock, initTestDB, createDBTestingModule, create } from '@perfsee/platform-server/test'

import { mockCreateReport } from '../../snapshot/snapshot-report/__tests__/utils'
import { SnapshotReportService } from '../../snapshot/snapshot-report/service'
import { PageService } from '../service'
import { CreatePageInput } from '../types'
Expand Down Expand Up @@ -177,27 +175,3 @@ test.serial('update page', async (t) => {
t.is(pageWithEnv.length, 1)
t.is(pageWithEnv[0].envId, env.id)
})

test.serial('delete page', async (t) => {
const projectId = 1
const report = await mockCreateReport(projectId)
const page = await Page.findOneByOrFail({ id: report.pageId })
await create(PageWithEnv, { pageId: page.id, envId: 1 })
await create(PageWithProfile, { pageId: page.id, profileId: 1 })
await create(PageWithCompetitor, { pageId: page.id, competitorId: 1 })
const service = t.context.module.get(PageService)

await service.deletePage(page)

const noPage = await Page.findOneBy({ id: page.id })
const noReport = await SnapshotReport.findOneBy({ id: report.id })
const pageWithProfile = await PageWithProfile.findBy({ pageId: page.id })
const pageWithEnv = await PageWithEnv.findBy({ pageId: page.id })
const pageWithCompetitor = await PageWithCompetitor.findBy({ pageId: page.id })

t.falsy(noPage)
t.falsy(noReport)
t.is(pageWithCompetitor.length, 0)
t.is(pageWithEnv.length, 0)
t.is(pageWithProfile.length, 0)
})
3 changes: 2 additions & 1 deletion packages/platform-server/src/modules/page/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ import { Module } from '@nestjs/common'
import { DBModule } from '@perfsee/platform-server/db'

import { ProjectModule } from '../project'
import { SnapshotReportModule } from '../snapshot/snapshot-report'

import { PageResolver, ProjectPageResolver } from './resolver'
import { PageService } from './service'

@Module({
imports: [ProjectModule, DBModule],
imports: [ProjectModule, DBModule, SnapshotReportModule],
providers: [PageResolver, ProjectPageResolver, PageService],
exports: [PageService],
})
Expand Down
18 changes: 4 additions & 14 deletions packages/platform-server/src/modules/page/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ limitations under the License.
*/

import { Injectable } from '@nestjs/common'
import { ModuleRef } from '@nestjs/core'
import { difference, isNil, omit, omitBy } from 'lodash'
import { EntityManager, In } from 'typeorm'

Expand Down Expand Up @@ -55,8 +54,8 @@ export class PageService {

constructor(
private readonly db: DBService,
private readonly moduleRef: ModuleRef,
private readonly internalIdService: InternalIdService,
private readonly reportService: SnapshotReportService,
private readonly logger: Logger,
private readonly redis: Redis,
) {}
Expand Down Expand Up @@ -257,18 +256,9 @@ export class PageService {
const { id, projectId, name } = page

this.logger.log('start delete page', { id, projectId, name })
await this.db.transaction(async (manager) => {
await this.moduleRef.get(SnapshotReportService, { strict: false }).deleteSnapshotsReports(manager, { pageId: id })

await manager.getRepository(PageWithEnv).delete({ pageId: id })
await manager.getRepository(PageWithProfile).delete({ pageId: id })
if (page.isCompetitor) {
await manager.getRepository(PageWithCompetitor).delete({ competitorId: id })
} else {
await manager.getRepository(PageWithCompetitor).delete({ pageId: id })
}
await manager.remove(page)
})
await this.reportService.deleteSnapshotsReports({ pageId: id })

await Page.delete(id)
}

async createPage(projectId: number, input: CreatePageInput) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { faker } from '@faker-js/faker'

import { PageWithProfile, Profile, SnapshotReport } from '@perfsee/platform-server/db'
import { Profile } from '@perfsee/platform-server/db'
import { InternalIdService } from '@perfsee/platform-server/helpers'
import test, { createMock, initTestDB, createDBTestingModule, create } from '@perfsee/platform-server/test'

import { mockCreateReport } from '../../snapshot/snapshot-report/__tests__/utils'
import { SnapshotReportService } from '../../snapshot/snapshot-report/service'
import { ProfileService } from '../service'

Expand Down Expand Up @@ -72,22 +71,3 @@ test.serial('update profile', async (t) => {

t.is(payload.name, updatedProfile.name)
})

test.serial('delete profile', async (t) => {
const projectId = 1
const report = await mockCreateReport(projectId)
await create(PageWithProfile, { pageId: report.pageId, profileId: report.profileId })

const service = t.context.module.get(ProfileService)
const profile = await Profile.findOneByOrFail({ id: report.profileId })

await service.deleteProfile(profile)

const noProfile = await Profile.findOneBy({ id: profile.id })
const noReport = await SnapshotReport.findOneBy({ id: report.id })
const pageWithProfile = await PageWithProfile.findBy({ profileId: profile.id })

t.falsy(noProfile)
t.falsy(noReport)
t.is(pageWithProfile.length, 0)
})
3 changes: 2 additions & 1 deletion packages/platform-server/src/modules/profile/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ import { Module } from '@nestjs/common'
import { DBModule } from '@perfsee/platform-server/db'

import { ProjectModule } from '../project'
import { SnapshotReportModule } from '../snapshot/snapshot-report'

import { ProfileResolver, ProjectProfileResolver } from './resolver'
import { ProfileService } from './service'

@Module({
imports: [ProjectModule, DBModule],
imports: [ProjectModule, DBModule, SnapshotReportModule],
providers: [ProfileResolver, ProjectProfileResolver, ProfileService],
exports: [ProfileService],
})
Expand Down
17 changes: 5 additions & 12 deletions packages/platform-server/src/modules/profile/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ limitations under the License.
*/

import { Injectable } from '@nestjs/common'
import { ModuleRef } from '@nestjs/core'
import { In } from 'typeorm'

import { DBService, InternalIdUsage, PageWithProfile, Profile } from '@perfsee/platform-server/db'
import { InternalIdUsage, Profile } from '@perfsee/platform-server/db'
import { InternalIdService } from '@perfsee/platform-server/helpers'
import { Logger } from '@perfsee/platform-server/logger'
import { createDataLoader } from '@perfsee/platform-server/utils'
Expand All @@ -36,9 +35,8 @@ export class ProfileService {
)

constructor(
private readonly db: DBService,
private readonly moduleRef: ModuleRef,
private readonly internalIdService: InternalIdService,
private readonly reportService: SnapshotReportService,
private readonly logger: Logger,
) {}

Expand All @@ -62,14 +60,9 @@ export class ProfileService {

async deleteProfile(profile: Profile) {
const { id, projectId, name } = profile

this.logger.log('start delete profile', { id, projectId, name })
await this.db.transaction(async (manager) => {
await this.moduleRef
.get(SnapshotReportService, { strict: false })
.deleteSnapshotsReports(manager, { profileId: id })
await manager.getRepository(PageWithProfile).delete({ profileId: id })
await manager.remove(profile)
})

await this.reportService.deleteSnapshotsReports({ profileId: id })
await Profile.delete(id)
}
}
2 changes: 1 addition & 1 deletion packages/platform-server/src/modules/snapshot/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ export class SnapshotService implements OnApplicationBootstrap {

await this.db.transaction(async (manager) => {
await manager.getRepository(AppVersion).delete({ snapshotId: id })
await this.reportService.deleteSnapshotsReports(manager, { snapshotId: id })
await this.reportService.deleteSnapshotsReports({ snapshotId: id })
await manager.remove(snapshot)
})
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,14 @@ import { Module } from '@nestjs/common'

import { StorageModule } from '@perfsee/platform-server/storage'

import { EnvironmentModule } from '../../environment'
import { PageModule } from '../../page'
import { ProfileModule } from '../../profile'
import { ProjectModule } from '../../project'
import { ProjectUsageModule } from '../../project-usage'

import { ProjectReportResolver, ReportResolver, SnapshotReportResolver } from './resolver'
import { SnapshotReportService } from './service'

@Module({
imports: [StorageModule, ProjectModule, EnvironmentModule, PageModule, ProfileModule, ProjectUsageModule],
imports: [StorageModule, ProjectModule, ProjectUsageModule],
providers: [SnapshotReportService, ReportResolver, SnapshotReportResolver, ProjectReportResolver],
exports: [SnapshotReportService],
})
Expand Down

0 comments on commit e30b9b5

Please sign in to comment.