diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..4be220d9b7a93b6db5f3c6977b3e878973c70bf3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM node:12.13-slim + +# Create app directory +WORKDIR /app + +# Install app dependencies +# A wildcard is used to ensure both package.json AND package-lock.json are copied +COPY package*.json ./ + +RUN npm install + +# Bundle app source +COPY . . + +CMD ["sh","-c", "npm run start:prod"] + +EXPOSE 3000 diff --git a/db/init-db.sh b/db/init-db.sh new file mode 100644 index 0000000000000000000000000000000000000000..eb93fd77a432ad1f338ab29c6a3941c916ba8040 --- /dev/null +++ b/db/init-db.sh @@ -0,0 +1,5 @@ +mongo admin -u root -p MONGO_ROOT_PASSWORD +use ram +db.structures.insertOne({"id":1,"numero":"26-190","dateDeCreation":"Mon Nov 16 2020 16:37:00 GMT+0100 (heure normale d’Europe centrale)","derniereModification":"Mon Nov 16 2020 16:38:00 GMT+0100 (heure normale d’Europe centrale)","nomDeLusager":"-","votreStructureEstElle":"Un établissement principal (siège social)","nomDeVotreStructure":"Maison de l'Emploi de Feyzin","description":"- Permanence de médiation numérique (sur rdv) les lundis; mardi, mercredi apres midi 13h30 - 17h30 et les vendredi matins 9h-12h - mise à disposition d'ordinateurs aux horaires d'ouverture de la structure lundi, mercredi, jeudi 9h-12h; 13h30-17h30 ; mardi 10h-12h 13h30- 17h30 et vendredi matin 9h-12H. - mise à disposition (sur rdv)de matériels pour suivre des formations / informations collectives à distance et participer à un entretien en visio - cours de code et entrainement en ligne sur rdv","activitesMaintenuesDansLeCadreDuConfinement":"Toutes les activités sont maintenues durant le confinement. Toutes nécessitent cependant de prendre rdv préalablement","n":"18","voie":"Rue de la Mairie","telephone":"04 72 21 46 66","courriel":"m.annequin@ville-feyzin.fr","siteWeb":"ville de Feyzin","facebook":"","twitter":"","instagram":"","civilite":"Madame","nom":"Annequin","prenom":"Muriel","fonction":"Directeur","accessibilitePersonnesAMobiliteReduitePmr":"True","modalitesDacces":["Accès libre","Sur RDV"],"pourLesRdv,MerciDePreciserSilEstNecessaireDapporterDesPiecesJustificativesOuDuMateriel.":"Si la personne n'est pas inscrite à la maison de l'emploi il lui sera demandé de s'inscrire.","labelsEtQualifications":[""],"publicsAcceptes":["Tout public"],"fermeturesExceptionnelles":"Jours fériés","jaccompagneLesUsagersDansLeursDemarchesEnLigne":"True","accompagnementDesDemarches":["Pôle Emploi","Accompagnant CAF"],"autresAccompagnements":"","lesCompetencesDeBase":[""],"accesAuxDroits":["176"],"insertionSocialeEtProfessionnelle":[""],"aideALaParentalite":[""],"cultureEtSecuriteNumerique":[""],"wifiEnAccesLibre":"True","ordinateurs":"True","nombre":"5","tablettes":"","bornesNumeriques":"","imprimantes":"True","precisionsSiNecessaire":"","statutJuridique":"","appartenezVousAUnReseauDeMediation":"","precisezLequel":"","idDeLitemStructureDansDirectus":"141","statutDeLitemStructureDansDirectus":"","idDeLitemOffreDansDirectus":"46","statut":"Versement des données offre","typeDeStructure":["Mairie"],"commune":"Feyzin","hours":{"monday":{"open":true,"time":[{"openning":900,"closing":1200},{"openning":1330,"closing":1730}]},"tuesday":{"open":true,"time":[{"openning":1000,"closing":1200},{"openning":1330,"closing":1730}]},"wednesday":{"open":true,"time":[{"openning":900,"closing":1200},{"openning":1330,"closing":1730}]},"thursday":{"open":true,"time":[{"openning":900,"closing":1200},{"openning":1330,"closing":1730}]},"friday":{"open":true,"time":[{"openning":900,"closing":1200},{"openning":null,"closing":null}]},"saturday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"sunday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]}}}) +db.structures.insertOne({"id":2,"numero":"26-182","dateDeCreation":"Mon Nov 16 2020 15:15:00 GMT+0100 (heure normale d’Europe centrale)","derniereModification":"Tue Nov 17 2020 09:10:00 GMT+0100 (heure normale d’Europe centrale)","nomDeLusager":"-","votreStructureEstElle":"Un établissement principal (siège social)","nomDeVotreStructure":"Centre social Quartier Vitalité","description":"Le centre social s'inscrit dans une démarche d'animation de la vie sociale locale afin de permettre aux habitants d'exprimer, de concevoir, de réaliser leurs projets. C'est un lieu de proximité à vocation familiale et intergénérationnelle qui propose des activités sociales, éducatives et culturelles pour répondre aux besoins de chacun.","activitesMaintenuesDansLeCadreDuConfinement":"Aide aux démarches administratives et médiation numérique, sur rendez vous uniquement","n":"7","voie":"Rue Saint Polycarpe","telephone":"04.78.39.36.36","courriel":"aurebertherat@gmail.com","siteWeb":"www.centresocialquartiervitalite.i-citoyen.com","facebook":"","twitter":"","instagram":"","civilite":"Madame","nom":"BERTHERAT","prenom":"AURELIE","fonction":"Autres","accessibilitePersonnesAMobiliteReduitePmr":"True","modalitesDacces":["Téléphone / Visio","Sur RDV"],"pourLesRdv,MerciDePreciserSilEstNecessaireDapporterDesPiecesJustificativesOuDuMateriel.":"","labelsEtQualifications":[""],"publicsAcceptes":["Jeunes (16-25 ans)","Adultes","Séniors (+ de 65 ans)","Tout public"],"fermeturesExceptionnelles":"vacances de Noel + tout le mois d'Aout","jaccompagneLesUsagersDansLeursDemarchesEnLigne":"True","accompagnementDesDemarches":["Pôle Emploi","CPAM","Impôts","Logement","CARSAT","Accompagnant CAF"],"autresAccompagnements":"","lesCompetencesDeBase":["259","261","249","222","212","186","183","260"],"accesAuxDroits":["175","174","173","172","171","167","165","176"],"insertionSocialeEtProfessionnelle":["193","192","191","262","194"],"aideALaParentalite":["238","178","166","257"],"cultureEtSecuriteNumerique":["232","225","221","218","208","195","264"],"wifiEnAccesLibre":"","ordinateurs":"True","nombre":"3","tablettes":"","bornesNumeriques":"","imprimantes":"True","precisionsSiNecessaire":"Impression de documents uniquement en lien avec le rendez vous et l'accompagnement administratif de la personne","statutJuridique":"","appartenezVousAUnReseauDeMediation":"","precisezLequel":"","idDeLitemStructureDansDirectus":"140","statutDeLitemStructureDansDirectus":"","idDeLitemOffreDansDirectus":"","statut":"Erreur lors du versement des données offre","typeDeStructure":["Centre socio-culturel"],"commune":"Lyon 1","hours":{"monday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"tuesday":{"open":true,"time":[{"openning":1330,"closing":1700},{"openning":null,"closing":null}]},"wednesday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"thursday":{"open":true,"time":[{"openning":930,"closing":1200},{"openning":null,"closing":null}]},"friday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"saturday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"sunday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]}}}) +db.structures.insertOne({"id":3,"numero":"26-181","dateDeCreation":"Mon Nov 16 2020 12:49:00 GMT+0100 (heure normale d’Europe centrale)","derniereModification":"Tue Nov 17 2020 09:12:00 GMT+0100 (heure normale d’Europe centrale)","nomDeLusager":"-","votreStructureEstElle":"Un établissement principal (siège social)","nomDeVotreStructure":"Centre socioculturel la Carnière","description":"Le centre socio-culturel la Carnière est une association développe dans le cadre de son projet des activités, des services et un soutien aux projets et initiatives ouvert à tous les habitants de la commune. En phase avec les enjeux du territoire, nous œuvrons plus particulièrement dans les domaines de l'accompagnement social et l'accès aux droits, le handicap, la fracture numérique, la parentalité et enfin auprès des personnes âgées.","activitesMaintenuesDansLeCadreDuConfinement":"- WEBTV pour garder le contact et proposer des activités à faire à la maison en direct en replay. - Accompagnement et médiation numérique (démarche en ligne, accès au droit...) - Handicap et numérique. - Entraide numérique sur rdv individuel (sortir d'un blocage, découvrir skype, zoom...) - Ateliers linguistiques via l'outil numérique. - Accompagnement scolaire à distance. - Conférence parentalité en visio.","n":"4","voie":"Montée de la Carnière","telephone":"0478206197","courriel":"contact@centresocial-lacarniere.fr ou numerique@centresocial-lacarniere.fr","siteWeb":"www.centresocial-lacarniere.fr","facebook":"","twitter":"","instagram":"","civilite":"Monsieur","nom":"Chanteperdrix Cyril ou Haouchet Karim","prenom":"","fonction":"Directeur","accessibilitePersonnesAMobiliteReduitePmr":"True","modalitesDacces":["Téléphone / Visio","Sur RDV"],"pourLesRdv,MerciDePreciserSilEstNecessaireDapporterDesPiecesJustificativesOuDuMateriel.":"ordinateur portable habituel.","labelsEtQualifications":["Pass numérique"],"publicsAcceptes":["Tout public"],"fermeturesExceptionnelles":"","jaccompagneLesUsagersDansLeursDemarchesEnLigne":"True","accompagnementDesDemarches":["Pôle Emploi","CPAM","Impôts","Logement","CARSAT","Accompagnant CAF"],"autresAccompagnements":"","lesCompetencesDeBase":["259","261","249","222","212","186","183","260"],"accesAuxDroits":["175","174","173","172","171","167","165","176"],"insertionSocialeEtProfessionnelle":[""],"aideALaParentalite":["178","166","257"],"cultureEtSecuriteNumerique":["255","232","225","221","218","208","195","164","163","162","264"],"wifiEnAccesLibre":"True","ordinateurs":"","nombre":"","tablettes":"","bornesNumeriques":"","imprimantes":"","precisionsSiNecessaire":"équipements informatiques fournis pour les formations","statutJuridique":"","appartenezVousAUnReseauDeMediation":"","precisezLequel":"","idDeLitemStructureDansDirectus":"143","statutDeLitemStructureDansDirectus":"","idDeLitemOffreDansDirectus":"","statut":"Erreur lors du versement des données offre","typeDeStructure":["Centre socio-culturel"],"commune":"Saint-Priest","hours":{"monday":{"open":true,"time":[{"openning":900,"closing":1800},{"openning":null,"closing":null}]},"tuesday":{"open":true,"time":[{"openning":1400,"closing":1730},{"openning":null,"closing":null}]},"wednesday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"thursday":{"open":true,"time":[{"openning":900,"closing":1800},{"openning":null,"closing":null}]},"friday":{"open":true,"time":[{"openning":900,"closing":1730},{"openning":null,"closing":null}]},"saturday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"sunday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]}}}) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 094456d50a3f8856c8a2058bb26e49c3358617c7..1db1339877579121210b05afe2785cc04b12b013 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,7 +25,7 @@ services: ports: - ${MONGO_PORT}:27017 volumes: - - service-ram:/bitnami + - db-ram:/bitnami mongo-express: image: mongo-express @@ -42,4 +42,4 @@ services: ME_CONFIG_MONGODB_SERVER: database-ram volumes: - service-ram: + db-ram: diff --git a/package-lock.json b/package-lock.json index 9a5f719c1ffd210b980ff5a4a60789898c256177..9942f6408c8eca009f5c9c5a533a73ffdd7b20c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4139,6 +4139,11 @@ "is-obj": "^2.0.0" } }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", diff --git a/package.json b/package.json index 1a7ca5c001b4024e088835eec24ddb8cec616433..086e1dc5890092435b69122b51f35b3ed1a331c9 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "prebuild": "rimraf dist", "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", + "start": "ts-node -r tsconfig-paths/register src/main.ts", "start:dev": "nodemon", "start:debug": "nodemon --config nodemon-debug.json", "start:prod": "node dist/main", @@ -25,6 +25,7 @@ "@nestjs/mongoose": "^7.1.0", "@nestjs/platform-express": "^7.5.1", "@nestjs/swagger": "^4.7.5", + "dotenv": "^8.2.0", "mongoose": "^5.10.15", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", diff --git a/src/app.module.ts b/src/app.module.ts index 8093e3f65aff3c87ed3d3946d5918ec3483723af..aa727eb810ef008fdcf470dbbd66f7241b4bf9ce 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -3,11 +3,13 @@ import { MongooseModule } from '@nestjs/mongoose'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { StructuresModule } from './structures/structures.module'; +import { ConfigurationModule } from './configuration/configuration.module'; @Module({ imports: [ + ConfigurationModule, MongooseModule.forRoot( - `mongodb://${process.env.MONGO_NON_ROOT_USERNAME}:${process.env.MONGO_NON_ROOT_PASSWORD}@${process.env.MONGO_DB_HOST_AND_PORT}/reuse` + `mongodb://${process.env.MONGO_NON_ROOT_USERNAME}:${process.env.MONGO_NON_ROOT_PASSWORD}@${process.env.MONGO_DB_HOST_AND_PORT}/ram` ), StructuresModule, ], diff --git a/src/configuration/configuration.module.ts b/src/configuration/configuration.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..44cc4489f84a6af3c501ea04d6fb51c4151c6b95 --- /dev/null +++ b/src/configuration/configuration.module.ts @@ -0,0 +1,14 @@ +import { Module, Global } from '@nestjs/common'; +import { ConfigurationService } from './configuration.service'; + +@Global() +@Module({ + providers: [ + { + provide: ConfigurationService, + useValue: new ConfigurationService(), + }, + ], + exports: [ConfigurationService], +}) +export class ConfigurationModule {} diff --git a/src/configuration/configuration.service.ts b/src/configuration/configuration.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..ecb1919a1519df3436d2be9d8753972e08e1ef2d --- /dev/null +++ b/src/configuration/configuration.service.ts @@ -0,0 +1,8 @@ +import * as dotenv from 'dotenv'; + +export class ConfigurationService { + constructor() { + // Initializing conf with values from var env + dotenv.config(); + } +} diff --git a/src/structures/dto/create-structure.dto.ts b/src/structures/dto/create-structure.dto.ts new file mode 100644 index 0000000000000000000000000000000000000000..019b210aa4da6a72982a1f56dc1d3568d83f31d4 --- /dev/null +++ b/src/structures/dto/create-structure.dto.ts @@ -0,0 +1,55 @@ +import { Week } from '../schemas/week.schema'; + +export class CreateStructureDto { + id: number; + numero: number; + dateDeCreation: string; + derniereModification: string; + nomDeLusager: string; + votreStructureEstElle: string; + nomDeVotreStructure: string; + description: string; + activitesMaintenuesDansLeCadreDuConfinement: string; + n: string; + voie: string; + telephone: string; + courriel: string; + siteWeb: string; + facebook: string; + twitter: string; + instagram: string; + civilite: string; + nom: string; + prenom: string; + fonction: string; + accessibilitePersonnesAMobiliteReduitePmr: string; + modalitesDacces: string[]; + labelsEtQualifications: string[]; + publicsAcceptes: string[]; + fermeturesExceptionnelles: string; + jaccompagneLesUsagersDansLeursDemarchesEnLigne: boolean; + accompagnementDesDemarches: string[]; + autresAccompagnements: string; + lesCompetencesDeBase: string[]; + accesAuxDroits: string[]; + insertionSocialeEtProfessionnelle: string[]; + aideALaParentalite: string[]; + cultureEtSecuriteNumerique: string[]; + wifiEnAccesLibre: boolean; + ordinateurs: boolean; + nombre: string; + tablettes: boolean; + bornesNumeriques: boolean; + imprimantes: boolean; + precisionsSiNecessaire: string; + statutJuridique: string; + appartenezVousAUnReseauDeMediation: string; + precisezLequel: string; + idDeLitemStructureDansDirectus: string; + statutDeLitemStructureDansDirectus: string; + idDeLitemOffreDansDirectus: string; + statut: string; + typeDeStructure: string[]; + commune: string; + hours: Week; +} diff --git a/src/structures/schemas/day.schema.ts b/src/structures/schemas/day.schema.ts new file mode 100644 index 0000000000000000000000000000000000000000..86461ce9a9d0c03d89f88c817c787bc5921d97be --- /dev/null +++ b/src/structures/schemas/day.schema.ts @@ -0,0 +1,12 @@ +import { SchemaFactory } from '@nestjs/mongoose'; +import { Document } from 'mongoose'; +import { Time } from './time.schema'; + +export type DayDocument = Day & Document; + +export class Day { + open: boolean; + time: Time[]; +} + +export const DaySchema = SchemaFactory.createForClass(Day); diff --git a/src/structures/schemas/structure.schema.ts b/src/structures/schemas/structure.schema.ts new file mode 100644 index 0000000000000000000000000000000000000000..254774be33195a471a16dc4816382fb8cfc1f2fb --- /dev/null +++ b/src/structures/schemas/structure.schema.ts @@ -0,0 +1,163 @@ +import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; +import { Document } from 'mongoose'; +import { Week } from './week.schema'; + +export type StructureDocument = Structure & Document; + +@Schema() +export class Structure { + @Prop() + id: number; + + @Prop() + numero: string; + + @Prop() + dateDeCreation: string; + + @Prop() + derniereModification: string; + + @Prop() + nomDeLusager: string; + + @Prop() + votreStructureEstElle: string; + + @Prop() + nomDeVotreStructure: string; + + @Prop() + description: string; + + @Prop() + activitesMaintenuesDansLeCadreDuConfinement: string; + + @Prop() + n: string; + + @Prop() + voie: string; + + @Prop() + telephone: string; + + @Prop() + courriel: string; + + @Prop() + siteWeb: string; + + @Prop() + facebook: string; + + @Prop() + twitter: string; + + @Prop() + instagram: string; + + @Prop() + civilite: string; + + @Prop() + nom: string; + + @Prop() + prenom: string; + + @Prop() + fonction: string; + + @Prop() + accessibilitePersonnesAMobiliteReduitePmr: string; + + @Prop() + modalitesDacces: string[]; + + @Prop() + labelsEtQualifications: string[]; + + @Prop() + publicsAcceptes: string[]; + + @Prop() + fermeturesExceptionnelles: string; + + @Prop() + jaccompagneLesUsagersDansLeursDemarchesEnLigne: boolean; + + @Prop() + accompagnementDesDemarches: string[]; + + @Prop() + autresAccompagnements: string; + + @Prop() + lesCompetencesDeBase: string[]; + + @Prop() + accesAuxDroits: string[]; + + @Prop() + insertionSocialeEtProfessionnelle: string[]; + + @Prop() + aideALaParentalite: string[]; + + @Prop() + cultureEtSecuriteNumerique: string[]; + + @Prop() + wifiEnAccesLibre: boolean; + + @Prop() + ordinateurs: boolean; + + @Prop() + nombre: string; + + @Prop() + tablettes: boolean; + + @Prop() + bornesNumeriques: boolean; + + @Prop() + imprimantes: boolean; + + @Prop() + precisionsSiNecessaire: string; + + @Prop() + statutJuridique: string; + + @Prop() + appartenezVousAUnReseauDeMediation: string; + + @Prop() + precisezLequel: string; + + @Prop() + idDeLitemStructureDansDirectus: string; + + @Prop() + statutDeLitemStructureDansDirectus: string; + + @Prop() + idDeLitemOffreDansDirectus: string; + + @Prop() + statut: string; + + @Prop() + typeDeStructure: string[]; + + @Prop() + commune: string; + + @Prop() + hours: Week; +} + +export const StructureSchema = SchemaFactory.createForClass(Structure); diff --git a/src/structures/schemas/time.schema.ts b/src/structures/schemas/time.schema.ts new file mode 100644 index 0000000000000000000000000000000000000000..986b7773a38ace7f052d28519321bbb2e37efeab --- /dev/null +++ b/src/structures/schemas/time.schema.ts @@ -0,0 +1,11 @@ +import { SchemaFactory } from '@nestjs/mongoose'; +import { Document } from 'mongoose'; + +export type TimeDocument = Time & Document; + +export class Time { + openning: number; + closing: number; +} + +export const TimeSchema = SchemaFactory.createForClass(Time); diff --git a/src/structures/schemas/week.schema.ts b/src/structures/schemas/week.schema.ts new file mode 100644 index 0000000000000000000000000000000000000000..53c9fed58a1611385f31924600838cdb50260914 --- /dev/null +++ b/src/structures/schemas/week.schema.ts @@ -0,0 +1,23 @@ +import { SchemaFactory } from '@nestjs/mongoose'; +import { Document } from 'mongoose'; +import { Day } from './day.schema'; + +export type WeekDocument = Week & Document; + +export class Week { + monday: Day; + + tuesday: Day; + + wednesday: Day; + + thursday: Day; + + friday: Day; + + saturday: Day; + + sunday: Day; +} + +export const WeekSchema = SchemaFactory.createForClass(Week); diff --git a/src/structures/structures.controller.ts b/src/structures/structures.controller.ts index ac73ed44fa67199f5bd78b07f015a3c7e9dfc151..5d8e0cb05a4b0a6dc02fb808b9e5ccc15a46b251 100644 --- a/src/structures/structures.controller.ts +++ b/src/structures/structures.controller.ts @@ -1,4 +1,19 @@ -import { Controller } from '@nestjs/common'; +import { Body, Controller, Get, Post } from '@nestjs/common'; +import { CreateStructureDto } from './dto/create-structure.dto'; +import { Structure } from './schemas/structure.schema'; +import { StructuresService } from './structures.service'; @Controller('structures') -export class StructuresController {} +export class StructuresController { + constructor(private readonly structureService: StructuresService) {} + + @Post() + async create(@Body() createCatDto: CreateStructureDto) { + await this.structureService.create(createCatDto); + } + + @Get() + async findAll(): Promise<Structure[]> { + return this.structureService.findAll(); + } +} diff --git a/src/structures/structures.module.ts b/src/structures/structures.module.ts index 3d1cdad6eee4650d5f8623611120e0bc56598f41..555c9dd7b0683810e94eb56c1fb31d2ca9a2229e 100644 --- a/src/structures/structures.module.ts +++ b/src/structures/structures.module.ts @@ -1,8 +1,11 @@ import { Module } from '@nestjs/common'; +import { MongooseModule } from '@nestjs/mongoose'; +import { Structure, StructureSchema } from './schemas/structure.schema'; import { StructuresController } from './structures.controller'; import { StructuresService } from './structures.service'; @Module({ + imports: [MongooseModule.forFeature([{ name: Structure.name, schema: StructureSchema }])], controllers: [StructuresController], providers: [StructuresService], }) diff --git a/src/structures/structures.service.ts b/src/structures/structures.service.ts index 476eefdf647a8b68366bffd3114b240a423762d0..d6b6750f0b1c2f85cae1527749f6cdddb9f1cc29 100644 --- a/src/structures/structures.service.ts +++ b/src/structures/structures.service.ts @@ -1,4 +1,19 @@ import { Injectable } from '@nestjs/common'; +import { InjectModel } from '@nestjs/mongoose'; +import { Model } from 'mongoose'; +import { CreateStructureDto } from './dto/create-structure.dto'; +import { Structure, StructureDocument } from './schemas/structure.schema'; @Injectable() -export class StructuresService {} +export class StructuresService { + constructor(@InjectModel(Structure.name) private structureModel: Model<StructureDocument>) {} + + async create(createStructrureDto: CreateStructureDto): Promise<Structure> { + const createdStructure = new this.structureModel(createStructrureDto); + return createdStructure.save(); + } + + async findAll(): Promise<Structure[]> { + return this.structureModel.find().exec(); + } +}