Skip to content

Commit

Permalink
Merge pull request #1363 from undb-xyz/release/v0.6.1
Browse files Browse the repository at this point in the history
  • Loading branch information
nichenqin authored Jul 25, 2023
2 parents ad6a1df + daef5df commit f98c4a7
Show file tree
Hide file tree
Showing 191 changed files with 3,313 additions and 787 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
## v0.6.1

## v0.6.0

## v0.5.18
Expand Down
10 changes: 5 additions & 5 deletions apps/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@undb/backend",
"version": "0.0.0",
"dependencies": {
"@aws-sdk/client-s3": "^3.370.0",
"@aws-sdk/client-s3": "^3.374.0",
"@json2csv/plainjs": "^7.0.1",
"@liaoliaots/nestjs-redis-health": "^9.0.4",
"@mikro-orm/better-sqlite": "^5.7.13",
Expand All @@ -14,7 +14,7 @@
"@nestjs/core": "^10.1.0",
"@nestjs/cqrs": "^10.0.1",
"@nestjs/jwt": "^10.1.0",
"@nestjs/mongoose": "^10.0.0",
"@nestjs/mongoose": "^10.0.1",
"@nestjs/passport": "^10.0.0",
"@nestjs/platform-express": "^10.1.0",
"@nestjs/schedule": "^3.0.1",
Expand All @@ -25,7 +25,7 @@
"@temporalio/common": "^1.8.1",
"@temporalio/worker": "^1.8.1",
"@temporalio/workflow": "^1.8.1",
"@trpc/server": "^10.34.0",
"@trpc/server": "^10.35.0",
"@undb/cache": "^0.0.0",
"@undb/core": "^0.0.0",
"@undb/cqrs": "^0.0.0",
Expand All @@ -37,7 +37,7 @@
"@undb/trpc": "^0.0.0",
"aws-sdk-v3-nest": "^0.3.0",
"bcrypt": "^5.1.0",
"better-sqlite3": "^8.4.0",
"better-sqlite3": "^8.5.0",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.0",
"compression": "^1.7.4",
Expand All @@ -63,7 +63,7 @@
"reflect-metadata": "^0.1.13",
"rimraf": "^5.0.1",
"rxjs": "^7.8.1",
"ts-pattern": "^5.0.3",
"ts-pattern": "^5.0.4",
"ufo": "^1.1.2",
"unstorage": "^1.8.0",
"uuid": "^9.0.0",
Expand Down
5 changes: 4 additions & 1 deletion apps/backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { LoggerModule } from 'nestjs-pino'
import path from 'path'
import { v4 as uuid } from 'uuid'
import { AttachmentModule } from './attachment/attachment.module.js'
import { AuditModule } from './audit/audit.module.js'
import { AuthModule } from './auth/auth.module.js'
import { authConfig } from './configs/auth.config.js'
import { BaseConfigService } from './configs/base-config.service.js'
Expand Down Expand Up @@ -78,6 +79,7 @@ import { WebhookModule } from './webhook/webhook.module.js'
WebhookModule.register({}),
RealtimeModule,
ShareModule,
AuditModule,
],
})
export class AppModule implements OnModuleInit {
Expand All @@ -90,7 +92,8 @@ export class AppModule implements OnModuleInit {
) {}

async onModuleInit() {
const em = this.orm.em as EntityManager
const em = this.orm.em.fork() as EntityManager

if (this.config.seed) {
this.logger.log('seeding data...')
await em.getConnection().loadFile(path.resolve(process.cwd(), '../../data/data.sql')).catch(console.error)
Expand Down
24 changes: 24 additions & 0 deletions apps/backend/src/audit/adapters/audit-sqlite.query-model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { EntityManager } from '@mikro-orm/better-sqlite'
import { MikroORM, UseRequestContext } from '@mikro-orm/core'
import { Inject, Injectable } from '@nestjs/common'
import { type AuditSpecification } from '@undb/integrations'
import { AuditSqliteQueryModel } from '@undb/sqlite'

export const AUDIT_QUERY_MODEL = Symbol('AUDIT_QUERY_MODEL')

export const InjectAuditQueryModel = () => Inject(AUDIT_QUERY_MODEL)

@Injectable()
export class NestAuditSqliteQueryModel extends AuditSqliteQueryModel {
constructor(
public readonly orm: MikroORM,
em: EntityManager,
) {
super(em)
}

@UseRequestContext()
find(spec: AuditSpecification) {
return super.find(spec)
}
}
40 changes: 40 additions & 0 deletions apps/backend/src/audit/adapters/audit-sqlite.repository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { EntityManager } from '@mikro-orm/better-sqlite'
import { MikroORM, UseRequestContext } from '@mikro-orm/core'
import { Inject, Injectable } from '@nestjs/common'
import { Audit, type AuditSpecification } from '@undb/integrations'
import { AuditSqliteRepository } from '@undb/sqlite'
import { Option } from 'oxide.ts'

export const AUDIT_REPOSITORY = Symbol('AUDIT_REPOSITORY')

export const InjectAuditRepository = () => Inject(AUDIT_REPOSITORY)

@Injectable()
export class NestAuditSqliteRepository extends AuditSqliteRepository {
constructor(
public readonly orm: MikroORM,
em: EntityManager,
) {
super(em)
}

@UseRequestContext()
insert(audit: Audit): Promise<void> {
return super.insert(audit)
}

@UseRequestContext()
findOne(spec: AuditSpecification): Promise<Option<Audit>> {
return super.findOne(spec)
}

@UseRequestContext()
updateOneById(id: string, spec: AuditSpecification): Promise<void> {
return super.updateOneById(id, spec)
}

@UseRequestContext()
deleteOneById(id: string): Promise<void> {
return super.deleteOneById(id)
}
}
14 changes: 14 additions & 0 deletions apps/backend/src/audit/adapters/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Provider } from '@nestjs/common'
import { AUDIT_QUERY_MODEL, NestAuditSqliteQueryModel } from './audit-sqlite.query-model.js'
import { AUDIT_REPOSITORY, NestAuditSqliteRepository } from './audit-sqlite.repository.js'

export const adapters: Provider[] = [
{
provide: AUDIT_REPOSITORY,
useClass: NestAuditSqliteRepository,
},
{
provide: AUDIT_QUERY_MODEL,
useClass: NestAuditSqliteQueryModel,
},
]
12 changes: 12 additions & 0 deletions apps/backend/src/audit/audit.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Module } from '@nestjs/common'
import { CqrsModule } from '@nestjs/cqrs'
import { adapters } from './adapters/index.js'
import { NestAuditService } from './audit.service.js'
import { events } from './events/index.js'
import { queries } from './queries/index.js'

@Module({
imports: [CqrsModule],
providers: [NestAuditService, ...adapters, ...events, ...queries],
})
export class AuditModule {}
13 changes: 13 additions & 0 deletions apps/backend/src/audit/audit.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { Injectable } from '@nestjs/common'
import { AuditService, type IAuditRepository } from '@undb/integrations'
import { InjectAuditRepository } from './adapters/audit-sqlite.repository.js'

@Injectable()
export class NestAuditService extends AuditService {
constructor(
@InjectAuditRepository()
protected readonly repo: IAuditRepository,
) {
super(repo)
}
}
16 changes: 16 additions & 0 deletions apps/backend/src/audit/events/audit-record.events-handler.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { EventsHandler, IEventHandler } from '@nestjs/cqrs'
import { RecordEvents, RecordEventsClasses } from '@undb/core'
import { AuditRecordEventsHandler } from '@undb/cqrs'
import { InjectPinoLogger, PinoLogger } from 'nestjs-pino'
import { NestAuditService } from '../audit.service.js'

@EventsHandler(...RecordEventsClasses)
export class NestAuditRecordEventsHandler extends AuditRecordEventsHandler implements IEventHandler<RecordEvents> {
constructor(
protected readonly service: NestAuditService,
@InjectPinoLogger()
protected readonly logger: PinoLogger,
) {
super(service, logger)
}
}
3 changes: 3 additions & 0 deletions apps/backend/src/audit/events/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { NestAuditRecordEventsHandler } from './audit-record.events-handler.js'

export const events = [NestAuditRecordEventsHandler]
19 changes: 19 additions & 0 deletions apps/backend/src/audit/queries/get-record-audits.query-handler.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import type { IQueryHandler } from '@nestjs/cqrs'
import { QueryHandler } from '@nestjs/cqrs'
import type { IGetRecordAuditsOutput } from '@undb/cqrs'
import { GetRecordAuditsQuery, GetRecordAuditsQueryHandler } from '@undb/cqrs'
import { type IAuditQueryModel } from '@undb/integrations'
import { InjectAuditQueryModel } from '../adapters/audit-sqlite.query-model.js'

@QueryHandler(GetRecordAuditsQuery)
export class NestGetRecordAuditsQueryHandler
extends GetRecordAuditsQueryHandler
implements IQueryHandler<GetRecordAuditsQuery, IGetRecordAuditsOutput>
{
constructor(
@InjectAuditQueryModel()
protected readonly rm: IAuditQueryModel,
) {
super(rm)
}
}
3 changes: 3 additions & 0 deletions apps/backend/src/audit/queries/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { NestGetRecordAuditsQueryHandler } from './get-record-audits.query-handler.js'

export const queries = [NestGetRecordAuditsQueryHandler]
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { MikroORM, UseRequestContext } from '@mikro-orm/core'
import { Inject, Injectable } from '@nestjs/common'
import type { ClsStore, IClsService } from '@undb/core'
import { Record, Table, type IRecordSpec, type TableSchemaIdMap } from '@undb/core'
import { Record, Table, type IRecordSpec } from '@undb/core'
import { type IUnitOfWork } from '@undb/domain'
import type { EntityManager } from '@undb/sqlite'
import { RecordSqliteRepository } from '@undb/sqlite'
Expand All @@ -27,37 +27,37 @@ export class NestRecordSqliteRepository extends RecordSqliteRepository {
}

@UseRequestContext()
async insert(table: Table, record: Record, schema: TableSchemaIdMap): Promise<void> {
return super.insert(table, record, schema)
async insert(table: Table, record: Record): Promise<void> {
return super.insert(table, record)
}

@UseRequestContext()
async insertMany(table: Table, records: Record[], schema: TableSchemaIdMap): Promise<void> {
return super.insertMany(table, records, schema)
async insertMany(table: Table, records: Record[]): Promise<void> {
return super.insertMany(table, records)
}

@UseRequestContext()
async findOneById(tableId: string, id: string, schema: TableSchemaIdMap): Promise<Option<Record>> {
return super.findOneById(tableId, id, schema)
async findOneById(table: Table, id: string): Promise<Option<Record>> {
return super.findOneById(table, id)
}

@UseRequestContext()
async find(tableId: string, spec: IRecordSpec, schema: TableSchemaIdMap): Promise<Record[]> {
return super.find(tableId, spec, schema)
async find(table: Table, spec: IRecordSpec): Promise<Record[]> {
return super.find(table, spec)
}

@UseRequestContext()
async updateOneById(table: Table, id: string, schema: TableSchemaIdMap, spec: IRecordSpec): Promise<void> {
return super.updateOneById(table, id, schema, spec)
async updateOneById(table: Table, id: string, spec: IRecordSpec): Promise<void> {
return super.updateOneById(table, id, spec)
}

@UseRequestContext()
async deleteOneById(tableId: string, id: string, schema: TableSchemaIdMap): Promise<void> {
return super.deleteOneById(tableId, id, schema)
async deleteOneById(table: Table, id: string): Promise<void> {
return super.deleteOneById(table, id)
}

@UseRequestContext()
async deleteManyByIds(table: Table, ids: string[], schema: TableSchemaIdMap): Promise<void> {
return super.deleteManyByIds(table, ids, schema)
async deleteManyByIds(table: Table, ids: string[]): Promise<void> {
return super.deleteManyByIds(table, ids)
}
}
14 changes: 7 additions & 7 deletions apps/backend/src/openapi/openapi-doc.service.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Injectable } from '@nestjs/common'
import type { Table } from '@undb/core'
import { type IRecordQueryModel, type ITableRepository } from '@undb/core'
import type { IRecordRepository, Table } from '@undb/core'
import { type ITableRepository } from '@undb/core'
import { createRedocHTML, createTableSchema, type IPostmanCollectionConvertor } from '@undb/openapi'
import type { OpenAPIObject } from 'openapi3-ts/oas31'
import { InjectRecordQueryModel } from '../core/table/adapters/sqlite/record-sqlite.query-model.js'
import { InjectRecordRepository } from '../core/table/adapters/sqlite/record-sqlite.repository.js'
import { InjectTableRepository } from '../core/table/adapters/sqlite/table-sqlite.repository.js'
import { InjectPostmanConvertor } from './convertor/index.js'

Expand All @@ -12,16 +12,16 @@ export class OpenAPIDocService {
constructor(
@InjectTableRepository()
private readonly repo: ITableRepository,
@InjectRecordQueryModel()
private readonly recordRepo: IRecordQueryModel,
@InjectRecordRepository()
private readonly recordRepo: IRecordRepository,
@InjectPostmanConvertor()
private readonly postmanConvertor: IPostmanCollectionConvertor,
) {}

public async getSpec(table: Table, host: string): Promise<OpenAPIObject> {
const record = await this.recordRepo.findOne(table.id.value, null)
const record = (await this.recordRepo.findOne(table, null)).into()

const spec = createTableSchema(table, record.into(), host)
const spec = createTableSchema(table, record, host)

return spec
}
Expand Down
6 changes: 4 additions & 2 deletions apps/backend/src/openapi/openapi-record.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable } from '@nestjs/common'
import { CommandBus } from '@nestjs/cqrs'
import { recordReadableMapper, type IQueryRecordSchema, type ITableRepository } from '@undb/core'
import { RecordFactory, recordReadableMapper, type IQueryRecordSchema, type ITableRepository } from '@undb/core'
import { CreateRecordCommand, CreateRecordsCommand, UpdateRecordCommand, UpdateRecordsCommand } from '@undb/cqrs'
import { openAPIMutateRecordMapper, type IOpenAPIMutateRecordSchema } from '@undb/openapi'
import { InjectTableRepository } from '../core/table/adapters/sqlite/table-sqlite.repository.js'
Expand All @@ -17,7 +17,9 @@ export class OpenAPIRecordService {
const table = (await this.repo.findOneById(tableId)).unwrap()
const fields = table.schema.fields

return records.map((record) => recordReadableMapper(fields, record))
return records.map((record) =>
recordReadableMapper(fields, RecordFactory.fromQuery(record, table.schema.toIdMap()).unwrap()),
)
}

public async createRecord(tableId: string, id: string | undefined, values: IOpenAPIMutateRecordSchema) {
Expand Down
5 changes: 2 additions & 3 deletions apps/backend/src/relay/relay.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,9 @@ export class RelayService {
continue
}

const json = event.toJSON()

this.eventBus.publish(event)
this.logger.info('event %s emitted %j', event.name, json)

this.logger.info('event %s emitted %j', event.name, event)
}
})
}
Expand Down
9 changes: 5 additions & 4 deletions apps/backend/src/storage/adapters/s3-object-storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ export class S3ObjectStorage implements IObjectStorage, OnModuleInit {

if (this.config.provider === 's3') {
try {
await this.s3.send(new HeadBucketCommand({ Bucket: bucket }))
await this.s3.send(new HeadBucketCommand({ Bucket: bucket }) as any)
this.logger.log('bucket %s exists, skipping creation...', bucket)
} catch (error) {
this.logger.log('bucket %s not exists, creating...', bucket)
await this.s3.send(new CreateBucketCommand({ Bucket: bucket }))
await this.s3.send(new CreateBucketCommand({ Bucket: bucket }) as any)
this.logger.log('bucket %s created', bucket)
}
}
Expand All @@ -54,19 +54,20 @@ export class S3ObjectStorage implements IObjectStorage, OnModuleInit {
}

const reply = await this.s3.send(
new PutObjectCommand({ Bucket: bucket, Body: buffer, Key: name, Metadata: metadata }),
new PutObjectCommand({ Bucket: bucket, Body: buffer, Key: name, Metadata: metadata }) as any,
)

return {
url: `/api/attachment/${name}`,
// @ts-ignore
token: reply.ETag ?? '',
id,
}
}

async get(name: string): Promise<{ data: Readable; metaData: any }> {
const bucket = this.config.s3.bucket
const output = (await this.s3.send(new GetObjectCommand({ Bucket: bucket, Key: name }))) as any
const output = (await this.s3.send(new GetObjectCommand({ Bucket: bucket, Key: name }) as any)) as any
const data = output.Body as Readable
return { data, metaData: output.Metadata }
}
Expand Down
Loading

0 comments on commit f98c4a7

Please sign in to comment.