feat: add user submission list logic
This commit is contained in:
@@ -3,8 +3,8 @@ Content-Type: application/json
|
||||
lang: fa
|
||||
|
||||
{
|
||||
"phone": "09121212123"
|
||||
// "password": "Password1@"
|
||||
"phone": "09333026363",
|
||||
"password": "Password1@"
|
||||
}
|
||||
|
||||
{{
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
|
||||
import { SubmissionStatus } from '../../enums/submission-status.enum';
|
||||
import { GetSubmissionResultDTO } from './get-submission-result.dto';
|
||||
import { GetTestByIdDTO } from '@/modules/tests/dtos/responses/get-test-by-id.dto';
|
||||
|
||||
export class GetSubmissionDetailDTO {
|
||||
@ApiProperty()
|
||||
id!: number;
|
||||
|
||||
@ApiProperty()
|
||||
code!: string;
|
||||
|
||||
@ApiProperty({ type: GetTestByIdDTO })
|
||||
test!: GetTestByIdDTO;
|
||||
|
||||
@ApiProperty({ enum: SubmissionStatus, enumName: 'status' })
|
||||
status!: SubmissionStatus;
|
||||
|
||||
@ApiPropertyOptional({ type: GetSubmissionResultDTO })
|
||||
result?: GetSubmissionResultDTO;
|
||||
|
||||
@ApiProperty()
|
||||
createdAt!: Date;
|
||||
|
||||
@ApiPropertyOptional()
|
||||
completedAt?: Date;
|
||||
}
|
||||
@@ -1,2 +1,5 @@
|
||||
GET {{baseUrl}}/submissions/6183e332-d28d-45ba-90a7-942f9d15100f/history
|
||||
Authorization: Bearer {{$global.accessToken}}
|
||||
|
||||
GET {{baseUrl}}/submissions
|
||||
Authorization: Bearer {{$global.accessToken}}
|
||||
@@ -0,0 +1,38 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { Repository } from 'typeorm';
|
||||
import { Submission } from '../../entities/submission.entity';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { User } from '@/modules/users/entities/user.entity';
|
||||
import { AppTimeoutException } from '@/common/exceptions/app-timeout.exception';
|
||||
import { AppResponse } from '@/common/responses';
|
||||
|
||||
@Injectable()
|
||||
export class UserSubmissionListingProvider {
|
||||
constructor(
|
||||
/**
|
||||
* Inject Submission Repository
|
||||
*/
|
||||
@InjectRepository(Submission)
|
||||
private readonly submissionsRepository: Repository<Submission>,
|
||||
) {}
|
||||
|
||||
public async getSubmissionsList(user: User) {
|
||||
let userSubmissions: Array<Submission>;
|
||||
|
||||
try {
|
||||
userSubmissions = await this.submissionsRepository.find({
|
||||
where: {
|
||||
user: { id: user.id },
|
||||
},
|
||||
relations: {
|
||||
result: true,
|
||||
test: true,
|
||||
},
|
||||
});
|
||||
} catch (err) {
|
||||
throw new AppTimeoutException(err);
|
||||
}
|
||||
|
||||
return new AppResponse(userSubmissions);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import { User } from '@/modules/users/entities/user.entity';
|
||||
import { AnswerSubmissionProvider } from './answer/answer-submission.provider';
|
||||
import { AnswerSubmissionDTO } from '../dtos/answer-submission.dto';
|
||||
import { SubmissionHistoryProvider } from './history/submission-history.provider';
|
||||
import { UserSubmissionListingProvider } from './listing/user-submission-listing.provider';
|
||||
|
||||
@Injectable()
|
||||
export class SubmissionsService {
|
||||
@@ -22,6 +23,11 @@ export class SubmissionsService {
|
||||
* Inject Submission History Provider
|
||||
*/
|
||||
private readonly submissionHistoryProvider: SubmissionHistoryProvider,
|
||||
|
||||
/**
|
||||
* Inject User Submission Listing Provider
|
||||
*/
|
||||
private readonly userSubmissionListingProvider: UserSubmissionListingProvider,
|
||||
) {}
|
||||
|
||||
public async startSubmission(testId: number, user?: User) {
|
||||
@@ -43,4 +49,8 @@ export class SubmissionsService {
|
||||
public async getSubmissionHistory(id: string, user?: User) {
|
||||
return await this.submissionHistoryProvider.getHistory(id, user);
|
||||
}
|
||||
|
||||
public async getUserSubmissions(user: User) {
|
||||
return await this.userSubmissionListingProvider.getSubmissionsList(user);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import { StartAuthenticatedDTO } from './dtos/responses/start-authenticated.dto'
|
||||
import { StartGuestDTO } from './dtos/responses/start-guest.dto';
|
||||
import { GetAnswerSubmissionDTO } from './dtos/responses/get-answer-submission.dto';
|
||||
import { GetSubmissionHistoryDTO } from './dtos/responses/get-submission-history.dto';
|
||||
import { GetSubmissionDetailDTO } from './dtos/responses/get-submission-detail.dto';
|
||||
|
||||
@Controller('submissions')
|
||||
export class SubmissionsController {
|
||||
@@ -143,4 +144,20 @@ export class SubmissionsController {
|
||||
public async getHistory(@Param('id') id: string, @ActiveUser() user?: User) {
|
||||
return await this.submissionsService.getSubmissionHistory(id, user);
|
||||
}
|
||||
|
||||
@Get()
|
||||
@ApiAppResponse([
|
||||
{
|
||||
status: HttpStatus.OK,
|
||||
variants: [
|
||||
{
|
||||
model: GetSubmissionDetailDTO,
|
||||
isArray: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
])
|
||||
public async getUserSubmissions(@ActiveUser() user: User) {
|
||||
return await this.submissionsService.getUserSubmissions(user);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import { AnswerAuthenticatedProvider } from './providers/answer/answer-authentic
|
||||
import { HistoryAuthenticatedProvider } from './providers/history/history-authenticated.provider';
|
||||
import { HistoryGuestProvider } from './providers/history/history-guest.provider';
|
||||
import { SubmissionHistoryProvider } from './providers/history/submission-history.provider';
|
||||
import { UserSubmissionListingProvider } from './providers/listing/user-submission-listing.provider';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
@@ -36,6 +37,7 @@ import { SubmissionHistoryProvider } from './providers/history/submission-histor
|
||||
HistoryAuthenticatedProvider,
|
||||
HistoryGuestProvider,
|
||||
SubmissionHistoryProvider,
|
||||
UserSubmissionListingProvider,
|
||||
SubmissionsService,
|
||||
],
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user