Skip to content

Commit 60324eb

Browse files
angristanMikadows
authored andcommitted
feat: rework code hash handling
1 parent 7a7effe commit 60324eb

7 files changed

+41
-59
lines changed

src/hash/hash.service.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import { Injectable } from '@nestjs/common';
2-
import bcrypt from 'bcrypt';
2+
import * as crypto from 'crypto';
33

44
@Injectable()
55
export class HashService {
66
public async hashCode(source: string): Promise<string> {
7-
return bcrypt.hash(source, 8);
7+
return crypto.createHash('sha256').update(source).digest('base64');
88
}
99

1010
public async compareSourceToHash(
1111
source: string,
1212
hash: string,
1313
): Promise<boolean> {
14-
return bcrypt.compare(source, hash);
14+
return (await this.hashCode(source)) === hash;
1515
}
1616
}

src/migrations/1626968543120-AddSubmissionHashCode.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/migrations/1626996924860-AddDuplicatedSubmission.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import {MigrationInterface, QueryRunner} from "typeorm";
2+
3+
export class AddSubmissionsDups1627032297690 implements MigrationInterface {
4+
name = 'AddSubmissionsDups1627032297690'
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(`CREATE TABLE "submissions_duplicates_submissions_submissions" ("submissionsId_1" uuid NOT NULL, "submissionsId_2" uuid NOT NULL, CONSTRAINT "PK_dc9ba678219f1f81163d50cfbc6" PRIMARY KEY ("submissionsId_1", "submissionsId_2"))`);
8+
await queryRunner.query(`CREATE INDEX "IDX_dc00f6d57c8d952e3a20a419e7" ON "submissions_duplicates_submissions_submissions" ("submissionsId_1") `);
9+
await queryRunner.query(`CREATE INDEX "IDX_c29525f4dac4489d8c36dd0ef9" ON "submissions_duplicates_submissions_submissions" ("submissionsId_2") `);
10+
await queryRunner.query(`ALTER TABLE "submissions" ADD "codeHash" character varying`);
11+
await queryRunner.query(`ALTER TABLE "submissions_duplicates_submissions_submissions" ADD CONSTRAINT "FK_dc00f6d57c8d952e3a20a419e7b" FOREIGN KEY ("submissionsId_1") REFERENCES "submissions"("id") ON DELETE CASCADE ON UPDATE CASCADE`);
12+
await queryRunner.query(`ALTER TABLE "submissions_duplicates_submissions_submissions" ADD CONSTRAINT "FK_c29525f4dac4489d8c36dd0ef94" FOREIGN KEY ("submissionsId_2") REFERENCES "submissions"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
13+
}
14+
15+
public async down(queryRunner: QueryRunner): Promise<void> {
16+
await queryRunner.query(`ALTER TABLE "submissions_duplicates_submissions_submissions" DROP CONSTRAINT "FK_c29525f4dac4489d8c36dd0ef94"`);
17+
await queryRunner.query(`ALTER TABLE "submissions_duplicates_submissions_submissions" DROP CONSTRAINT "FK_dc00f6d57c8d952e3a20a419e7b"`);
18+
await queryRunner.query(`ALTER TABLE "submissions" DROP COLUMN "codeHash"`);
19+
await queryRunner.query(`DROP INDEX "IDX_c29525f4dac4489d8c36dd0ef9"`);
20+
await queryRunner.query(`DROP INDEX "IDX_dc00f6d57c8d952e3a20a419e7"`);
21+
await queryRunner.query(`DROP TABLE "submissions_duplicates_submissions_submissions"`);
22+
}
23+
24+
}

src/submissions/submission.entity.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ import {
77
Column,
88
CreateDateColumn,
99
Entity,
10+
JoinTable,
11+
ManyToMany,
1012
ManyToOne,
11-
OneToMany,
1213
PrimaryGeneratedColumn,
1314
UpdateDateColumn,
1415
} from 'typeorm';
@@ -110,12 +111,16 @@ export class Submission extends BaseEntity {
110111
@ApiProperty({ type: () => Benchmark })
111112
benchmark: Benchmark;
112113

113-
@ManyToOne(
114+
@ManyToMany(
114115
(type) => Submission,
115116
(submission) => submission.duplicatedSubmissions,
116117
)
117-
self: Submission;
118+
@JoinTable()
119+
duplicatesSubmissions: Submission[];
118120

119-
@OneToMany((type) => Submission, (submission) => submission.self)
121+
@ManyToMany(
122+
(type) => Submission,
123+
(submission) => submission.duplicatesSubmissions,
124+
)
120125
duplicatedSubmissions: Submission[];
121126
}

src/submissions/submissions.controller.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,6 @@ export class SubmissionsController {
8282
// Since this endpoint is used for polling, the service will fetch from cache first and fallback to DB
8383
const submission = await this.submissionsService.findOne(findSubmissionDTO);
8484

85-
// @ts-ignore
86-
console.log(submission.duplicatedSubmissions);
87-
8885
if (!submission) {
8986
throw new NotFoundException();
9087
}

src/submissions/submissions.service.ts

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ import {
88
import { InjectRepository } from '@nestjs/typeorm';
99
import { TypedJSON } from 'typedjson';
1010
import { IsNull, Not, Repository } from 'typeorm';
11+
import { Benchmark } from '../benchmarks/benchmark.entity';
1112
import { BenchmarkService } from '../benchmarks/benchmark.service';
13+
import { BenchmarkIdDto } from '../benchmarks/dto/benchmarkId.dto';
14+
import { HashService } from '../hash/hash.service';
1215
import { User } from '../users/user.entity';
1316
import { FindLastSubmissionByLanguageDTO } from './dto/find-last-submission-by-language.dto';
1417
import { FindSubmissionDTO } from './dto/find-submission.dto';
1518
import { InsertSubmissionDTO } from './dto/insert-submission-dto';
1619
import { JobStatusDTO } from './dto/job-status.dto';
1720
import { Submission } from './submission.entity';
18-
import { BenchmarkIdDto } from '../benchmarks/dto/benchmarkId.dto';
19-
import { HashService } from '../hash/hash.service';
20-
import { Benchmark } from '../benchmarks/benchmark.entity';
2121

2222
@Injectable()
2323
export class SubmissionsService {
@@ -125,7 +125,6 @@ export class SubmissionsService {
125125
relations: ['duplicatedSubmissions'],
126126
order: { createdAt: 'DESC' },
127127
});
128-
// return this.submissionsRepository.findOne({ id: queriedSubmission.id });
129128
}
130129

131130
@RabbitSubscribe({
@@ -216,26 +215,13 @@ export class SubmissionsService {
216215
{
217216
benchmark,
218217
language,
218+
codeHash: await this.hashService.hashCode(source),
219219
},
220220
],
221221
order: { qualityScore: 'DESC' },
222222
});
223223

224-
const sameSubmissions: Submission[] = [];
225-
// for each check with compare function
226-
227-
submissions.forEach((submission) => {
228-
this.hashService
229-
.compareSourceToHash(source, submission.codeHash)
230-
.then((value) => {
231-
if (value) {
232-
sameSubmissions.push(submission);
233-
}
234-
})
235-
.catch((reason) => console.log(reason));
236-
});
237-
238-
return sameSubmissions;
224+
return submissions;
239225
}
240226

241227
async languageMatcher(language: string): Promise<string | undefined> {

0 commit comments

Comments
 (0)