개인 프로젝트 - 채용 공고 만들기

최정훈·2022년 8월 8일
0
  • 아래 서비스 개요 및 요구사항을 만족하는 API 서버를 구현합니다.
  • 사용한 기술: Node.js,Sequelize

서비스 개요

  • 본 서비스는 기업의 채용을 위한 웹 서비스 입니다.
  • 회사는 채용공고를 생성하고, 이에 사용자는 지원합니다.

DB 모델링

채용공고ERD

구현기능 및 설명

  1. 채용공고를 등록합니다.

    ➡️ 회사는 아래 데이터와 같이 채용공고를 등록합니다.
    Example)
    {
      "회사_id":회사_id,
      "채용포지션":"",
      "채용보상금":,
      "채용내용":"",
      "사용기술":""
    }
    • 아래는 채용공고를 등록을 담당하는 코드입니다.
        async function createPost(
      company_id,
      employ_position,
      recruitment_compensation,
      contents,
      technology_stack,
    ) {
      return await Post.create({
        company_id: company_id,
        employ_position: employ_position,
        recruitment_compensation: recruitment_compensation,
        contents: contents,
        technology_stack: technology_stack,
      });
    }
  2. 채용공고를 수정합니다.

    ➡️ 회사는 아래 데이터와 같이 채용공고를 수정합니다. (회사 id 이외 모두 수정 가능합니다.)
    Example)
    {
      "채용포지션":"",
      "채용보상금":10000, # 변경됨
      "채용내용":"", 
      "사용기술":"Python"# 변경됨
    }
    
    or
    
    {
      "채용포지션":"",
      "채용보상금":20000,# 변경됨
      "채용내용":"",
      "사용기술":"Django" # 변경됨
    }
  • 아래는 등록한 공고를 수정을 담당하는 코드부분입니다.
    async function updatePost(
      postId,
      employ_position,
      recruitment_compensation,
      contents,
      technology_stack,
    ) {
      return await Post.update(
        {
          employ_position: employ_position,
          recruitment_compensation: recruitment_compensation,
          contents: contents,
          technology_stack: technology_stack,
        },
        {
          where: {
            id: postId,
          },
        },
      );
    }
  1. 채용공고를 삭제합니다.

    ➡️ DB에서 삭제됩니다.
       async function deletePost(postId) {
        return await Post.destroy({
          where: {
            id: postId,
          },
        });
      }
  2. 채용공고 목록을 가져옵니다.

    ➡️ 4-1. 사용자는 채용공고 목록을 아래와 같이 확인할 수 있습니다.
    Example)
    [
        {
            "채용공고_id": 채용공고_id,
          "회사명":"",
          "국가":"",
          "지역":"",
          "채용포지션":"",
          "채용보상금":,
          "사용기술":""
        },
        {
            "채용공고_id": 채용공고_id,
          "회사명":"",
          "국가":"",
          "지역":"",
          "채용포지션":"",
          "채용보상금":,
          "사용기술":""
        },
      
    ]
  • 아래의 코드는 검색기능을 활용하지 않았을때 채용 공고 목록을 담당하는 코드입니다.

    async function searchViewPost() {
      return await Post.findAll({
        attributes: [
          ['id', '채용공고_id'],
          [Sequelize.col('company.company_name'), '회사이름'],
          [Sequelize.col('company.country'), '국가'],
          [Sequelize.col('company.region'), '지역'],
          ['employ_position', '채용포지션'],
          ['recruitment_compensation', '채용보상금'],
          ['technology_stack', '사용기술'],
        ],
        include: {
          model: Company,
          as: 'company',
          attributes: [],
        },
      });
    }
    
    		```
    - keyword를 이용하여 채용공고목록 검색을 담담하는 부분입니다.
    ```javascript
    try {
    const keyword = req.query.keyword;
    let PostLists;
    if (keyword) {
      PostLists = await migrationsPost.searchViewPostByKeyword(keyword);
      console.log(keyword);
    } else {
      PostLists = await migrationsPost.searchViewPost();
    }
    res.status(200).json(PostLists);
    } catch (error) {
    console.log(error.message);
    res.status(error.statusCode || 500).json({ message: 'FAIL' });
     }
    
    			  where: {
      [Op.or]: [
        { employ_position: { [Op.like]: '%' + keyword + '%' } },
        { recruitment_compensation: { [Op.like]: '%' + keyword + '%' } },
        { technology_stack: { [Op.like]: '%' + keyword + '%' } },
      ],
    },
  1. 채용 상세 페이지를 가져옵니다.

    ➡️ 사용자는 채용상세 페이지를 아래와 같이 확인할 수 있습니다.
    • “채용내용”이 추가적으로 담겨있음.
    • 해당 회사가 올린 다른 채용공고 가 추가적으로 포함됩니다
  2. Example)
    {
      "채용공고_id": 채용공고_id,
      "회사명":"",
      "국가":"",
      "지역":"",
      "채용포지션":"",
      "채용보상금":,
      "사용기술":"",
    	"채용내용": "",
    	"회사가올린다른채용공고":[채용공고_id, 채용공고_id, ..] # id List 
    }
  3. 사용자는 채용공고에 지원합니다

    ➡️ 사용자는 채용공고에 아래와 같이 지원합니다.
    • 사용자는 1회만 지원 가능합니다.
  4. Example)
    {
    	"채용공고_id": 채용공고_id,
      "사용자_id": 사용자_id
    }
    • 아래는 같은 유저가 같은 채용공고에 1회만 가능하도록 설계한 부분입니다.
         const createApply = async (req, res) => {
      try {
        const { postId, userId } = req.body;
        const applyList = await migrationsApply.ApplyByUserIdPostId(postId, userId);
    
        if (applyList) {
          return res.status(409).json({ message: '이미 지원하셨습니다.' });
        } else {
          await migrationsApply.createApply(postId, userId);
          return res.status(200).json({ message: 'SUCCESS' });
        }
      } catch (error) {
        res.status(error.statusCode || 500).json({ message: 'FAIL' });
      }
    };
profile
사과

0개의 댓글