diff --git a/package-lock.json b/package-lock.json index dc7af96..d6afabb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@nestjs/mercurius": "^13.2.3", "@nestjs/platform-fastify": "^11.1.12", "@nestjs/swagger": "^11.2.5", + "@nestjs/typeorm": "^11.0.0", "fastify": "^5.7.2", "graphiql": "^5.2.2", "graphql": "^16.12.0", @@ -224,6 +225,7 @@ "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", @@ -1193,6 +1195,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@fastify/accept-negotiator": "^2.0.0", "@fastify/send": "^4.0.0", @@ -1217,6 +1220,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "duplexify": "^4.1.3", "fastify-plugin": "^5.0.0", @@ -1314,6 +1318,7 @@ "resolved": "https://registry.npmjs.org/@graphiql/react/-/react-0.37.3.tgz", "integrity": "sha512-rNJjwsYGhcZRdZ2FnyU6ss06xQaZ4UordyvOhp7+b/bEqQiEBpMOLJjuUr48Z6T7zEbZBnzCJpIJyXNqlcfQeA==", "license": "MIT", + "peer": true, "dependencies": { "@graphiql/toolkit": "^0.11.3", "@radix-ui/react-dialog": "^1.1", @@ -2593,6 +2598,7 @@ "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.12.tgz", "integrity": "sha512-v6U3O01YohHO+IE3EIFXuRuu3VJILWzyMmSYZXpyBbnp0hk0mFyHxK2w3dF4I5WnbwiRbWlEXdeXFvPQ7qaZzw==", "license": "MIT", + "peer": true, "dependencies": { "file-type": "21.3.0", "iterare": "1.2.1", @@ -2625,6 +2631,7 @@ "integrity": "sha512-97DzTYMf5RtGAVvX1cjwpKRiCUpkeQ9CCzSAenqkAhOmNVVFaApbhuw+xrDt13rsCa2hHVOYPrV4dBgOYMJjsA==", "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "@nuxt/opencollective": "0.4.1", "fast-safe-stringify": "2.1.1", @@ -3046,6 +3053,19 @@ } } }, + "node_modules/@nestjs/typeorm": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-11.0.0.tgz", + "integrity": "sha512-SOeUQl70Lb2OfhGkvnh4KXWlsd+zA08RuuQgT7kKbzivngxzSo1Oc7Usu5VxCxACQC9wc2l9esOHILSJeK7rJA==", + "license": "MIT", + "peerDependencies": { + "@nestjs/common": "^10.0.0 || ^11.0.0", + "@nestjs/core": "^10.0.0 || ^11.0.0", + "reflect-metadata": "^0.1.13 || ^0.2.0", + "rxjs": "^7.2.0", + "typeorm": "^0.3.0" + } + }, "node_modules/@noble/hashes": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", @@ -4150,6 +4170,7 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -4231,6 +4252,7 @@ "integrity": "sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -4328,6 +4350,7 @@ "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.54.0", "@typescript-eslint/types": "8.54.0", @@ -5026,6 +5049,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "devOptional": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5088,6 +5112,7 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5528,6 +5553,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6448,6 +6474,7 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -6508,6 +6535,7 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -6893,6 +6921,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@fastify/ajv-compiler": "^4.0.5", "@fastify/error": "^4.0.0", @@ -7481,6 +7510,7 @@ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz", "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "license": "MIT", + "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -8149,6 +8179,7 @@ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", @@ -9312,6 +9343,7 @@ "resolved": "https://registry.npmjs.org/mercurius/-/mercurius-16.7.0.tgz", "integrity": "sha512-xCu0qfOIvCm52jKKXFzl9VfPp+9DQrP/5cS0qt8OAA1xZomjTniK4ZlodOP1Q6dsgdfp1RtLx/KQcP7283febw==", "license": "MIT", + "peer": true, "dependencies": { "@fastify/error": "^4.0.0", "@fastify/static": "^9.0.0", @@ -9502,7 +9534,8 @@ "version": "0.52.2", "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.2.tgz", "integrity": "sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/monaco-graphql": { "version": "1.7.3", @@ -9568,6 +9601,7 @@ "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.16.2.tgz", "integrity": "sha512-JsqBpYNy7pH20lGfPuSyRSIcCxSeAIwxWADpV64nP9KeyN3ZKpHZgjKXuBKsh7dH6FbOvf1bOgoVKjSUPXRMTw==", "license": "MIT", + "peer": true, "dependencies": { "aws-ssl-profiles": "^1.1.2", "denque": "^2.1.0", @@ -10124,6 +10158,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -10324,6 +10359,7 @@ "resolved": "https://registry.npmjs.org/react-compiler-runtime/-/react-compiler-runtime-19.1.0-rc.1.tgz", "integrity": "sha512-wCt6g+cRh8g32QT18/9blfQHywGjYu+4FlEc3CW1mx3pPxYzZZl1y+VtqxRgnKKBCFLIGUYxog4j4rs5YS86hw==", "license": "MIT", + "peer": true, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental" } @@ -10457,7 +10493,8 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/require-directory": { "version": "2.1.1", @@ -10646,8 +10683,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/schema-utils": { "version": "3.3.0", @@ -11362,6 +11398,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -11732,6 +11769,7 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -12065,6 +12103,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12373,6 +12412,7 @@ "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -12442,6 +12482,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", diff --git a/package.json b/package.json index 3625786..e515861 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@nestjs/mercurius": "^13.2.3", "@nestjs/platform-fastify": "^11.1.12", "@nestjs/swagger": "^11.2.5", + "@nestjs/typeorm": "^11.0.0", "fastify": "^5.7.2", "graphiql": "^5.2.2", "graphql": "^16.12.0", diff --git a/src/app.module.ts b/src/app.module.ts index e96a4e9..1c1898b 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -3,7 +3,9 @@ import { AppController } from './app.controller'; import { AppService } from './app.service'; import { GraphQLModule } from '@nestjs/graphql'; import { MercuriusDriver, MercuriusDriverConfig } from '@nestjs/mercurius'; -import { databaseProviders } from './database.providers'; +import { EventsModule } from './events/events.module'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { EventEntity } from './events/events.entity'; @Module({ imports: [ @@ -12,9 +14,22 @@ import { databaseProviders } from './database.providers'; graphiql: true, autoSchemaFile: true } as MercuriusDriverConfig), + EventsModule, + TypeOrmModule.forRoot({ + type: 'mysql', + host: process.env.DB_HOST || 'database', + port: parseInt(process.env.DB_PORT || "3306"), + username: process.env.DB_USER || 'root', + password: process.env.DB_PASSWORD || 'root', + database: process.env.DB_NAME || 'ritzenbergen', + synchronize: true, + entities: [EventEntity] + }), + + ], controllers: [AppController], - providers: [AppService, AppController, ...databaseProviders], + providers: [AppService, AppController], }) export class AppModule {} diff --git a/src/database.providers.ts b/src/database.providers.ts deleted file mode 100644 index e7c6c93..0000000 --- a/src/database.providers.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { DataSource } from 'typeorm'; - -export const databaseProviders = [ - { - provide: 'DATA_SOURCE', - useFactory: async () => { - const dataSource = new DataSource({ - type: 'mysql', - host: process.env.DB_HOST || 'database', - port: parseInt(process.env.DB_PORT || "3006"), - username: process.env.DB_USER || 'root', - password: process.env.DB_PASSWORD || 'root', - database: process.env.DB_NAME || 'ritzenbergen', - entities: [ - __dirname + '/**/*.entity{.ts,.js}', - ], - synchronize: true, - }); - - return dataSource.initialize(); - }, - }, -]; diff --git a/src/dto b/src/dto index aa66cbd..669bc47 160000 --- a/src/dto +++ b/src/dto @@ -1 +1 @@ -Subproject commit aa66cbda75b54186bce2f32865c83ddc3a052162 +Subproject commit 669bc47276e5566bc1929014d19cfa8ce1922ad8 diff --git a/src/events/events.controller.spec.ts b/src/events/events.controller.spec.ts new file mode 100644 index 0000000..6e45c1f --- /dev/null +++ b/src/events/events.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { EventsController } from './events.controller'; + +describe('EventsController', () => { + let controller: EventsController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [EventsController], + }).compile(); + + controller = module.get(EventsController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/events/events.controller.ts b/src/events/events.controller.ts new file mode 100644 index 0000000..64093b9 --- /dev/null +++ b/src/events/events.controller.ts @@ -0,0 +1,23 @@ +import { Controller, Get, Inject, Injectable } from '@nestjs/common'; +import { Query } from '@nestjs/graphql'; +import { MyEvent } from 'src/dto/event.dto'; +import { EventsService } from './events.service'; + +@Controller('/api/events') +export class EventsController { + + constructor( + + private readonly eventsService: EventsService + + + ){} + + @Get("/") + @Query(()=>[MyEvent]) + async events(): Promise{ + + return await this.eventsService.getEvents(); + + } +} diff --git a/src/events/events.entity.ts b/src/events/events.entity.ts new file mode 100644 index 0000000..15dd1e7 --- /dev/null +++ b/src/events/events.entity.ts @@ -0,0 +1,33 @@ +import { EventType } from "src/dto/event.dto"; +import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; + + +@Entity() +export class EventEntity { + @PrimaryGeneratedColumn() + id: number; + + @Column() + eventname: string; + + @Column({ type: "date" }) + datum: Date; + + @Column({ type: "enum", enum: [EventType.fotos, EventType.html, EventType.markdown, EventType.link] }) + type: EventType; + + @Column() + content: string; + + @Column() + minitext: string; + + @Column({ nullable: true }) + link:string; + + @Column() + foto: string; + + @Column({ nullable: true }) + formular: number; +} \ No newline at end of file diff --git a/src/events/events.module.ts b/src/events/events.module.ts new file mode 100644 index 0000000..ba21286 --- /dev/null +++ b/src/events/events.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { EventsController } from './events.controller'; +import { EventsService } from './events.service'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { EventEntity } from './events.entity'; + +@Module({ + imports: [ + TypeOrmModule.forFeature([EventEntity]) + ], + controllers: [EventsController], + providers: [EventsService, EventsController], +}) +export class EventsModule {} diff --git a/src/events/events.service.spec.ts b/src/events/events.service.spec.ts new file mode 100644 index 0000000..f26bdfe --- /dev/null +++ b/src/events/events.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { EventsService } from './events.service'; + +describe('EventsService', () => { + let service: EventsService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [EventsService], + }).compile(); + + service = module.get(EventsService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/events/events.service.ts b/src/events/events.service.ts new file mode 100644 index 0000000..d195c1f --- /dev/null +++ b/src/events/events.service.ts @@ -0,0 +1,22 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { MyEvent } from 'src/dto/event.dto'; +import { Repository } from 'typeorm'; +import { EventEntity } from './events.entity'; +import { InjectRepository } from '@nestjs/typeorm'; + +@Injectable() +export class EventsService { + constructor( + @InjectRepository(EventEntity) + private readonly eventRepository: Repository + + ){} + + async getEvents(): Promise { + + return (await this.eventRepository.find()) as MyEvent[]; + + + + } +}