Skip to content

Commit 0e9f5e4

Browse files
authored
Merge pull request #166 from hypersign-protocol/fix-status
Fix status
2 parents c772cab + 3f8b8fb commit 0e9f5e4

8 files changed

+199
-1
lines changed

Diff for: src/app.module.ts

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { SchemaModule } from './schema/schema.module';
88
import { CredentialModule } from './credential/credential.module';
99
import { PresentationModule } from './presentation/presentation.module';
1010
import { TxSendModuleModule } from './tx-send-module/tx-send-module.module';
11+
import { StatusModule } from './status/status.module';
1112
@Module({
1213
imports: [
1314
ConfigModule.forRoot({
@@ -20,6 +21,7 @@ import { TxSendModuleModule } from './tx-send-module/tx-send-module.module';
2021
CredentialModule,
2122
PresentationModule,
2223
TxSendModuleModule,
24+
StatusModule,
2325
],
2426
controllers: [],
2527
providers: [{ provide: APP_FILTER, useClass: AllExceptionsFilter }],

Diff for: src/main.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { DidModule } from './did/did.module';
1717
import { SchemaModule } from './schema/schema.module';
1818
import { PresentationModule } from './presentation/presentation.module';
1919
import { CredentialModule } from './credential/credential.module';
20+
import { StatusModule } from './status/status.module';
2021
async function bootstrap() {
2122
const app = await NestFactory.create(AppModule, { cors: true });
2223
app.use(json({ limit: '10mb' }));
@@ -124,7 +125,13 @@ async function bootstrap() {
124125
.build();
125126

126127
const tenantDocuments = SwaggerModule.createDocument(app, tenantDocConfig, {
127-
include: [DidModule, SchemaModule, CredentialModule, PresentationModule], // don't include, say, BearsModule
128+
include: [
129+
DidModule,
130+
SchemaModule,
131+
CredentialModule,
132+
PresentationModule,
133+
StatusModule,
134+
], // don't include, say, BearsModule
128135
});
129136

130137
const tenantOptions = {

Diff for: src/status/providers/registration-status.provider.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { Connection } from 'mongoose';
2+
import { RegistrationStatusSchema } from '../schema/status.schema';
3+
4+
export const statusProviders = [
5+
{
6+
provide: 'STATUS_MODEL',
7+
useFactory: (connection: Connection) =>
8+
connection.model('RegistrationStatus', RegistrationStatusSchema),
9+
inject: ['APPDATABASECONNECTIONS'],
10+
},
11+
];

Diff for: src/status/repository/status.repository.ts

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { Inject, Injectable } from '@nestjs/common';
2+
import { FilterQuery, Model, ProjectionType, QueryOptions } from 'mongoose';
3+
import { RegistrationStatusDocument } from '../schema/status.schema';
4+
import { skip } from 'rxjs';
5+
6+
@Injectable()
7+
export class TxnStatusRepository {
8+
constructor(
9+
@Inject('STATUS_MODEL')
10+
private readonly registatiationStatusModel: Model<RegistrationStatusDocument>,
11+
) {}
12+
13+
async find(
14+
registrationStatus: FilterQuery<RegistrationStatusDocument>,
15+
projection?: ProjectionType<RegistrationStatusDocument>,
16+
option?: QueryOptions<RegistrationStatusDocument>,
17+
) {
18+
return this.registatiationStatusModel.find(
19+
registrationStatus,
20+
projection,
21+
option,
22+
);
23+
}
24+
}

Diff for: src/status/schema/status.schema.ts

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { Document } from 'mongoose';
2+
import { Schema, Prop, SchemaFactory } from '@nestjs/mongoose';
3+
4+
export type RegistrationStatusDocument = RegistrationStatus & Document;
5+
6+
@Schema({
7+
timestamps: true,
8+
})
9+
export class RegistrationStatus {
10+
@Prop()
11+
txnHash: string;
12+
13+
@Prop({ required: false })
14+
status?: number;
15+
16+
@Prop()
17+
id: string;
18+
19+
@Prop()
20+
type: string;
21+
22+
@Prop({ required: false, type: Object })
23+
message?: object;
24+
}
25+
26+
const RegistrationStatusSchema =
27+
SchemaFactory.createForClass(RegistrationStatus);
28+
RegistrationStatusSchema.index(
29+
{
30+
txnHash: 1,
31+
id: 1,
32+
},
33+
{ unique: true },
34+
);
35+
36+
export { RegistrationStatusSchema };

Diff for: src/status/status.controller.ts

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import {
2+
Controller,
3+
Get,
4+
Param,
5+
UseGuards,
6+
Query,
7+
UseFilters,
8+
} from '@nestjs/common';
9+
import { StatusService } from './status.service';
10+
11+
import { ApiBearerAuth, ApiParam, ApiQuery, ApiTags } from '@nestjs/swagger';
12+
import { AuthGuard } from '@nestjs/passport';
13+
import { PaginationDto } from 'src/utils/pagination.dto';
14+
import { AllExceptionsFilter } from 'src/utils/utils';
15+
@UseFilters(AllExceptionsFilter)
16+
@ApiTags('Status')
17+
@ApiBearerAuth('Authorization')
18+
@Controller('status')
19+
@UseGuards(AuthGuard('jwt'))
20+
export class StatusController {
21+
constructor(private readonly statusService: StatusService) {}
22+
23+
@Get('ssi/:id')
24+
@ApiQuery({
25+
name: 'page',
26+
description: 'Page value',
27+
required: false,
28+
})
29+
@ApiQuery({
30+
name: 'limit',
31+
description: 'Fetch limited list of data',
32+
required: false,
33+
})
34+
@ApiParam({
35+
name: 'id',
36+
description: 'Enter didId or vcId or schemaId',
37+
})
38+
getStatus(@Param('id') id: string, @Query() pagination: PaginationDto) {
39+
return this.statusService.findBySsiId(id, pagination);
40+
}
41+
42+
@Get('transaction/:transactionHash')
43+
@ApiQuery({
44+
name: 'page',
45+
description: 'Page value',
46+
required: false,
47+
})
48+
@ApiQuery({
49+
name: 'limit',
50+
description: 'Fetch limited list of data',
51+
required: false,
52+
})
53+
@ApiParam({
54+
name: 'transactionHash',
55+
description: 'Enter transactionHash',
56+
})
57+
getStatusByTransactionHash(
58+
@Param('transactionHash') transactionHash: string,
59+
@Query() pagination: PaginationDto,
60+
) {
61+
return this.statusService.findByTxnId(transactionHash, pagination);
62+
}
63+
}

Diff for: src/status/status.module.ts

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
2+
import { StatusService } from './status.service';
3+
import { StatusController } from './status.controller';
4+
import { databaseProviders } from 'src/mongoose/tenant-mongoose-connections';
5+
import { TxnStatusRepository } from './repository/status.repository';
6+
import { statusProviders } from './providers/registration-status.provider';
7+
import { WhitelistSSICorsMiddleware } from 'src/utils/middleware/cors.middleware';
8+
import { TrimMiddleware } from 'src/utils/middleware/trim.middleware';
9+
10+
@Module({
11+
imports: [],
12+
controllers: [StatusController],
13+
providers: [
14+
StatusService,
15+
TxnStatusRepository,
16+
...databaseProviders,
17+
...statusProviders,
18+
],
19+
exports: [],
20+
})
21+
export class StatusModule implements NestModule {
22+
configure(consumer: MiddlewareConsumer) {
23+
consumer.apply(WhitelistSSICorsMiddleware).forRoutes(StatusController);
24+
consumer.apply(TrimMiddleware).forRoutes(StatusController);
25+
}
26+
}

Diff for: src/status/status.service.ts

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Injectable } from '@nestjs/common';
2+
import { TxnStatusRepository } from './repository/status.repository';
3+
4+
@Injectable()
5+
export class StatusService {
6+
constructor(private readonly txnStatusRepository: TxnStatusRepository) {}
7+
findBySsiId(id: string, option) {
8+
const skip = (option.page - 1) * option.limit;
9+
option['skip'] = skip;
10+
return this.txnStatusRepository.find({
11+
id,
12+
});
13+
}
14+
15+
findByTxnId(id: string, option) {
16+
const skip = (option.page - 1) * option.limit;
17+
option['skip'] = skip;
18+
return this.txnStatusRepository.find(
19+
{
20+
txnHash: id,
21+
},
22+
{},
23+
{
24+
skip: option.skip,
25+
limit: option.limit,
26+
},
27+
);
28+
}
29+
}

0 commit comments

Comments
 (0)