Dejo mi aporte de c贸mo a la vez tener el timestamps en true, en el Shema que quieras, me refiero al createdAt y updatedAt
@Schema({
timestamps: true,
})
Introducci贸n
驴Ya tomaste el Curso de NestJS: Programaci贸n Modular?
Instalaci贸n de Docker para este curso
Instalaci贸n de Platzi Store y presentaci贸n
Database
Configuraci贸n de Docker para MongoDB
Exploraci贸n de la base de datos con Mongo Compass
Instalando y conectando MongoDB Driver
Conexi贸n como inyectable
Ejecutando un query
Usando variables de ambiente en Mongo
Mongoose
驴Qu茅 es Mongoose? Instalaci贸n y configuraci贸n
Implementando Mongoose en M贸dulos
Conectando Mongo a los servicios
Create, update y delete
Pipe para mongoid
Agregando paginaci贸n
Agregando un filtro de rango para precios
Agregando indexadores
Relaciones en MongoDB
Relaciones uno a uno embebidas
Relaciones uno a uno referenciadas
Relaciones uno a muchos embebidas
C贸mo tipar relaciones uno a muchos embebidas
Relaciones uno a muchos referenciadas
Manipulaci贸n de arrays en MongoDB
Pr贸ximos pasos
Contin煤a con el Curso de NestJS: Autenticaci贸n con Passport y JWT
No tienes acceso a esta clase
隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera
Establecida la conexi贸n a la base de datos con Mongoose y creadas las entidades que mapean la informaci贸n, es momento de realizar las consultas a la base de datos desde los servicios.
Aqu铆 tienes una serie de pasos que te ayudar谩n durante este proceso.
Comienza inyectando el esquema creado en el servicio que ser谩 el responsable de realizar las consultas.
// modules/products/products.service.ts
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
@Injectable()
export class ProductsService {
constructor(@InjectModel(Product.name) private productModel: Model<Product>) {}
findAll() {
return this.productModel.find().exec();
}
findOne(id: string) {
return this.productModel.findById(id).exec();
}
}
Utilizando InjectModel, inyectas el esquema de productos en el servicio de productos.
Los servicios son los responsables de realizar las consultas a la base de datos, pero los controladores son quienes determinan cu谩ndo hay que realizar esas consultas.
// module/products/products.controller.ts
@Controller('products')
export class ProductsController {
@Get()
async getAll() {
return await this.productsService.findAll();
}
@Get(':productId')
async getOne(@Param('productId') productId: string) {
return await this.productsService.findOne(productId);
}
}
Crea tantos endpoints como necesites para responder a la necesidad de obtenci贸n de los datos a trav茅s de GET.
As铆, ya tienes completada tu conexi贸n a la base de datos y obtenci贸n de datos en tu API a trav茅s de Mongoose y sus esquemas.
Contribuci贸n creada por: Kevin Fiorentino (Platzi Contributor).
// src/products/services/products.service.ts
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
...
@Injectable()
export class ProductsService {
constructor(
@InjectModel(Product.name) private productModel: Model<Product>, // 馃憟
) {}
...
findAll() { // 馃憟
return this.productModel.find().exec();
}
async findOne(id: string) { // 馃憟
const product = await this.productModel.findById(id).exec();
if (!product) {
throw new NotFoundException(`Product #${id} not found`);
}
return product;
}
...
}
// src/products/controllers/products.controller.ts
@Controller('products')
export class ProductsController {
...
@Get(':productId')
getOne(@Param('productId') productId: string) { // 馃憟
return this.productsService.findOne(productId);
}
}
// src/users/services/users.service.ts
@Injectable()
export class UsersService {
...
async getOrderByUser(id: number) { // 馃憟
const user = this.findOne(id);
return {
date: new Date(),
user,
products: await this.productsService.findAll(), // 馃憟 implement await
};
}
}
Aportes 6
Preguntas 4
Dejo mi aporte de c贸mo a la vez tener el timestamps en true, en el Shema que quieras, me refiero al createdAt y updatedAt
@Schema({
timestamps: true,
})
Dejo mi aporte de como me quedaron los entities del modulo de producto
// products/entities/brand.entity.ts
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
@Schema()
export class Brand extends Document {
@Prop({ required: true })
name: string;
@Prop()
image: string;
}
export const BrandSchema = SchemaFactory.createForClass(Brand);
// products/entities/category.entity.ts
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
@Schema()
export class Category extends Document {
@Prop({ required: true })
name: string;
}
export const CategorySchema = SchemaFactory.createForClass(Category);
// products/services/brand.service.ts
@Injectable()
export class BrandsService {
constructor(
@InjectModel(Brand.name) private brandModel: Model<Brand>,
) {}
findAll() {
return this.brandModel.find().exec();
}
async findOne(id: string) {
const brand = await this.brandModel.findById(id).exec();
if (!brand) {
throw new NotFoundException(`Brand #${id} not found`);
}
return brand;
}
}
// products/services/categories.service.ts
@Injectable()
export class CategoriesService {
constructor(
@InjectModel(Category.name) private categoryModel: Model<Category>,
) {}
findAll() {
return this.categoryModel.find().exec();
}
async findOne(id: string) {
const category = await this.categoryModel.findById(id).exec();
if (!category) {
throw new NotFoundException(`Category #${id} not found`);
}
return category;
}
}
// products/controllers/brand.controller.ts
@ApiTags('brands')
@Controller('brands')
export class BrandsController {
constructor(private brandsService: BrandsService) {}
@Get()
findAll() {
return this.brandsService.findAll();
}
@Get(':id')
get(@Param('id') id: string) {
return this.brandsService.findOne(id);
}
}
// products/controllers/category.controller.ts
@Controller('categories')
export class CategoriesController {
constructor(private categoriesService: CategoriesService) {}
@Get()
findAll() {
return this.categoriesService.findAll();
}
@Get(':id')
get(@Param('id') id: string) {
return this.categoriesService.findOne(id);
}
}
Este curso vale oro. Est谩 excelente
Amo este curso uwu.
Aqu铆 mi endpoint de user funcionando
import { Injectable , Inject } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Page, PageDocument } from 'src/schema/page.schema';
import { CreatePageDTO } from '../dtos/page.dto';
@Injectable()
export class PageService {
constructor(
@InjectModel(Page.name) private pageModel: Model<PageDocument>,
) {}
async createPage( page : CreatePageDTO ) {
const result = await this.pageModel.findOne({ name: page.name })
if( result ) return null
return await new this.pageModel(page).save();
}
async getByName(name) {
const doc = await this.pageModel.findOne({ name });
return doc;
}
async getAllPages() {
const doc = await this.pageModel.find({}, { name: 1 });
return doc;
}
}
}
驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?
o inicia sesi贸n.