npm package: @psyrenpark/express-lib
Description: viba express-lib
Author: psyrenpark
Latest version: 3.0.0

## express-lib

### 제작이유

serverlessExpress에서 공통된 기능 배포시 불편함 해결위해 제작

### 업데이트 내용

- v3.0.1

라이브러리 최신화
제거된 기능 제거

###

iot 추가

### 사용법

새버전 공지시

각 프로젝트의 cloud9에서

```properties
cd /home/ec2-user/environment/server/ServerlessExpress
npm install --save @psyrenpark/express-lib
```

- 이후 최신버전으로 변경되었는지 확인할것.

### 미들웨어 적용

```javascript
var { awsMiddleware, httpMiddleware } = require("@psyrenpark/express-lib");

app.use(require(`${__dirname}/middleware/db`));
app.use(require(`${__dirname}/middleware/auth`));

// 미들웨어 db와 auth 다음
app.use(awsMiddleware); // aws 관련 함수
app.use(httpMiddleware); // 통신 관련 함수
```

#### 회원 탈퇴

- 서버 담장자는 클라이언트에서 유저 퇄퇴 기능을 요청 받을경우 아래와같이 작성할것
- 유저의 탈퇴는 디비와 코그니토가 연동되어 있으므로 조심할것
- 먼저 디비 해당유저의 정보를 비활성후 성공후 코그니토 deleteUser를 실행할것
- deleteUser는 롤백기능이 없음
- 클라이언트는 이 api가 성공후 꼭 반드시 로그아웃후 redux, context안의 유저 정보 정리할것
- 서버관리자에게 USER_POOL_ID 관련 작업 요청할것

```javascript
app.delete("/user/:user_no", async function (req, res) {
  var result = [];
  let transaction;

  if (req.user_no !== req.param.user_no) {
    res.status(403).send({ msg: "wrong" });
    return;
  }

  try {
    transaction = await req.sequelize.transaction();

    var qeury_Deactive = req.mybatisMapper.getStatement(
      "SQL",
      "USER_DEATIVE",
      {
        user_id: req.user_id,
        user_no: req.user_no,
      },
      { language: "sql", indent: "  " }
    );

    var deactiveUserData = await req.sequelize.query(qeury_Deactive, {
      transaction: transaction,
      type: req.sequelize.QueryTypes.SELECT,
    });

    if (deactiveUserData.length !== 1) {
      throw new Error("wrong params");
    }

    var deleteUserData = await req.cognito.deleteUser({
      //주의: 배포해야 지만 작동함 (권한필요)
      username: req.user_id, //코그니토 고유 id
    });

    await transaction.commit();

    res.json({
      msg: "ok",
    });
  } catch (error) {
    if (error) await transaction.rollback();
    res.status(403).send({ msg: "wrong", error: error });
  }
});
```

#### 이메일 전송

```javascript
app.post("/send_email", async function (req, res) {
  var param = {
    email: "test9999@ruu.kr", // req.user_info.email
    msg: "인증코드 <h2>123456</h2>", // html 문법 사용가능
    title: "싸이페어 인증메일입니다.", // 싸이페어 인증입니다.
    type: "HTML", // default   type : "TEXT"
  };

  try {
    var result = await req.ses.sendEmail(param);

    res.json({
      msg: "ok",
    });
  } catch (error) {
    res.status(403).send({ msg: "wrong", error: error });
  }
});
```

#### 문자 전송

```javascript
app.post("/send_sms", async function (req, res) {
  var param = {
    phone: "01000000000", //
    msg: "인증코드 123456",
    title: "싸이페어 인증문자입니다.",
  };

  try {
    var result = await req.sms.sendSMS(param);

    res.json({
      msg: "ok",
    });
  } catch (error) {
    res.status(403).send({ msg: "wrong", error: error });
  }
});
```

#### cdn clear

```javascript
app.post("/clear_cdn", async function (req, res) {
  try {
    var nowDate = new Date();
    var nowTimestamp = "" + Math.round(nowDate);

    var params = {
      DistributionId: "E3NS7RWWXZFBWI", // 필요시 요청할 것
      InvalidationBatch: {
        CallerReference: nowTimestamp,
        Paths: {
          Quantity: "1",
          Items: [
            `/*`,
            // `public/test/result/${country}/${test}/${fileName}`,
          ],
        },
      },
    };

    var data = await req.cloudfront.clearCdn(params);

    console.log(data);
  } catch (error) {
    console.log(error);
  }

  res.json({
    msg: "test_test_test13-2 ok",
  });
});
```

## 푸쉬

## s3 업로드

## s3 인증 다운로드 링크

##