diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5f19d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +package-lock.json diff --git a/app.js b/app.js new file mode 100644 index 0000000..b8629cf --- /dev/null +++ b/app.js @@ -0,0 +1,30 @@ +const express = require('express') +const path = require('path') + +const authRoutes = require('./routes/auth') +const productsRoutes = require('./routes/products') +const usersRoutes = require('./routes/users') + +const app = express() +const port = process.env.PORT || 3000 + +// Middleware +app.use(express.json()) // For parsing application/json +app.use(express.urlencoded({ extended: true })) // For parsing URL-encoded form data + +// Static Files (Serving Frontend) +app.use(express.static(path.join(__dirname, 'public'))) + +// Mount Routes +app.use('/auth', authRoutes) +app.use('/products', productsRoutes) +app.use('/users', usersRoutes) + +// Default Route (Catch-all for undefined routes) +app.use((req, res, next) => { + res.status(404).send('Sorry, the resource you requested could not be found.') +}) + +app.listen(port, () => { + console.log(`Server listening on port ${port}`) +}) diff --git a/config/index.js b/config/index.js new file mode 100644 index 0000000..c3f9d4b --- /dev/null +++ b/config/index.js @@ -0,0 +1,10 @@ +// config/index.js +export default { + database: { + host: process.env.DB_HOST || 'localhost', + user: process.env.DB_USER || 'your_db_user', + password: process.env.DB_PASSWORD || 'your_db_password', + database: process.env.DB_NAME || 'your_db_name', + port: process.env.DB_PORT || 5432, + }, +} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..6ea7cfd --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,27 @@ +// eslint.config.js (Advanced alternative) +import prettierPlugin from 'eslint-plugin-prettier' +import prettierConfig from 'eslint-config-prettier' +import prettierOptions from './prettier.config.js' // Import your config directly +import importPlugin from 'eslint-plugin-import' + +export default [ + { + plugins: { + prettier: prettierPlugin, + import: importPlugin, + }, + rules: { + ...prettierConfig.rules, + 'prettier/prettier': ['error', prettierOptions], + 'no-sequences': 'off', + 'no-console': 'warn', + 'import/first': 'error', + 'import/newline-after-import': 'error', + 'import/no-duplicates': 'error', + 'import/no-unresolved': 'error', + 'import/no-unused-modules': ['warn', { missingExports: true }], + quotes: ['error', 'single'], + semi: 'off', + }, + }, +] diff --git a/package.json b/package.json index ff4c1ea..4d25064 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,16 @@ { - "name": "express-postgres-example", + "name": "tcg-collectors-server", "version": "1.0.0", "description": "A basic Express application with PostgreSQL integration.", "main": "app.js", "scripts": { "start": "node app.js", - "dev": "nodemon app.js" + "dev": "nodemon app.js", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "format": "prettier --config prettier.config.js --write ." }, + "type": "module", "keywords": [ "express", "node.js", @@ -17,12 +21,17 @@ "author": "Your Name", "license": "MIT", "dependencies": { - "express": "^4.18.2", - "pg": "^8.8.0", "dotenv": "^16.0.3", - "nodemon": "^3.0.0" + "express": "^4.18.2", + "pg": "^8.8.0" }, "devDependencies": { - "jest": "^29.0.0" + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-prettier": "^5.5.5", + "jest": "^29.0.0", + "nodemon": "^3.0.0", + "prettier": "^3.8.3" } } diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..b54afba --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,8 @@ +// prettier.config.js +export default { + trailingComma: 'es5', + tabWidth: 2, + semi: false, // Crucial: Sets semicolon removal. + useTabs: true, + singleQuote: true, +}