본문 바로가기

verdantjuly/Today I Learned

TIL 20240106

728x90

이번 주 목표

Chat.jsx 분석

더미데이터 쿼리 마저 짜기

오늘 목표

더미데이터 쿼리 마저 짜기

오늘 한 것

카카오톡 csv파일 기반 대화방에 들어온 지 하루 지난 사람 출력하기 

더미데이터 쿼리 마저 짜기

 

오늘 스케줄

12:00 귀가, 점심식사

12:30 자유

13:00 영화

16:00 개발

17:00 TIL 작성

17:30 토 : 다음주 계획, 일 : WIL 작성 

18:00 기술면접 공부

19:00 저녁식사

19:30 내 코드 분석

21:30 독서 (모던 자바스크립트 딥다이브)

23:30 스터디방 - 보이스룸 가능 인원 파악

23:45 다이어리 작성

24:00 취침

1. 카카오톡 csv파일 기반 대화방에 들어온 지 하루 지난 사람 출력하기 

참여하고 있는 오픈채팅방에서는 하루 지난 사람만 보이스룸에 들어올 수 있는 규칙이 있다.

보이스룸 진행자 권한을 받게 되었는데 50명 이상 되는 사람을 체크하기 어려울 것 같아 만들었다.

// app.js

const express = require("express");
const csv = require("csv-parser");
const fs = require("fs");
const multer = require("multer");
const path = require("path");

const app = express();
const port = 3000;

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, __dirname);
  },
  filename: (req, file, cb) => {
    cb(null, `${Date.now()}_${file.originalname}`);
  },
});

const upload = multer({ storage: storage });
let users = new Map();

app.post("/upload", upload.single("file"), (req, res) => {
  let result = [];
  try {
    // 업로드된 CSV 파일 경로
    const csvFilePath = req.file.path;

    // CSV 파일 읽기 및 처리
    fs.createReadStream(csvFilePath)
      .pipe(csv(["Date", "User", "Message"]))
      .on("data", (row) => {
        if (row.Message.includes(`${row.User}님이 들어왔습니다.`)) {
          users.set(row.User, new Date(row.Date).getTime() + 86400000);
        }
        if (row.Message.includes(`${row.User}님이 나갔습니다.`)) {
          users.delete(row.User);
        }
        if (row.Message.includes(`님을 내보냈습니다.`)) {
          const target = row.Message.split("님을")[0];
          users.delete(target);
        }
      })
      .on("end", () => {
        users.forEach((value, key) => {
          console.log(key);
          if (new Date().getTime() > value) {
            result.push(key);
          }
        });
        fs.unlink(csvFilePath, (err) => {
          if (err) {
            console.error("Error deleting file:", err);
            res.status(500).send("Error deleting file");
          } else {
            console.log("File deleted successfully.");
            res.status(200).json({ result });
          }
        });
      });
  } catch (error) {
    console.error(error);
    res.status(500).send("Internal Server Error");
  }
});

app.use(express.static(path.join(__dirname, "public")));

app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});

 

// index.js

async function upload() {
  const form = document.getElementById("csvFile");
  const formData = new FormData();
  formData.append("file", form.files[0]);

  const response = await fetch("./upload", {
    method: "POST",
    body: formData,
  });
  const result = await response.json();
  const tempHTML = result.result
    .map((item) => {
      return `<p>${item}</p>`;
    })
    .join("");
  const list = document.getElementById("list");
  list.innerHTML = tempHTML;
}

 

2. 더미데이터 쿼리 짜기

—더미데이터 생성
—필요한 만큼 복제하고 변경하세요.

—회원 추가
INSERT INTO Users (email, nickname, password, createdAt, updatedAt, deletedAt, kakaoId)
VALUES ("first@user.com", "firstuser","$2b$10$j2ttScQDbV17xcrnldH8BuDGhRI3WtvydDhe7oJiq6vSCy6a4Pno2", "2024-01-01 00:00:00","2024-01-01 00:00:00", null, null )

—게시글 추가
INSERT INTO Posts ( userId, title,content, img,annualCategory, createdAt, updatedAt, deletedAt, notice, thumbnail )
VALUES(1, "test", "test", "https://gthen.s3.ap-northeast-2.amazonaws.com/1704335641572_6139dd3798418a9639f846f00","1980", "2024-01-01 00:00:00", "2024-01-01 00:00:00", null, null, "https://gthen.s3.ap-northeast-2.amazonaws.com/1704335642128_6139dd3798418a9639f846f00")

—신고 추가
INSERT INTO Reports (userId, reportType, contentId, content, isReport, createdAt)
VALUES(1, "post", 1,"욕설 금지",true, "2024-01-01 00:00:00")

정리 

formData append 하는 법

  formData.append("file", form.files[0]);

 

 

KPT

Keep

뭐든 도전해 보는 것

Problem

복잡한 것을 싫어해서 완성도가 떨어지는 것

Try

가끔은 배포할 수 있을 정도의 프로젝트도 만들어 보기

소감

재밌었다.

 

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20240109  (0) 2024.01.09
TIL 20240108  (0) 2024.01.08
TIL 20240105  (0) 2024.01.05
TIL 20240104  (2) 2024.01.04
TIL 20240103  (0) 2024.01.03