From 2252da20f5de751e44be0435ed64c166bfc95714 Mon Sep 17 00:00:00 2001 From: legonzaur Date: Tue, 14 Jan 2025 22:46:47 +0100 Subject: [PATCH] feat: concept seeding --- src/concept/concept.controller.ts | 97 +- src/concept/concept.service.ts | 13 +- src/concept/entities/concept.entity.ts | 10 +- src/concept/seeds/concept.seed.json | 946 ++++++++++++++++++ .../concepttype.seed.json} | 0 5 files changed, 999 insertions(+), 67 deletions(-) create mode 100644 src/concept/seeds/concept.seed.json rename src/concept/{concept.seed.json => seeds/concepttype.seed.json} (100%) diff --git a/src/concept/concept.controller.ts b/src/concept/concept.controller.ts index ab1d968..6886dee 100644 --- a/src/concept/concept.controller.ts +++ b/src/concept/concept.controller.ts @@ -1,28 +1,11 @@ -import { - Body, - Controller, - Delete, - Get, - HttpException, - HttpStatus, - Param, - ParseIntPipe, - Post, - Put, - Sse, - UseGuards, -} from '@nestjs/common'; +import { Controller, Get, Sse } from '@nestjs/common'; -import { ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; -import { AuthGuard } from 'src/users/guards/auth.guard'; +import { ApiOperation, ApiTags } from '@nestjs/swagger'; import { fromEvent, map, Observable } from 'rxjs'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { ConceptService } from './concept.service'; -import { Concept } from './entities/concept.entity'; -import { ConceptPipe } from './concept.pipe'; -import { ConceptRecieveDTO } from './dto/conceptrecieve.dto'; import { ConceptResponseDTO, ConceptTypeResponseDTO, @@ -47,25 +30,25 @@ export class ConceptController { ); } - @Delete(':id') - @ApiOperation({ summary: 'Delete a concept' }) - @UseGuards(AuthGuard) - async delete(@Param('id') id: number) { - const concept = await this.conceptService.getById(id); - if (!concept) { - throw new HttpException('Concept not found', HttpStatus.NOT_FOUND); - } - await this.conceptService.delete(concept); - } + // @Delete(':id') + // @ApiOperation({ summary: 'Delete a concept' }) + // @UseGuards(AuthGuard) + // async delete(@Param('id') id: number) { + // const concept = await this.conceptService.getById(id); + // if (!concept) { + // throw new HttpException('Concept not found', HttpStatus.NOT_FOUND); + // } + // await this.conceptService.delete(concept); + // } - @Post('/') - @ApiOperation({ summary: 'Submit a concept' }) - @ApiBody({ type: ConceptRecieveDTO }) - @UseGuards(AuthGuard) - async create(@Body('value') value: string) { - const concept = await this.conceptService.create(value, 'placeholder.jpg'); - return new ConceptResponseDTO(concept); - } + // @Post('/') + // @ApiOperation({ summary: 'Submit a concept' }) + // @ApiBody({ type: ConceptRecieveDTO }) + // @UseGuards(AuthGuard) + // async create(@Body('value') value: string) { + // const concept = await this.conceptService.create(value, 'placeholder.jpg'); + // return new ConceptResponseDTO(concept); + // } @Get('/') @ApiOperation({ summary: 'List enabled concept' }) @@ -91,25 +74,25 @@ export class ConceptController { ); } - @Put(':id/enable') - @ApiOperation({ summary: 'Enable a concept' }) - @UseGuards(AuthGuard) - async enable( - @Param('id', ParseIntPipe) _id: string, - @Param('id', ConceptPipe) concept: Concept, - ) { - await this.conceptService.enable(concept); - return new ConceptResponseDTO(concept); - } + // @Put(':id/enable') + // @ApiOperation({ summary: 'Enable a concept' }) + // @UseGuards(AuthGuard) + // async enable( + // @Param('id', ParseIntPipe) _id: string, + // @Param('id', ConceptPipe) concept: Concept, + // ) { + // await this.conceptService.enable(concept); + // return new ConceptResponseDTO(concept); + // } - @Put(':id/disable') - @ApiOperation({ summary: 'Disable a word' }) - @UseGuards(AuthGuard) - async disable( - @Param('id', ParseIntPipe) _id: string, - @Param('id', ConceptPipe) concept: Concept, - ) { - await this.conceptService.disable(concept); - return new ConceptResponseDTO(concept); - } + // @Put(':id/disable') + // @ApiOperation({ summary: 'Disable a concept' }) + // @UseGuards(AuthGuard) + // async disable( + // @Param('id', ParseIntPipe) _id: string, + // @Param('id', ConceptPipe) concept: Concept, + // ) { + // await this.conceptService.disable(concept); + // return new ConceptResponseDTO(concept); + // } } diff --git a/src/concept/concept.service.ts b/src/concept/concept.service.ts index 3c19929..304fa7e 100644 --- a/src/concept/concept.service.ts +++ b/src/concept/concept.service.ts @@ -12,7 +12,8 @@ import { } from 'events/concept.events'; import { ConceptType } from './entities/concepttype.entity'; -import typeSeeds from './concept.seed.json'; +import typeSeeds from './seeds/concepttype.seed.json'; +import conceptSeeds from './seeds/concept.seed.json'; @Injectable() export class ConceptService { @@ -23,7 +24,15 @@ export class ConceptService { private conceptTypeRepository: Repository, private eventEmitter: EventEmitter2, ) { - void conceptTypeRepository.save(typeSeeds as DeepPartial[]); + void conceptTypeRepository + .upsert(typeSeeds as DeepPartial[], { + conflictPaths: ['id'], + }) + .then(() => { + void conceptRepository.upsert(conceptSeeds as DeepPartial[], { + conflictPaths: ['id'], + }); + }); } async getById(id: number) { diff --git a/src/concept/entities/concept.entity.ts b/src/concept/entities/concept.entity.ts index 8946793..8b76985 100644 --- a/src/concept/entities/concept.entity.ts +++ b/src/concept/entities/concept.entity.ts @@ -1,16 +1,10 @@ -import { - Column, - Entity, - ManyToOne, - PrimaryGeneratedColumn, - Unique, -} from 'typeorm'; +import { Column, Entity, ManyToOne, PrimaryColumn, Unique } from 'typeorm'; import { ConceptType } from './concepttype.entity'; @Entity() @Unique(['value']) export class Concept { - @PrimaryGeneratedColumn() + @PrimaryColumn() id: number; @Column() diff --git a/src/concept/seeds/concept.seed.json b/src/concept/seeds/concept.seed.json new file mode 100644 index 0000000..a240cdf --- /dev/null +++ b/src/concept/seeds/concept.seed.json @@ -0,0 +1,946 @@ +[ + { + "id": 1, + "type": { + "id": 1 + }, + "value": "object", + "enabled": true + }, + { + "id": 2, + "type": { + "id": 1 + }, + "value": "family", + "enabled": true + }, + { + "id": 3, + "type": { + "id": 1 + }, + "value": "female", + "enabled": true + }, + { + "id": 4, + "type": { + "id": 1 + }, + "value": "male", + "enabled": true + }, + { + "id": 5, + "type": { + "id": 1 + }, + "value": "job", + "enabled": true + }, + { + "id": 6, + "type": { + "id": 1 + }, + "value": "activity", + "enabled": true + }, + { + "id": 7, + "type": { + "id": 1 + }, + "value": "animals", + "enabled": true + }, + { + "id": 8, + "type": { + "id": 1 + }, + "value": "nature", + "enabled": true + }, + { + "id": 9, + "type": { + "id": 1 + }, + "value": "litterature", + "enabled": true + }, + { + "id": 10, + "type": { + "id": 1 + }, + "value": "music", + "enabled": true + }, + { + "id": 11, + "type": { + "id": 1 + }, + "value": "cinema", + "enabled": true + }, + { + "id": 12, + "type": { + "id": 1 + }, + "value": "art", + "enabled": true + }, + { + "id": 13, + "type": { + "id": 1 + }, + "value": "television", + "enabled": true + }, + { + "id": 14, + "type": { + "id": 1 + }, + "value": "title", + "enabled": true + }, + { + "id": 15, + "type": { + "id": 1 + }, + "value": "idea", + "enabled": true + }, + { + "id": 16, + "type": { + "id": 1 + }, + "value": "expression", + "enabled": true + }, + { + "id": 17, + "type": { + "id": 1 + }, + "value": "location", + "enabled": true + }, + { + "id": 18, + "type": { + "id": 1 + }, + "value": "city", + "enabled": true + }, + { + "id": 19, + "type": { + "id": 1 + }, + "value": "date", + "enabled": true + }, + { + "id": 20, + "type": { + "id": 1 + }, + "value": "party", + "enabled": true + }, + { + "id": 21, + "type": { + "id": 1 + }, + "value": "naval transport", + "enabled": true + }, + { + "id": 22, + "type": { + "id": 1 + }, + "value": "aerial transport", + "enabled": true + }, + { + "id": 23, + "type": { + "id": 1 + }, + "value": "land transport", + "enabled": true + }, + { + "id": 24, + "type": { + "id": 1 + }, + "value": "tools", + "enabled": true + }, + { + "id": 25, + "type": { + "id": 1 + }, + "value": "games", + "enabled": true + }, + { + "id": 26, + "type": { + "id": 1 + }, + "value": "clothes", + "enabled": true + }, + { + "id": 27, + "type": { + "id": 1 + }, + "value": "food", + "enabled": true + }, + { + "id": 28, + "type": { + "id": 1 + }, + "value": "house", + "enabled": true + }, + { + "id": 29, + "type": { + "id": 2 + }, + "value": "real", + "enabled": true + }, + { + "id": 30, + "type": { + "id": 2 + }, + "value": "fictive", + "enabled": true + }, + { + "id": 31, + "type": { + "id": 2 + }, + "value": "young", + "enabled": true + }, + { + "id": 32, + "type": { + "id": 2 + }, + "value": "old", + "enabled": true + }, + { + "id": 33, + "type": { + "id": 2 + }, + "value": "slow", + "enabled": true + }, + { + "id": 34, + "type": { + "id": 2 + }, + "value": "fast", + "enabled": true + }, + { + "id": 35, + "type": { + "id": 2 + }, + "value": "protect", + "enabled": true + }, + { + "id": 36, + "type": { + "id": 2 + }, + "value": "attack", + "enabled": true + }, + { + "id": 37, + "type": { + "id": 2 + }, + "value": "love", + "enabled": true + }, + { + "id": 38, + "type": { + "id": 2 + }, + "value": "death", + "enabled": true + }, + { + "id": 39, + "type": { + "id": 2 + }, + "value": "happy", + "enabled": true + }, + { + "id": 40, + "type": { + "id": 2 + }, + "value": "sad", + "enabled": true + }, + { + "id": 41, + "type": { + "id": 2 + }, + "value": "electronics", + "enabled": true + }, + { + "id": 42, + "type": { + "id": 2 + }, + "value": "mechanics", + "enabled": true + }, + { + "id": 43, + "type": { + "id": 2 + }, + "value": "money", + "enabled": true + }, + { + "id": 44, + "type": { + "id": 2 + }, + "value": "time", + "enabled": true + }, + { + "id": 45, + "type": { + "id": 2 + }, + "value": "religion", + "enabled": true + }, + { + "id": 46, + "type": { + "id": 2 + }, + "value": "authority", + "enabled": true + }, + { + "id": 47, + "type": { + "id": 2 + }, + "value": "chemistry", + "enabled": true + }, + { + "id": 48, + "type": { + "id": 2 + }, + "value": "medecine", + "enabled": true + }, + { + "id": 49, + "type": { + "id": 2 + }, + "value": "head", + "enabled": true + }, + { + "id": 50, + "type": { + "id": 2 + }, + "value": "arm", + "enabled": true + }, + { + "id": 51, + "type": { + "id": 2 + }, + "value": "torso", + "enabled": true + }, + { + "id": 52, + "type": { + "id": 2 + }, + "value": "leg", + "enabled": true + }, + { + "id": 53, + "type": { + "id": 2 + }, + "value": "ear", + "enabled": true + }, + { + "id": 54, + "type": { + "id": 2 + }, + "value": "nose", + "enabled": true + }, + { + "id": 55, + "type": { + "id": 2 + }, + "value": "eye", + "enabled": true + }, + { + "id": 56, + "type": { + "id": 2 + }, + "value": "mouth", + "enabled": true + }, + { + "id": 57, + "type": { + "id": 3 + }, + "value": "rain", + "enabled": true + }, + { + "id": 58, + "type": { + "id": 3 + }, + "value": "thunder", + "enabled": true + }, + { + "id": 59, + "type": { + "id": 3 + }, + "value": "night", + "enabled": true + }, + { + "id": 60, + "type": { + "id": 3 + }, + "value": "day", + "enabled": true + }, + { + "id": 61, + "type": { + "id": 3 + }, + "value": "fire", + "enabled": true + }, + { + "id": 62, + "type": { + "id": 3 + }, + "value": "water", + "enabled": true + }, + { + "id": 63, + "type": { + "id": 3 + }, + "value": "wind", + "enabled": true + }, + { + "id": 64, + "type": { + "id": 3 + }, + "value": "earth", + "enabled": true + }, + { + "id": 65, + "type": { + "id": 3 + }, + "value": "stone", + "enabled": true + }, + { + "id": 66, + "type": { + "id": 3 + }, + "value": "wood", + "enabled": true + }, + { + "id": 67, + "type": { + "id": 3 + }, + "value": "metal", + "enabled": true + }, + { + "id": 68, + "type": { + "id": 3 + }, + "value": "cloth", + "enabled": true + }, + { + "id": 69, + "type": { + "id": 3 + }, + "value": "plastic", + "enabled": true + }, + { + "id": 70, + "type": { + "id": 3 + }, + "value": "paper", + "enabled": true + }, + { + "id": 71, + "type": { + "id": 3 + }, + "value": "inverse", + "enabled": true + }, + { + "id": 72, + "type": { + "id": 3 + }, + "value": "cut", + "enabled": true + }, + { + "id": 73, + "type": { + "id": 3 + }, + "value": "multiple", + "enabled": true + }, + { + "id": 74, + "type": { + "id": 3 + }, + "value": "puzzle", + "enabled": true + }, + { + "id": 75, + "type": { + "id": 3 + }, + "value": "inside", + "enabled": true + }, + { + "id": 76, + "type": { + "id": 3 + }, + "value": "grid", + "enabled": true + }, + { + "id": 77, + "type": { + "id": 3 + }, + "value": "zero", + "enabled": true + }, + { + "id": 78, + "type": { + "id": 3 + }, + "value": "one", + "enabled": true + }, + { + "id": 79, + "type": { + "id": 4 + }, + "value": "line", + "enabled": true + }, + { + "id": 80, + "type": { + "id": 4 + }, + "value": "curve", + "enabled": true + }, + { + "id": 81, + "type": { + "id": 4 + }, + "value": "plus", + "enabled": true + }, + { + "id": 82, + "type": { + "id": 4 + }, + "value": "zigzag", + "enabled": true + }, + { + "id": 83, + "type": { + "id": 4 + }, + "value": "spiral", + "enabled": true + }, + { + "id": 84, + "type": { + "id": 4 + }, + "value": "sinusoid", + "enabled": true + }, + { + "id": 85, + "type": { + "id": 4 + }, + "value": "circle", + "enabled": true + }, + { + "id": 86, + "type": { + "id": 4 + }, + "value": "disk", + "enabled": true + }, + { + "id": 87, + "type": { + "id": 4 + }, + "value": "triangle", + "enabled": true + }, + { + "id": 88, + "type": { + "id": 4 + }, + "value": "star", + "enabled": true + }, + { + "id": 89, + "type": { + "id": 4 + }, + "value": "square", + "enabled": true + }, + { + "id": 90, + "type": { + "id": 4 + }, + "value": "plane", + "enabled": true + }, + { + "id": 91, + "type": { + "id": 4 + }, + "value": "cube", + "enabled": true + }, + { + "id": 92, + "type": { + "id": 4 + }, + "value": "sphere", + "enabled": true + }, + { + "id": 93, + "type": { + "id": 4 + }, + "value": "prism", + "enabled": true + }, + { + "id": 94, + "type": { + "id": 4 + }, + "value": "cylinder", + "enabled": true + }, + { + "id": 95, + "type": { + "id": 4 + }, + "value": "cone", + "enabled": true + }, + { + "id": 96, + "type": { + "id": 4 + }, + "value": "hole", + "enabled": true + }, + { + "id": 97, + "type": { + "id": 4 + }, + "value": "tall", + "enabled": true + }, + { + "id": 98, + "type": { + "id": 4 + }, + "value": "small", + "enabled": true + }, + { + "id": 99, + "type": { + "id": 4 + }, + "value": "large", + "enabled": true + }, + { + "id": 100, + "type": { + "id": 4 + }, + "value": "narrow", + "enabled": true + }, + { + "id": 101, + "type": { + "id": 4 + }, + "value": "up", + "enabled": true + }, + { + "id": 102, + "type": { + "id": 4 + }, + "value": "down", + "enabled": true + }, + { + "id": 103, + "type": { + "id": 4 + }, + "value": "left", + "enabled": true + }, + { + "id": 104, + "type": { + "id": 4 + }, + "value": "right", + "enabled": true + }, + { + "id": 105, + "type": { + "id": 4 + }, + "value": "repeat", + "enabled": true + }, + { + "id": 106, + "type": { + "id": 4 + }, + "value": "action", + "enabled": true + }, + { + "id": 107, + "type": { + "id": 5 + }, + "value": "red", + "enabled": true + }, + { + "id": 108, + "type": { + "id": 5 + }, + "value": "orange", + "enabled": true + }, + { + "id": 109, + "type": { + "id": 5 + }, + "value": "yellow", + "enabled": true + }, + { + "id": 110, + "type": { + "id": 5 + }, + "value": "green", + "enabled": true + }, + { + "id": 111, + "type": { + "id": 5 + }, + "value": "blue", + "enabled": true + }, + { + "id": 112, + "type": { + "id": 5 + }, + "value": "purple", + "enabled": true + }, + { + "id": 113, + "type": { + "id": 5 + }, + "value": "pink", + "enabled": true + }, + { + "id": 114, + "type": { + "id": 5 + }, + "value": "brown", + "enabled": true + }, + { + "id": 115, + "type": { + "id": 5 + }, + "value": "black", + "enabled": true + }, + { + "id": 116, + "type": { + "id": 5 + }, + "value": "gray", + "enabled": true + }, + { + "id": 117, + "type": { + "id": 5 + }, + "value": "white", + "enabled": true + }, + { + "id": 118, + "type": { + "id": 5 + }, + "value": "transparent", + "enabled": true + } +] \ No newline at end of file diff --git a/src/concept/concept.seed.json b/src/concept/seeds/concepttype.seed.json similarity index 100% rename from src/concept/concept.seed.json rename to src/concept/seeds/concepttype.seed.json