-
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 #146 from mapeveri/feat/142_term
Add entities term and related #142
- Loading branch information
Showing
26 changed files
with
229 additions
and
200 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
14 changes: 14 additions & 0 deletions
14
src/languages/app/mikroorm-migrations/Migration20240824163753.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,14 @@ | ||
import { Migration } from '@mikro-orm/migrations'; | ||
|
||
export class Migration20240824163753 extends Migration { | ||
async up(): Promise<void> { | ||
this.addSql('drop table if exists "term" cascade;'); | ||
} | ||
|
||
async down(): Promise<void> { | ||
this.addSql( | ||
'CREATE TABLE "term" ("id" character varying, "type" character varying, "languageId" character varying, "countryId" character varying, "userId" character varying, "created_at" TIMESTAMP DEFAULT now(), "updated_at" TIMESTAMP DEFAULT now(), "terms" json DEFAULT \'{"terms":[]}\', CONSTRAINT "PK_55b0479f0743f2e5d5ec414821e" PRIMARY KEY ("id"))', | ||
); | ||
this.addSql('CREATE INDEX "IDX_19a144ebe2c3c451ea16ff1685" ON "term" ("type") '); | ||
} | ||
} |
14 changes: 14 additions & 0 deletions
14
src/languages/app/mikroorm-migrations/Migration20240825125425.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,14 @@ | ||
import { Migration } from '@mikro-orm/migrations'; | ||
|
||
export class Migration20240825125425 extends Migration { | ||
async up(): Promise<void> { | ||
this.addSql( | ||
'create table "term" ("id" uuid not null, "type" varchar(30) not null, "language_id" varchar(10) not null, "country_id" uuid not null, "user_id" uuid not null, "likes" jsonb not null, "created_at" timestamptz null, "updated_at" timestamptz null, "terms" jsonb null, constraint "term_pkey" primary key ("id"));', | ||
); | ||
this.addSql('create index "term_type_index" on "term" ("type");'); | ||
} | ||
|
||
async down(): Promise<void> { | ||
this.addSql('drop table if exists "term" cascade;'); | ||
} | ||
} |
4 changes: 4 additions & 0 deletions
4
src/languages/infrastructure/persistence/mikroOrm/entities/common/dates.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,4 @@ | ||
export const dates = { | ||
createdAt: { type: 'Date', onCreate: () => new Date(), nullable: true }, | ||
updatedAt: { type: 'Date', onCreate: () => new Date(), onUpdate: () => new Date(), nullable: true }, | ||
}; |
15 changes: 15 additions & 0 deletions
15
src/languages/infrastructure/persistence/mikroOrm/entities/expression.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,15 @@ | ||
import { EntitySchema } from '@mikro-orm/core'; | ||
import Expression from '@src/languages/domain/term/expression/expression'; | ||
import { ExpressionTermCollectionType } from '../types/expressionTermCollectionType'; | ||
import { TermSchema } from './term'; | ||
|
||
export const ExpressionSchema = new EntitySchema({ | ||
class: Expression, | ||
tableName: 'expressions', | ||
extends: TermSchema, | ||
properties: { | ||
terms: { | ||
type: ExpressionTermCollectionType, | ||
}, | ||
}, | ||
}); |
38 changes: 38 additions & 0 deletions
38
src/languages/infrastructure/persistence/mikroOrm/entities/term.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 { dates } from '@src/languages/infrastructure/persistence/mikroOrm/entities/common/dates'; | ||
import { EntitySchema } from '@mikro-orm/core'; | ||
import Term from '@src/languages/domain/term/term'; | ||
import { TermIdType } from '../types/termIdType'; | ||
import { CountryIdType } from '../types/countryIdType'; | ||
import { UserIdType } from '../types/userIdType'; | ||
import { LikesCollectionType } from '../types/likesCollectionType'; | ||
import { TermTypeType } from '../types/termTypeType'; | ||
|
||
export const TermSchema = new EntitySchema({ | ||
class: Term, | ||
abstract: true, | ||
properties: { | ||
id: { | ||
type: TermIdType, | ||
primary: true, | ||
}, | ||
type: { | ||
type: TermTypeType, | ||
}, | ||
languageId: { | ||
type: String, | ||
length: 10, | ||
}, | ||
countryId: { | ||
type: CountryIdType, | ||
}, | ||
userId: { | ||
type: UserIdType, | ||
}, | ||
likes: { | ||
type: LikesCollectionType, | ||
}, | ||
...dates, | ||
}, | ||
discriminatorColumn: 'type', | ||
discriminatorMap: { expression: 'Expression', word: 'Word' }, | ||
}); |
15 changes: 15 additions & 0 deletions
15
src/languages/infrastructure/persistence/mikroOrm/entities/word.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,15 @@ | ||
import { EntitySchema } from '@mikro-orm/core'; | ||
import { TermSchema } from './term'; | ||
import Word from '@src/languages/domain/term/word/word'; | ||
import { WordTermCollectionType } from '../types/wordTermCollectionType'; | ||
|
||
export const WordSchema = new EntitySchema({ | ||
class: Word, | ||
tableName: 'words', | ||
extends: TermSchema, | ||
properties: { | ||
terms: { | ||
type: WordTermCollectionType, | ||
}, | ||
}, | ||
}); |
28 changes: 28 additions & 0 deletions
28
src/languages/infrastructure/persistence/mikroOrm/repositories/mikroOrmTermRepository.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,28 @@ | ||
import { Injectable } from '@nestjs/common'; | ||
import { EntityManager, EntityRepository } from '@mikro-orm/core'; | ||
import { InjectRepository } from '@mikro-orm/nestjs'; | ||
import TermRepository from '@src/languages/domain/term/termRepository'; | ||
import { TermSchema } from '../entities/term'; | ||
import Term from '@src/languages/domain/term/term'; | ||
import TermId from '@src/languages/domain/term/termId'; | ||
|
||
@Injectable() | ||
export default class MikroOrmTermRepository implements TermRepository { | ||
constructor( | ||
@InjectRepository(TermSchema) | ||
private readonly termRepository: EntityRepository<Term>, | ||
private readonly em: EntityManager, | ||
) {} | ||
|
||
async findById(id: TermId): Promise<Term | null> { | ||
return await this.termRepository.findOne(id); | ||
} | ||
|
||
async remove(term: Term): Promise<void> { | ||
await this.termRepository.nativeDelete(term); | ||
} | ||
|
||
async save(term: Term): Promise<void> { | ||
await this.em.persistAndFlush(term); | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
src/languages/infrastructure/persistence/mikroOrm/types/expressionTermCollectionType.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,21 @@ | ||
import { JsonType } from '@mikro-orm/core'; | ||
import { ExpressionTermPrimitives } from '@src/languages/domain/term/expression/expressionTerm'; | ||
import ExpressionTermCollection from '@src/languages/domain/term/expression/expressionTermCollection'; | ||
|
||
export class ExpressionTermCollectionType extends JsonType { | ||
convertToDatabaseValue(value: ExpressionTermCollection): string { | ||
if (!value) { | ||
return '[]'; | ||
} | ||
|
||
return JSON.stringify(value.toArray()); | ||
} | ||
|
||
convertToJSValue(value: ExpressionTermPrimitives[] | null): ExpressionTermCollection { | ||
return ExpressionTermCollection.fromPrimitives(value || []); | ||
} | ||
|
||
getColumnType() { | ||
return 'jsonb'; | ||
} | ||
} |
23 changes: 23 additions & 0 deletions
23
src/languages/infrastructure/persistence/mikroOrm/types/likesCollectionType.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,23 @@ | ||
import { JsonType } from '@mikro-orm/core'; | ||
import TermLike, { TermLikePrimitives } from '@src/languages/domain/term/termLike'; | ||
|
||
export class LikesCollectionType extends JsonType { | ||
convertToDatabaseValue(value: TermLike[]): string { | ||
if (!value) { | ||
return '[]'; | ||
} | ||
|
||
return JSON.stringify(value.map((like: TermLike) => like.toPrimitives())); | ||
} | ||
|
||
convertToJSValue(value: TermLikePrimitives[] | null): TermLike[] { | ||
const termLikes = value; | ||
if (!termLikes) return []; | ||
|
||
return termLikes.map((termLike) => TermLike.fromPrimitives(termLike)) || []; | ||
} | ||
|
||
getColumnType() { | ||
return 'jsonb'; | ||
} | ||
} |
12 changes: 12 additions & 0 deletions
12
src/languages/infrastructure/persistence/mikroOrm/types/termIdType.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,12 @@ | ||
import TermId from '@src/languages/domain/term/termId'; | ||
import { ValueObjectType } from '@src/shared/infrastructure/persistence/mikroOrm/types/valueObjectType'; | ||
|
||
export class TermIdType extends ValueObjectType<string> { | ||
constructor() { | ||
super(TermId); | ||
} | ||
|
||
getColumnType() { | ||
return 'uuid'; | ||
} | ||
} |
12 changes: 12 additions & 0 deletions
12
src/languages/infrastructure/persistence/mikroOrm/types/termTypeType.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,12 @@ | ||
import TermType from '@src/languages/domain/term/termType'; | ||
import { ValueObjectType } from '@src/shared/infrastructure/persistence/mikroOrm/types/valueObjectType'; | ||
|
||
export class TermTypeType extends ValueObjectType<string> { | ||
constructor() { | ||
super(TermType); | ||
} | ||
|
||
getColumnType() { | ||
return 'varchar(30)'; | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
src/languages/infrastructure/persistence/mikroOrm/types/wordTermCollectionType.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,21 @@ | ||
import { JsonType } from '@mikro-orm/core'; | ||
import { WordTermPrimitives } from '@src/languages/domain/term/word/wordTerm'; | ||
import WordTermCollection from '@src/languages/domain/term/word/wordTermCollection'; | ||
|
||
export class WordTermCollectionType extends JsonType { | ||
convertToDatabaseValue(value: WordTermCollection): string { | ||
if (!value) { | ||
return '[]'; | ||
} | ||
|
||
return JSON.stringify(value.toArray()); | ||
} | ||
|
||
convertToJSValue(value: WordTermPrimitives[] | null): WordTermCollection { | ||
return WordTermCollection.fromPrimitives(value || []); | ||
} | ||
|
||
getColumnType() { | ||
return 'jsonb'; | ||
} | ||
} |
14 changes: 0 additions & 14 deletions
14
src/languages/infrastructure/persistence/typeOrm/entities/common/dates.ts
This file was deleted.
Oops, something went wrong.
20 changes: 0 additions & 20 deletions
20
src/languages/infrastructure/persistence/typeOrm/entities/expression.ts
This file was deleted.
Oops, something went wrong.
44 changes: 0 additions & 44 deletions
44
src/languages/infrastructure/persistence/typeOrm/entities/term.ts
This file was deleted.
Oops, something went wrong.
20 changes: 0 additions & 20 deletions
20
src/languages/infrastructure/persistence/typeOrm/entities/word.ts
This file was deleted.
Oops, something went wrong.
20 changes: 0 additions & 20 deletions
20
src/languages/infrastructure/persistence/typeOrm/repositories/typeOrmTermRepository.ts
This file was deleted.
Oops, something went wrong.
24 changes: 0 additions & 24 deletions
24
...es/infrastructure/persistence/typeOrm/transformers/expressionTermCollectionTransformer.ts
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.