-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #103 from ChubachiPT2024/feature/in-memory-repository
インメモリ Repository の実装(残り)
- Loading branch information
Showing
12 changed files
with
313 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file modified
BIN
+290 Bytes
(100%)
src/application/reportLists/reportListImportTestFiles/reportlist.xlsx
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/** | ||
* 個別評価 | ||
*/ | ||
export class Assessment { | ||
/** | ||
* コンストラクタ | ||
* | ||
* @param reportId レポート ID | ||
* @param studentNumId 学籍番号 | ||
* @param feedback フィードバック | ||
* @param memo メモ | ||
* @param grade 評点 | ||
* @param rank 評点内の位置 | ||
* @param score 点数 | ||
*/ | ||
public constructor( | ||
public readonly reportId: number, | ||
public readonly studentNumId: number, | ||
public readonly feedback?: string, | ||
public readonly memo?: string, | ||
public readonly grade?: number, | ||
public readonly rank?: number, | ||
public readonly score?: number | ||
) { | ||
if (!grade && (grade < 0 || grade > 5)) { | ||
throw new TypeError('The grade must be in [0, 5].') | ||
} | ||
|
||
// TODO rank の仕様決定後、バリデーション | ||
|
||
if (!score && (score < 0 || score > 100)) { | ||
throw new TypeError('The score must be in [0, 100].') | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import { Assessment } from './assessment' | ||
|
||
/** | ||
* 個別評価リポジトリ | ||
*/ | ||
export interface AssessmentRepository { | ||
/** | ||
* 個別評価を保存する | ||
* | ||
* @param assessment 個別評価 | ||
*/ | ||
saveAsync(assessment: Assessment): Promise<void> | ||
|
||
/** | ||
* 個別評価を検索する | ||
* | ||
* @param reportId レポート ID | ||
* @returns 個別評価 | ||
*/ | ||
findAsync(reportId: number): Promise<Assessment[]> | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
/** | ||
* 提出物 | ||
*/ | ||
export class Submission { | ||
/** | ||
* コンストラクタ | ||
* | ||
* @param reportId レポート ID | ||
* @param studentNumId 学籍番号 | ||
* @param folderRelativePath 提出物フォルダの相対パス | ||
*/ | ||
public constructor( | ||
public readonly reportId: number, | ||
public readonly studentNumId: number, | ||
public readonly folderRelativePath: string | ||
) {} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import { Submission } from './submission' | ||
|
||
/** | ||
* 提出物リポジトリ | ||
*/ | ||
export interface SubmissionRepository { | ||
/** | ||
* 提出物を保存する | ||
* | ||
* @param submission 提出物 | ||
*/ | ||
saveAsync(submission: Submission): Promise<void> | ||
|
||
/** | ||
* 提出物を検索する | ||
* | ||
* @param reportId レポート ID | ||
* @returns 提出物 | ||
*/ | ||
findAsync(reportId: number): Promise<Submission[]> | ||
} |
22 changes: 22 additions & 0 deletions
22
src/infrastructure/inMemory/assessments/inMemoryAssessmentRepository.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
import { describe, expect, test } from 'vitest' | ||
import { InMemoryAssessmentRepository } from './inMemoryAssessmentRepository' | ||
import { Assessment } from 'src/domain/models/assessments/assessment' | ||
|
||
describe('save', () => { | ||
test('The saved assessment exists.', async () => { | ||
const repository = new InMemoryAssessmentRepository() | ||
const expected = new Assessment(1, 2) | ||
await repository.saveAsync(expected) | ||
|
||
const actual = await repository.findAsync(expected.reportId) | ||
|
||
expect(actual.length).toBe(1) | ||
expect(actual[0].reportId).toBe(expected.reportId) | ||
expect(actual[0].studentNumId).toBe(expected.studentNumId) | ||
expect(actual[0].feedback).toBe(expected.feedback) | ||
expect(actual[0].memo).toBe(expected.memo) | ||
expect(actual[0].grade).toBe(expected.grade) | ||
expect(actual[0].rank).toBe(expected.rank) | ||
expect(actual[0].score).toBe(expected.score) | ||
}) | ||
}) |
35 changes: 35 additions & 0 deletions
35
src/infrastructure/inMemory/assessments/inMemoryAssessmentRepository.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import { Assessment } from 'src/domain/models/assessments/assessment' | ||
import { AssessmentRepository } from 'src/domain/models/assessments/assessmentRepository' | ||
|
||
export class InMemoryAssessmentRepository implements AssessmentRepository { | ||
/** | ||
* 提出物 | ||
* 1 つ目の Key がレポート ID, 2 つ目の Key が学籍番号 | ||
*/ | ||
private readonly assessments = new Map<number, Map<number, Assessment>>() | ||
|
||
/** | ||
* 個別評価を保存する | ||
* | ||
* @param assessment 個別評価 | ||
*/ | ||
async saveAsync(assessment: Assessment): Promise<void> { | ||
let map = this.assessments.get(assessment.reportId) | ||
if (!map) { | ||
map = new Map<number, Assessment>() | ||
this.assessments.set(assessment.reportId, map) | ||
} | ||
map.set(assessment.studentNumId, assessment) | ||
} | ||
|
||
/** | ||
* 個別評価を検索する | ||
* | ||
* @param reportId レポート ID | ||
* @returns 個別評価 | ||
*/ | ||
async findAsync(reportId: number): Promise<Assessment[]> { | ||
const map = this.assessments.get(reportId) ?? new Map<number, Assessment>() | ||
return [...map.values()] | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
src/infrastructure/inMemory/submissions/inMemorySubmissionRepository.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
import { describe, expect, test } from 'vitest' | ||
import { InMemorySubmissionRepository } from './inMemorySubmissionRepository' | ||
import { Submission } from 'src/domain/models/submissions/submission' | ||
|
||
describe('save', () => { | ||
test('The saved submission exists.', async () => { | ||
const repository = new InMemorySubmissionRepository() | ||
const expected = new Submission(1, 2, '23745101@a2301aa') | ||
await repository.saveAsync(expected) | ||
|
||
const actual = await repository.findAsync(expected.reportId) | ||
|
||
expect(actual.length).toBe(1) | ||
expect(actual[0].reportId).toBe(expected.reportId) | ||
expect(actual[0].studentNumId).toBe(expected.studentNumId) | ||
expect(actual[0].folderRelativePath).toBe(expected.folderRelativePath) | ||
}) | ||
}) |
38 changes: 38 additions & 0 deletions
38
src/infrastructure/inMemory/submissions/inMemorySubmissionRepository.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
import { Submission } from 'src/domain/models/submissions/submission' | ||
import { SubmissionRepository } from 'src/domain/models/submissions/submissionRepository' | ||
|
||
/** | ||
* インメモリ提出物リポジトリ | ||
*/ | ||
export class InMemorySubmissionRepository implements SubmissionRepository { | ||
/** | ||
* 提出物 | ||
* 1 つ目の Key がレポート ID, 2 つ目の Key が学籍番号 | ||
*/ | ||
private readonly submissions = new Map<number, Map<number, Submission>>() | ||
|
||
/** | ||
* 提出物を保存する | ||
* | ||
* @param submission 提出物 | ||
*/ | ||
async saveAsync(submission: Submission): Promise<void> { | ||
let map = this.submissions.get(submission.reportId) | ||
if (!map) { | ||
map = new Map<number, Submission>() | ||
this.submissions.set(submission.reportId, map) | ||
} | ||
map.set(submission.studentNumId, submission) | ||
} | ||
|
||
/** | ||
* 提出物を検索する | ||
* | ||
* @param reportId レポート ID | ||
* @returns 提出物 | ||
*/ | ||
async findAsync(reportId: number): Promise<Submission[]> { | ||
const map = this.submissions.get(reportId) ?? new Map<number, Submission>() | ||
return [...map.values()] | ||
} | ||
} |
Oops, something went wrong.