feat: add user submission list logic
This commit is contained in:
@@ -3,8 +3,8 @@ Content-Type: application/json
|
|||||||
lang: fa
|
lang: fa
|
||||||
|
|
||||||
{
|
{
|
||||||
"phone": "09121212123"
|
"phone": "09333026363",
|
||||||
// "password": "Password1@"
|
"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
|
GET {{baseUrl}}/submissions/6183e332-d28d-45ba-90a7-942f9d15100f/history
|
||||||
|
Authorization: Bearer {{$global.accessToken}}
|
||||||
|
|
||||||
|
GET {{baseUrl}}/submissions
|
||||||
Authorization: Bearer {{$global.accessToken}}
|
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 { AnswerSubmissionProvider } from './answer/answer-submission.provider';
|
||||||
import { AnswerSubmissionDTO } from '../dtos/answer-submission.dto';
|
import { AnswerSubmissionDTO } from '../dtos/answer-submission.dto';
|
||||||
import { SubmissionHistoryProvider } from './history/submission-history.provider';
|
import { SubmissionHistoryProvider } from './history/submission-history.provider';
|
||||||
|
import { UserSubmissionListingProvider } from './listing/user-submission-listing.provider';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SubmissionsService {
|
export class SubmissionsService {
|
||||||
@@ -22,6 +23,11 @@ export class SubmissionsService {
|
|||||||
* Inject Submission History Provider
|
* Inject Submission History Provider
|
||||||
*/
|
*/
|
||||||
private readonly submissionHistoryProvider: SubmissionHistoryProvider,
|
private readonly submissionHistoryProvider: SubmissionHistoryProvider,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inject User Submission Listing Provider
|
||||||
|
*/
|
||||||
|
private readonly userSubmissionListingProvider: UserSubmissionListingProvider,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public async startSubmission(testId: number, user?: User) {
|
public async startSubmission(testId: number, user?: User) {
|
||||||
@@ -43,4 +49,8 @@ export class SubmissionsService {
|
|||||||
public async getSubmissionHistory(id: string, user?: User) {
|
public async getSubmissionHistory(id: string, user?: User) {
|
||||||
return await this.submissionHistoryProvider.getHistory(id, 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 { StartGuestDTO } from './dtos/responses/start-guest.dto';
|
||||||
import { GetAnswerSubmissionDTO } from './dtos/responses/get-answer-submission.dto';
|
import { GetAnswerSubmissionDTO } from './dtos/responses/get-answer-submission.dto';
|
||||||
import { GetSubmissionHistoryDTO } from './dtos/responses/get-submission-history.dto';
|
import { GetSubmissionHistoryDTO } from './dtos/responses/get-submission-history.dto';
|
||||||
|
import { GetSubmissionDetailDTO } from './dtos/responses/get-submission-detail.dto';
|
||||||
|
|
||||||
@Controller('submissions')
|
@Controller('submissions')
|
||||||
export class SubmissionsController {
|
export class SubmissionsController {
|
||||||
@@ -143,4 +144,20 @@ export class SubmissionsController {
|
|||||||
public async getHistory(@Param('id') id: string, @ActiveUser() user?: User) {
|
public async getHistory(@Param('id') id: string, @ActiveUser() user?: User) {
|
||||||
return await this.submissionsService.getSubmissionHistory(id, 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 { HistoryAuthenticatedProvider } from './providers/history/history-authenticated.provider';
|
||||||
import { HistoryGuestProvider } from './providers/history/history-guest.provider';
|
import { HistoryGuestProvider } from './providers/history/history-guest.provider';
|
||||||
import { SubmissionHistoryProvider } from './providers/history/submission-history.provider';
|
import { SubmissionHistoryProvider } from './providers/history/submission-history.provider';
|
||||||
|
import { UserSubmissionListingProvider } from './providers/listing/user-submission-listing.provider';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -36,6 +37,7 @@ import { SubmissionHistoryProvider } from './providers/history/submission-histor
|
|||||||
HistoryAuthenticatedProvider,
|
HistoryAuthenticatedProvider,
|
||||||
HistoryGuestProvider,
|
HistoryGuestProvider,
|
||||||
SubmissionHistoryProvider,
|
SubmissionHistoryProvider,
|
||||||
|
UserSubmissionListingProvider,
|
||||||
SubmissionsService,
|
SubmissionsService,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user