Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
22 changes: 22 additions & 0 deletions server/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#dependencies
/node_modules
/.pnp
.pnp.js

#testing
/coverage

#production
/build

# misc
.DS_Store
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
30 changes: 30 additions & 0 deletions server/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# CalenDev

개발자를 위한 캘린더식 정보 공유 플랫폼

## Tech

### FrontEnd

### BackEnd

- JavaScript
- Node.js v16.17.0
- Swagger
- Knex
- mysql2

### DB

- mySql

### Infra

## 진행 방향

- 캘린더형 UI를 통해 행사 정보를 직관적을 전달할 수 있는 서비스 개발
- 클린코드 지향
- 테스트 코드 작성
- [Pull Request Template](https://github.com/angular/angular/blob/main/.github/PULL_REQUEST_TEMPLATE.md)

test
9 changes: 9 additions & 0 deletions server/api/routes/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function (req, res, next) {
res.send('index');
});

module.exports = router;
30 changes: 30 additions & 0 deletions server/api/routes/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* @swagger
* /users:
* get:
* tags:
* - users
* description: 모든 사용자 조회
* produces:
* - application/json
* responses:
* 200:
* description: 유저 검색 성공
*/

var express = require('express');
const knex = require('../../config/knex');
const knex2 = require('../../models/user');
var router = express.Router();

/* GET users listing. */
router.get('/', async function (req, res, next) {
//db에서 가져오기
// const list = await knex('user').select('*').then(console.log);
const list = await knex2;
console.log(list);

res.send(list);
});

module.exports = router;
55 changes: 55 additions & 0 deletions server/api/routes/users/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/**
* @swagger
* /users:
* get:
* tags:
* - users
* description: 모든 사용자 조회
* produces:
* - application/json
* responses:
* 200:
* description: 유저 검색 성공
*
*/

/**
* @swagger
* /users/check-email:
* post:
* tags:
* - users
* description: 모든 사용자 조회
* produces:
* - application/json
* responses:
* 200:
* description: 유저 검색 성공
*
*/

var express = require('express');
const knex = require('../../../config/knex');
const knex2 = require('../../../models/user');
var router = express.Router();

/* GET users listing. */
router.get('/', async function (req, res, next) {
//db에서 가져오기
// const list = await knex('user').select('*').then(console.log);
const list = await knex2.getAllUsers;
console.log(list);

res.send(list);
});

/* POST list target user */
router.post('/check-email', async function (req, res, next) {
const { user_email } = req.body;
console.log(user_email);

const isExist = await knex2.findTargetUserByEmail;
res.send(isExist === undefined ? false : true);
});

module.exports = router;
43 changes: 43 additions & 0 deletions server/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
// const db = require('./config/mysql');
var indexRouter = require('./api/routes/index');
var usersRouter = require('./api/routes/users');
require('dotenv').config();

const app = express();

//Swagger API 라우팅
const { swaggerUi, specs } = require('./config/swagger/swagger');
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs));

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
//현재 view가 없어서 error생김. react 연동하면 해결될듯.
next(createError(404));
});

// error handler
// app.use(function (err, req, res, next) {
// // set locals, only providing error in development
// res.locals.message = err.message;
// res.locals.error = req.app.get('env') === 'development' ? err : {};

// // render the error page
// res.status(err.status || 500);
// res.render('error');
// });

module.exports = app;
86 changes: 86 additions & 0 deletions server/bin/www
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#!/usr/bin/env node

/**
* Module dependencies.
*/

var app = require('../app');
var debug = require('debug')('server:server');
var http = require('http');

/**
* Get port from environment and store in Express.
*/
console.log(process.env.PORT);
var port = normalizePort(process.env.PORT || '8000');
app.set('port', port);

/**
* Create HTTP server.
*/

var server = http.createServer(app);

/**
* Listen on provided port, on all network interfaces.
*/

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
* Normalize a port into a number, string, or false.
*/

function normalizePort(val) {
var port = parseInt(val, 10);

if (isNaN(port)) {
// named pipe
return val;
}

if (port >= 0) {
// port number
return port;
}

return false;
}

/**
* Event listener for HTTP server "error" event.
*/

function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}

var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;

// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}

/**
* Event listener for HTTP server "listening" event.
*/

function onListening() {
var addr = server.address();
var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
debug('Listening on ' + bind);
}
Empty file.
Empty file.
31 changes: 31 additions & 0 deletions server/config/knex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// const knex = require('knex')({
// client: 'mysql2',
// connection: {
// host: '127.0.0.1',
// port: '3306',
// user: 'root',
// password: 'ansekgns421!',
// database: 'calendev',
// },
// });

// // knex
// // .raw('select * from user')
// // .then((resp) => {
// // console.log(resp);
// // })
// // .catch((err) => {
// // console.log(err);
// // });

// https: module.exports = knex;

module.exports = require('knex')({
client: 'mysql2',
connection: {
host: 'localhost',
user: 'root', // 실제 서비스에서는 root 계정을 사용하지 않는 것이 좋습니다.
password: 'ansekgns421!',
database: 'calendev',
},
});
25 changes: 25 additions & 0 deletions server/config/mysql.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//get the client
const mysql = require('mysql2');

// Create the connection pool. The pool-specific settings are the defaults
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'ansekgns421!',
database: 'calendev',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0,
});

let sql = 'SELECT * FROM user';

pool.execute(sql, async function (err, res) {
console.log('===Trying to Connect Database===');

if (err) throw err;
await console.log(res);
});

//다른 파일에서도 접근가능하게 모듈화.
module.exports = pool.promise();
23 changes: 23 additions & 0 deletions server/config/swagger/swagger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const swaggerUi = require('swagger-ui-express');
const swaggereJsdoc = require('swagger-jsdoc');

const options = {
swaggerDefinition: {
info: {
title: 'Sample Calendev App',
version: '1.0.0',
description: 'This is sample server for testing Calendev App',
},
//testing in local
host: `localhost:8000`,
basePath: '/',
},
apis: ['./api/routes/users/*.js', './swagger/*'],
};

const specs = swaggereJsdoc(options);

module.exports = {
swaggerUi,
specs,
};
Empty file added server/loaders/index.js
Empty file.
8 changes: 8 additions & 0 deletions server/models/user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'use strict';
const knex = require('../config/knex');

async function getAllUsers() {
return await knex('user').select('user_email');
}

module.exports = getAllUsers();
Loading