Merge pull request #1 from aabril/feat/project_structure
Project structure
This commit is contained in:
		@@ -11,8 +11,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Changelog
 | 
					## Changelog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Inicializamos el projecto, usando npm init, con la node@latest (v24.4.1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Inicializamos el proyecto, usando npm init, con la node@latest (v24.4.1)
 | 
				
			||||||
 | 
					- Añadimos dependencias que voy a usar 
 | 
				
			||||||
 | 
					- Creo una estructura de directorio inicial
 | 
				
			||||||
 | 
					- Añado un primer test (database.test.ts) para jest
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6497
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6497
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										14
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								package.json
									
									
									
									
									
								
							@@ -17,11 +17,21 @@
 | 
				
			|||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "build": "tsc",
 | 
					    "build": "tsc",
 | 
				
			||||||
    "start": "node dist/index.js",
 | 
					    "start": "node dist/index.js",
 | 
				
			||||||
    "dev": "ts-node src/index.js"
 | 
					    "dev": "tsx watch src/index.ts",
 | 
				
			||||||
 | 
					    "test": "jest",
 | 
				
			||||||
 | 
					    "test:watch": "jest --watch",
 | 
				
			||||||
 | 
					    "lint": "eslint src/**/*.ts",
 | 
				
			||||||
 | 
					    "lint:fix": "eslint src/**/*.ts --fix"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@types/jest": "^30.0.0",
 | 
				
			||||||
    "@types/node": "^24.1.0",
 | 
					    "@types/node": "^24.1.0",
 | 
				
			||||||
    "ts-node": "^10.9.2",
 | 
					    "@typescript-eslint/eslint-plugin": "^8.38.0",
 | 
				
			||||||
 | 
					    "@typescript-eslint/parser": "^8.38.0",
 | 
				
			||||||
 | 
					    "eslint": "^9.32.0",
 | 
				
			||||||
 | 
					    "jest": "^30.0.5",
 | 
				
			||||||
 | 
					    "ts-jest": "^29.4.0",
 | 
				
			||||||
 | 
					    "tsx": "^4.20.3",
 | 
				
			||||||
    "typescript": "^5.8.3"
 | 
					    "typescript": "^5.8.3"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								src/__tests__/database.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/__tests__/database.test.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					// test temporal para probar que jest funciona
 | 
				
			||||||
 | 
					describe('DatabaseConnection', () => {
 | 
				
			||||||
 | 
					    describe('Singleton Pattern', () => {
 | 
				
			||||||
 | 
					        test('should return the same instance', () => {})
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
							
								
								
									
										17
									
								
								src/config/database.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/config/database.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					// aqui la conexión con MongoDB, usando mongoose o cualquier otro odm que vaya a usar
 | 
				
			||||||
 | 
					// las conexión a bases de datos normalmente deberían ser Singleton para reutilizar la conexión
 | 
				
			||||||
 | 
					// motivo: pues no saturar la base de datos ni saturarla con multiples conexiones
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class DatabaseConnection {
 | 
				
			||||||
 | 
					    private static instance: DatabaseConnection;
 | 
				
			||||||
 | 
					    // private isConnected: boolean = false; // a implementar
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    private constructor() {}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    public static getInstance(): DatabaseConnection {
 | 
				
			||||||
 | 
					      if (!DatabaseConnection.instance) {
 | 
				
			||||||
 | 
					        DatabaseConnection.instance = new DatabaseConnection();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return DatabaseConnection.instance;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										6
									
								
								src/controllers/FeedController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/controllers/FeedController.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					// Aquí exportamos una classe que gestiona las peticiones y comunica con los servicios/repositorioes
 | 
				
			||||||
 | 
					// thinking out loud: creo que voy a usar hono.dev, usaba express hace tiempo, y veo que es una especie de express moderno compatible con express
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class FeedController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										5
									
								
								src/models/Feed.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/models/Feed.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					// Aquí el modelo Feed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Si usase mongoose, supongo que será diretamente el modelo de mongoose
 | 
				
			||||||
 | 
					// Ya veré si uso algun otro ODM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								src/repositories/FeedRepository.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/repositories/FeedRepository.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					// Aquí el "repositorio" para lidiar con el modelo 
 | 
				
			||||||
 | 
					// Lo tipico : ( Find , FindById, CreateOne ) etc.
 | 
				
			||||||
							
								
								
									
										1
									
								
								src/types/Feed.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/types/Feed.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					// Aquí exportaré las interfaces que vaya a necesitas: las básicas, dtos, enums, etc.
 | 
				
			||||||
							
								
								
									
										2
									
								
								src/utils/logger.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/utils/logger.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					// Aquí "abstraeré" los logs, para evitar el uso de console.log (por seguridad, y por si queremos extraerlo a algun servicio)
 | 
				
			||||||
 | 
					// En mi dia usaba winston, llegué a usar pino que era más ligero, supongo que usaré pino, ya veremos.
 | 
				
			||||||
		Reference in New Issue
	
	Block a user